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

求助STM32F103 FreeRTOS任务调度异常问题

[复制链接]
pretty868 提问时间:2018-10-8 10:03 /
阅读主题, 点击返回1楼
收藏 评论20 发布时间:2018-10-8 10:03
20个回答
hu9977 回答时间:2018-10-8 14:35:39
pretty868 发表于 2018-10-8 14:31
嗯嗯,我是刚接触RTOS。
按照您的意思,是不是所有的任务里面都需要有vTaskDelay才会以前任务调度,系统 ...

vTaskDelay可以引起调度,这个是入门最容易弄的,后面还有信号量,队列,邮箱等等都可以引起调度
pretty868 回答时间:2018-10-8 15:07:56
toofree 发表于 2018-10-8 12:21
Delay_Ms()是软件延时,死等吗?
在操作系统中最好不要用死等,除非任务之间有些条件,不得不这么做。
vTa ...

我系统里面有个创建任务的函数(创建任务1和任务2),必须把它的优秀级调高(大于任务1和任务2),系统才能正常,才能跟你的描述相一致!谢谢您的指教

创建任务的函数如下:
void Create_Task(void * pvParameters)
{
                  xTaskCreate((TaskFunction_t) Task1_Task,
                                                                        (char*         ) "Task1_Task",               
                                                                        (uint16_t      ) TASK1_STK_SIZE,
                                                                        (void*                                 ) NULL,
                                                                        (UBaseType_t         ) TASK1_TASK_PRIO,
                                                                        (TaskHandle_t* ) &Task1_Handle);
                                                                  
                  xTaskCreate((TaskFunction_t) Task2_Task,
                                                                        (char*         ) "Task2_Task",               
                                                                        (uint16_t      ) TASK2_STK_SIZE,
                                                                        (void*                                 ) NULL,
                                                                        (UBaseType_t         ) TASK2_TASK_PRIO,
                                                                        (TaskHandle_t* ) &Task2_Handle);
                                                                  
                        vTaskDelete(TaskCreate_Handle);               
}
pretty868 回答时间:2018-10-8 15:12:25
hu9977 发表于 2018-10-8 14:35
vTaskDelay可以引起调度,这个是入门最容易弄的,后面还有信号量,队列,邮箱等等都可以引起调度 ...

明白了,谢谢
程序员 回答时间:2018-10-8 15:30:09
pretty868 发表于 2018-10-8 12:02
改为延时50和延时100均不行,异常问题依旧,任务1能正常,任何2不执行

你看你的中断触发时间,同时也要保证一点单个任务运行的时间不能大于你的时标间隔。所以如果你的时标是us级的,你可以尝试将Delay_Ms(500);改为Us级。或者直接使用vTaskDelay()。
xiaojie0513 回答时间:2018-10-9 13:09:42
用   vTaskDelay()   啊,,,你这是死等,建议看看我的文章
select326 回答时间:2018-10-10 09:42:34
基础还是要学的,先学习下操作系统原理吧,否则,大神说听不懂也是个问题。
﹌ 烟、熏黄了手指 回答时间:2018-10-10 16:25:42
我认为这是个优先级的问题,任务1的优先级高于任务2,。方式1,:在调用vTaskDelay(500) 函数后,任务1/2进入阻塞状态,启动调度器,CPU运行的是空闲任务,直到定时时间到,任务1/2是几乎并行执行,都能正常;
﹌ 烟、熏黄了手指 回答时间:2018-10-10 16:30:42
方式2:任务1用的是无任务调度的Delay_Ms(500)函数, 这样的话任务1就一直可以运行的状态,CPU不存在阻塞空闲,根据优先级任务1高于任务2,只有优先级高的任务1得到运行
﹌ 烟、熏黄了手指 回答时间:2018-10-10 16:33:54
方式3:任务1、2用的都是无任务调度的Delay_Ms(500)函数,同方式2,只有任务1得到运行。如果把任务1、2的优先级改成相同,则方式3也是可以正常运行的
hejun96 回答时间:2020-2-10 22:21:32
如果没有反应,应该是延时函数Delay_Ms没有加FreeRTOS的内核函数进行调度
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版