CMSIS-RTOS API implementation for FreeRTOS V8.1.2 有问题

2019-12-13 18:31发布

osStatus osDelayUntil (uint32_t PreviousWakeTime, uint32_t millisec)
{
#if INCLUDE_vTaskDelayUntil
  TickType_t ticks = (millisec / portTICK_PERIOD_MS);
  TickType_t previouswake = (TickType_t) PreviousWakeTime;
  vTaskDelayUntil(&previouswake, ticks ? ticks : 1);
  
  return osOK;
#else
  (void) millisec;
  (void) PreviousWakeTime;
  
  return osErrorResource;
#endif
}
该函数的TickType_t previouswake = (TickType_t) PreviousWakeTime; 有问题
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
3条回答
gagaguojia
2019-12-13 21:47
本帖最后由 gagaguojia 于 2019-2-13 17:02 编辑

没有问题,你不要看局部。正确的用法如下:
uint32_t   xLastWakeTime;
xLastWakeTime=osKernelSysTick();//初始化xLastWakeTime为当前滴答数
注意第一次使用的时候 要获取当前时间
之后这个值会变 会一直保存在这个变量里,我们只要保证这个变量一直有自己的空间即是个全局变量,那么只要第一次运行,获取滴答数即可
...
osDelayUntil(xLastWakeTime,100);//延时100ms
...
osDelayUntil(xLastWakeTime,1);//延时1ms
...

你要先看看FreeRtos里vTaskDelayUntil这个函数怎么用,然后你再看看再cmsis rtos里是怎么封装这些函数的,你就明白了

不管怎么用,初始滴答值总是要先提取一下的

一周热门 更多>