完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
问题一、为什么一般FreeRTOS内核的优先级推荐设置比较低的优先级?
如果内核优先级比较低,则任务切换会受到中断函数执行的影响,Task的实时性如何保证? 当然,可以通过高优先级的定时器产生定时中断来执行相应的代码,根据能否调用API,分两种情况。 第一种,能调用API,这类中断优先级不可以太高(必须可以***作系统屏蔽),响应会受到任务切换的影响,但是由于临界区代码非常短,可以接受。 第二种,不能调用API,优先级随便,高优先级的中断不受操作系统任务调度的影响,因为即使操作系统当前在临界区,该类中断依然可以正常执行。 问题二、如下两个任务 { xTaskCreate(task1, "task1", 0x200, NULL, 4, NULL); xTaskCreate(task2, "task2", 0x200, NULL, 5, NULL); } task1和task2都是无限死循环切换一个GPIO状态,按照道理,task2应该会将task1“饿死”,但是事实上却没有,可能是什么原因? 同时,下面一种就会出现task2将task1“饿死” { xTaskCreate(task1, "task1", 0x200, NULL, 3, NULL); xTaskCreate(task2, "task2", 0x200, NULL, 4, NULL); } 码字码到一半的时候,灵光一闪,问题二的原因想想其实不难, #define configMAX_PRIORItiES ( 5 ) |
|
相关推荐
9个回答
|
|
我用freertos这么久了从来没怎么使用过优先级,只有一个看门狗是1,其他的全是2,任务内容设计不好,才是最大的问题
|
|
|
|
路过帮顶
|
|
|
|
有个问题就是,我创建两个任务,一个优先级高一个优先级低,然后运行,高优先级运行完不会自动运行低优先级的。一直运行高优先级的
|
|
|
|
你要是在高优先级的任务里不在适当位置进行任务调度的话,当然会一直占用着CPU不会去执行低优先级的任务。可以在适当的位置加入vTaskDelay等。
|
|
|
|
|
|
|
|
|
|
一个任务就是一个死循环,所以那个扫地没有扫完一说,要么你在任务的代码里把事情完成后调用delete删掉任务,或者用suspend挂起任务。要么你加入适当的delay,这些都会引发任务调度,让低优先级待命任务可以获取CPU使用权。加入delay的话,在延时结束后,这个扫地任务会再扫一次。
|
|
|
|
FreeRTOS里同等优先级的会分时运行, 也就是说如果扫地和拖地会分别运行一个Tick,轮流着来。如果uCOS的话,就不会有同等优先级了。
|
|
|
|
同问 解决了吗
1,task1和task2都是无限死循环切换一个GPIO状态,按照道理,task2应该会将task1“饿死”,但是事实上却没有,可能是什么原因? 2,同时,下面一种就会出现task2将task1“饿死” { xTaskCreate(task1, "task1", 0x200, NULL, 3, NULL); xTaskCreate(task2, "task2", 0x200, NULL, 4, NULL); } @原子哥 |
|
|
|
只有小组成员才能发言,加入小组>>
800 浏览 0 评论
1156 浏览 1 评论
2531 浏览 5 评论
2863 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2714 浏览 6 评论
keil5中manage run-time environment怎么是灰色,不可以操作吗?
1092浏览 3评论
197浏览 2评论
463浏览 2评论
376浏览 2评论
M0518 PWM的电压输出只有2V左右,没有3.3V是怎么回事?
458浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-25 08:45 , Processed in 1.319335 second(s), Total 95, Slave 76 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号