aceking1123 发表于 2019-3-25 17:14:07

新人刚学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:35:20

本帖最后由 edmundlee 于 2019-3-26 18:36 编辑

把执行时间长的任务, 设为低优先级别。
就是TaskA 优先级别要高于 TaskB

aceking1123 发表于 2019-3-27 10:23:19

edmundlee 发表于 2019-3-26 18:35
把执行时间长的任务, 设为低优先级别。
就是TaskA 优先级别要高于 TaskB

谢谢回复,我想知道具体的话,OS会在什么时候切换这两个任务呢?每1ms切换一次吗?

edmundlee 发表于 2019-3-27 11:43:53

aceking1123 发表于 2019-3-27 10:23
谢谢回复,我想知道具体的话,OS会在什么时候切换这两个任务呢?每1ms切换一次吗? ...

在FreeRTOSConfig.h文件里的TICK_RATE_HZ 就是决定时隔多久, 调度器重新选择没被阻塞而最优先的任务执行。

xiaojie0513 发表于 2019-3-27 12:56:46

使用FreeRTOS的绝对延时就行了~参考我博客:http://blog.csdn.net/jiejiemcu/article/details/81515788

xiaojie0513 发表于 2019-3-27 12:56:55

使用FreeRTOS的绝对延时就行了~参考我博客:http://blog.csdn.net/jiejiemcu/article/details/81515788

xiaojie0513 发表于 2019-3-27 12:57:43

使用FreeRTOS的绝对延时就行了~参考我博客:http://blog.csdn.net/jiejiemcu/article/details/81515788

aceking1123 发表于 2019-3-27 17:46:49

xiaojie0513 发表于 2019-3-27 12:57
使用FreeRTOS的绝对延时就行了~参考我博客:http://blog.csdn.net/jiejiemcu/article/details/81515788 ...

{:2_27:}学习了,谢谢,我再查一下~{:2_28:}
页: [1]
查看完整版本: 新人刚学RTOS,请教占用时间很长程序。时间片如何抢占?