完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
比如在某个任务中的某段代码不能被打断执行而占用时间估计也有几ms,使用了vTaskSuspendAll()调度上锁函数和vTaskResumeAll()解锁函数。在还没有调用vTaskResumeAll()前发生了某个中断,某个中断函数中调用了portYIELD_FROM_ISR(xHigherPriorityTaskWoken)该函数(该函数判断是否有更高优先级任务处于等待状态,如果是要切换),请问这个时候还能保证正常切换到最高优先级吗?
|
|
相关推荐
6个回答
|
|
|
|
我理解的如果调度器已经上锁了,中段处理函数里那个任务切换是无法切换的,待中断函数推出后,之前的调度器解锁之后,相应执行优先级最高的任务。
|
|
|
|
woyeshi zhe 我也是这么理解 |
|
|
|
你这个问题要看一下freeRTOS的代码实现.vTaskSuspendAll 被调用了,那么当前的任务就相当是最高优先级了,因为此时不能进行任务调度,直至vTaskResumeAll 被调用.但在调用vTaskResumeAll 之前,中断发生了,会触发被阻塞的高优先级任务唤醒,中断服务程序是不能被阻塞的.所以问题来了,被中断唤醒的任务是否被调度执行,就要看代码了.因为vTaskSuspendAll、 vTaskResumeAll 是为了保护临界资源,如果被唤醒的任务也要相同的资源,就会导致问题,最好看一下portYIELD_FROM_ISR 的实现.我的理解是那个中断理的任务调度是不会被执行的.试了,有结果,告诉一下?
|
|
|
|
|
|
|
|
不错,很好的经验分享,辛苦麻烦了,欠缺这方面的资料,非常感谢。
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
316 浏览 0 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
834 浏览 2 评论
1996 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
1099 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
1525 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-20 12:26 , Processed in 0.795193 second(s), Total 83, Slave 67 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号