本帖最后由 aceking1123 于 2019-3-25 17:18 编辑 我有2个任务,A任务必须2ms执行一次,每次用时0.7ms,B任务每60ms执行一次,用时22ms 裸跑的时候是在主程序里循环执行B任务,在每2ms中断里执行A 如果用了FreeRTOS和设置了1ms的sysclk,那么OS会如何分配时间片呢? 在task2dosth();//22ms里面能抢占实时执行task1的任务吗? 如何保证A能2ms执行一次? void TaskA(void){ while(1){ taskAdosth();//0.7ms vTaskDelay(2); } } void TaskB(void){ while(1){ taskBdosth();//22ms vTaskDelay(60); } } |
把执行时间长的任务, 设为低优先级别。
就是TaskA 优先级别要高于 TaskB
评分
查看全部评分
谢谢回复,我想知道具体的话,OS会在什么时候切换这两个任务呢?每1ms切换一次吗?
在FreeRTOSConfig.h文件里的TICK_RATE_HZ 就是决定时隔多久, 调度器重新选择没被阻塞而最优先的任务执行。
评分
查看全部评分
学习了,谢谢,我再查一下~