rt_tick_from_millisecond
时间: 2023-07-30 07:11:49 浏览: 494
rt_tick_from_millisecond是一个函数,通常用于将毫秒转换为实时操作系统中的时钟节拍数。其函数原型如下:
```c
rt_tick_t rt_tick_from_millisecond(rt_uint32_t ms);
```
该函数接受一个表示毫秒数的参数ms,返回一个表示相应时钟节拍数的rt_tick_t类型的值。
在实时操作系统中,通常使用时钟节拍来表示时间,而时钟节拍的间隔是固定的。因此,如果我们知道时钟节拍的间隔,就可以将毫秒数转换为时钟节拍数。
rt_tick_from_millisecond函数的实现通常如下所示:
```c
rt_tick_t rt_tick_from_millisecond(rt_uint32_t ms)
{
rt_tick_t tick;
tick = (rt_tick_t)((ms * OS_TICK_PER_SECOND) / 1000);
if (tick == 0 && ms != 0) tick = 1;
return tick;
}
```
在该实现中,先将ms乘以每秒的时钟节拍数(OS_TICK_PER_SECOND),再除以1000,得到相应的时钟节拍数。如果计算结果为0且ms不为0,则将tick设为1。最后,将计算结果返回作为函数的返回值。
这个函数通常会在需要将毫秒数转换为时钟节拍数的场景中使用,例如在等待一定时间、定时执行任务等场景中。
相关问题
如何使用rt_thread_sleep() 函数将线程以微秒级别挂起
在使用 `rt_thread_sleep()` 函数时,传入的参数是以系统时钟节拍为单位的,因此可以通过计算将时间转换为微秒级别。例如,如果系统时钟节拍为 10ms,要挂起 100 微秒,则需要调用 `rt_thread_sleep(1)` 函数。
以下是一个示例代码,将线程以微秒级别挂起:
```c
#include <rtthread.h>
void thread_entry(void* parameter)
{
rt_uint32_t time_us = 100; // 挂起 100 微秒
rt_uint32_t tick = rt_tick_get(); // 获取当前系统时钟节拍数
rt_uint32_t tick_us = rt_tick_from_millisecond(time_us / 1000); // 将微秒转换为系统时钟节拍数
rt_thread_sleep(tick + tick_us - rt_tick_get()); // 计算挂起的时间,并调用 rt_thread_sleep() 函数挂起线程
while (1)
{
// 线程代码
}
}
```
在上面的示例代码中,首先获取了当前的系统时钟节拍数 `tick`,然后将要挂起的时间 `time_us` 转换为系统时钟节拍数 `tick_us`,最后调用 `rt_thread_sleep()` 函数挂起线程。注意,由于系统时钟节拍数是一个递增的值,因此需要确保计算得到的挂起时间大于当前的系统时钟节拍数,否则线程将不会被正确挂起。
EXTRACT(MILLISECOND FROM (SYSTIMESTAMP - TIMESTAMP '1970-01-01 00:00:00')); 报错From只允许特定得内置函数 怎么修改
您可以使用以下语句将UNIX时间戳(毫秒)提取为Oracle中的整数:
```
SELECT (SYSDATE - TO_DATE('1970-01-01 00:00:00', 'YYYY-MM-DD HH24:MI:SS')) * 24 * 60 * 60 * 1000 FROM DUAL;
```
该查询将返回当前时间戳的整数值(以毫秒为单位)。您可以将SYSDATE替换为其他日期/时间值以获取该值。
阅读全文