FreeRTOS学习(四)延时 |
您所在的位置:网站首页 › 辽宁大学开学时间是否延迟了呀 › FreeRTOS学习(四)延时 |
延时Delay
就是交出CPU一段时间,如果任务一直不延时或者挂起,那么低优先级的任务会无法获得CPU。 FreeRTOS延时的单位是tick,就是调度的基本单位(不是毫秒) vTaskDelay和vTaskDelayUntil都是延时函数,vTaskDelayUntil是精确延时 函数原型 123void vTaskDelay( const TickType_t xTicksToDelay ) void vTaskDelayUntil( TickType_t * const pxPreviousWakeTime, const TickType_t xTimeIncrement ) vTaskDelay 12345while(1) { //执行操作... vTaskDelay(1000 / portTICK_RATE_MS);//1000ms后重新执行操作 } vTaskDelayUntil 12345678TickType_t lasttick; lasttick = xTaskGetTickCount(); while(1) { //执行操作... //相对于lasttick 1000ms后重新执行操作 vTaskDelayUntil(&lasttick, 1000 / portTICK_RATE_MS); }vTaskDelayUntil会自动给变量赋值,lasttick 只需要赋值第一次 测试: 123456789101112131415//vTaskDelayUntil测试 void delay_test_task(){ TickType_t lasttick = xTaskGetTickCount(); //初值 while(1) { printf("----------------------\n"); printf("1.lasttick:%d,\txTaskGetTickCount:%d\n",lasttick,xTaskGetTickCount()); vTaskDelayUntil(&lasttick,100); printf("2.lasttick:%d,\txTaskGetTickCount:%d\n",lasttick,xTaskGetTickCount()); vTaskDelayUntil(&lasttick,100); printf("3.lasttick:%d,\txTaskGetTickCount:%d\n",lasttick,xTaskGetTickCount()); vTaskDelayUntil(&lasttick,200); printf("4.lasttick:%d,\txTaskGetTickCount:%d\n",lasttick,xTaskGetTickCount()); } } |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |