你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

新人刚学RTOS,请教占用时间很长程序。时间片如何抢占?

[复制链接]
aceking1123 提问时间:2019-3-25 17:14 /
本帖最后由 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);
}
}
222.png

IMG_20190325_170054.jpg

收藏 评论7 发布时间:2019-3-25 17:14

举报

7个回答
edmundlee 回答时间:2019-3-26 18:35:20
本帖最后由 edmundlee 于 2019-3-26 18:36 编辑

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

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

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

评分

参与人数 1蝴蝶豆 +3 收起 理由
STMCU + 3

查看全部评分

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 ...

学习了,谢谢,我再查一下~

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版