新人刚学RTOS,请教占用时间很长程序。时间片如何抢占?
本帖最后由 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);
}
}
本帖最后由 edmundlee 于 2019-3-26 18:36 编辑
把执行时间长的任务, 设为低优先级别。
就是TaskA 优先级别要高于 TaskB
edmundlee 发表于 2019-3-26 18:35
把执行时间长的任务, 设为低优先级别。
就是TaskA 优先级别要高于 TaskB
谢谢回复,我想知道具体的话,OS会在什么时候切换这两个任务呢?每1ms切换一次吗? aceking1123 发表于 2019-3-27 10:23
谢谢回复,我想知道具体的话,OS会在什么时候切换这两个任务呢?每1ms切换一次吗? ...
在FreeRTOSConfig.h文件里的TICK_RATE_HZ 就是决定时隔多久, 调度器重新选择没被阻塞而最优先的任务执行。 使用FreeRTOS的绝对延时就行了~参考我博客:http://blog.csdn.net/jiejiemcu/article/details/81515788 使用FreeRTOS的绝对延时就行了~参考我博客:http://blog.csdn.net/jiejiemcu/article/details/81515788 使用FreeRTOS的绝对延时就行了~参考我博客:http://blog.csdn.net/jiejiemcu/article/details/81515788 xiaojie0513 发表于 2019-3-27 12:57
使用FreeRTOS的绝对延时就行了~参考我博客:http://blog.csdn.net/jiejiemcu/article/details/81515788 ...
{:2_27:}学习了,谢谢,我再查一下~{:2_28:}
页:
[1]