[Raw-OS] raw-os 中高精度时间的测量以及延时的实现

jorya_txj   2015-12-13 11:29 楼主
有些人可能会埋怨raw-os中没有us级别的延时以及us精度的时间测量,其实这个机制早就是有了,只需要打开一个宏定义开关就好了。
把下面的开关定义为1就好了。
#define RAW_CONFIG_CPU_TIME                                         1
然后使用RAW_CPU_TIME_GET() 得到目前的一个cpu内部时间的点,然后做延时还是做什么事情都行,然后再调用RAW_CPU_TIME_GET(),得到第二个时间点,前后相减结合cpu频率换算一下就出来了。具体的示意如下:

t1 = RAW_CPU_TIME_GET();
do something
t2 = RAW_CPU_TIME_GET();
测量时间 = 1000000*(t1  - t2) / frequency

至于延时也是一样的,不再表述。


回复评论 (2)

在trochili rtos里是这么实现的
/*************************************************************************************************
*  功能:获得系统已运行时钟节拍数                                                               *
*  参数:(1) pStamp 返回系统已运行时钟节拍数                                                    *
*  返回:无                                                                                     *
*  说明:                                                                                       *
*************************************************************************************************/
void xKernelGetJiffies(TTimeTick* pJiffies)
{
    TReg32 imask;

    CpuEnterCritical(&imask);
    *pJiffies = uKernelVariable.Jiffies;
    CpuLeaveCritical(imask);
}
/*************************************************************************************************
*  功能:获得系统已运行时钟节拍数                                                               *
*  参数:(1) pJiffies 保存系统已运行的时钟节拍数                                                *
*  返回:无                                                                                     *
*  说明:                                                                                       *
*************************************************************************************************/
void TclGetTimeJiffies(TTimeTick* pJiffies)
{
    KNL_ASSERT((pJiffies != (TTimeTick*)0), "");       
    xKernelGetJiffies(pJiffies);
}


/*************************************************************************************************
*  功能:获得系统已运行时间戳                                                                   *
*  参数:(1) pStamp 以微秒为单位的时间戳数值                                                    *
*  返回:无                                                                                     *
*  说明:                                                                                       *
*************************************************************************************************/
void TclGetTimeStamp(TTimeStamp* pStamp)
{
    TTimeTick jiffies;       
    KNL_ASSERT((pStamp != (TTimeStamp*)0), "");
       
    xKernelGetJiffies(&jiffies);
    *pStamp = (jiffies * 1000U * 1000U) / TCL_TIME_TICK_RATE;
}
点赞  2015-12-14 10:56
不错,国产RTOS活力无限
非常好的功能,raw-os有很多非常棒的特性
电工
点赞  2015-12-14 12:54
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复