configTICK_RATE_HZ其含义是1秒钟TICK中断产生的次数,因为FreeRTOS使用Tick终端进行调度,这个频率越高则定时的精度越高,但是由此带来的系统开销也越大。 知道了这个宏定义以后,我们就可以进行时间的换算了,例如我们想演示500ms,则可以使用: vTaskDelay(500/portTICK_RATE_MS); 2.pdMS_TO_TICKS 这是一个带参数的...
xTickToWait:互斥量无效时,任务最多等待的时间,单位是系统节拍周期个数。使用宏portTICK_PERIOD_MS可以辅助将系统节拍个数转化为实际时间(以毫秒为单位)。如果设置为0,表示不是设置等待时间。如果任务已经拥有信号量则xSemaphoreTakeRecursive()立即返回,不管xTickToWait是什么值。 返回值:成功获取递归互斥量返回pdTURE...
调度器会在每个时间片结束的时候通过周期中断(tick interrupt)执行一次,调度器根据设置的抢占式还是合作式模式选择哪个任务在下一个时间片会运行。 时间片的大小由configTICK_RATE_HZ这个参数设置。如果configTICK_RATE_HZ设置为10HZ,则时间片的大小为100ms。configTICK_RATE_HZ的值由应用需求决定,通常设为100HZ(...
void vTask1(void* pvParameters){TickType_t xLastWakeTime;const TickType_t xDelay = pdMS_TO_TICKS(1000); // 设置延迟时间为 1000ms// 初始化上次唤醒时间xLastWakeTime = xTaskGetTickCount();while (1){// 任务执行代码vTaskDelayUntil(&xLastWakeTime, xDelay);}}void vTask2(void* pvParameters)...
const TickType_t xDelay500ms = pdMS_TO_TICKS( 500UL ); for( ;; ) { vTaskDelay( xDelay500ms ); vPrintString( "Periodic task - About to generate an interrupt.\r\n" ); vPortGenerateSimulatedInterrupt( mainINTERRUPT_NUMBER ); ...
freertos不知道,比如rt-thread可以用信号量。while(1){ LED_ON;获取信号量(超时时间1秒)if(获取到...
voidvTASKReadSensor(void*pvParameters){// 500ms 转换为 节拍constportTickType xDelay=pdMS_TO_TICKS(500);for(;;){readSensor();vTaskDelay(xDelay);}} 看起来是周期性 500 ms 执行, 但是考虑, 如果任务由于优先级比较低之类的问题, 在延时返回就绪状态后没有及时被运行,那么实际时间就开始飘了。
const TickType_t xDelay200ms = pdMS_TO_TICKS( 200UL ), xDontBlock = 0; for( ;; ) { vTaskDelay( xDelay200ms ); // 设置事件位 0 vPrintString( "Bit setting task -\t about to set bit 0.\r\n" ); xEventGroupSetBits( xEventGroup, mainFIRST_TASK_BIT ); ...
代码如下(1000ms 周期打印): 代码语言:javascript 复制 voidvTask(void*pvParameters){while(1){#ifdefSTM32printf("[STM32] hello, this is freertos!\r\n");#endif #ifdefGD32printf("[ GD32] hello, this is freertos!\r\n");#endifvTaskDelay(pdMS_TO_TICKS(1000));}} ...
函数参数:xTicksToDelay表示调用函数的任务的阻塞态保持时间,单位为时钟节拍数。真正的延时时间取决于时钟节拍频率。宏 portTICK_PERIOD_MS被用来根据时钟节拍数来计算一个时钟节拍的延时周期。 #defineportTICK_PERIOD_MS((TickType_t)1000/configTICK_RATE_HZ)#defineconfigTICK_RATE_HZ(1000) ...