OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4469|回复: 2

FREERTOS没有执行vTaskStartScheduler(),系统也能运行

[复制链接]

7

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
141
金钱
141
注册时间
2018-2-2
在线时间
25 小时
发表于 2020-3-14 15:01:06 | 显示全部楼层 |阅读模式
10金钱
最近接触了一款系统,是基于FREERTOS的,但在看代码时发现没有执行vTaskStartScheduler(),在创建完任务后就开始运行程序了。
因为之前学习FREERTOS时是说执行vTaskStartScheduler()这个函数,系统才运行的。
各位大神帮忙分析是怎么回事,vTaskStartScheduler()是必须的吗?还是哪里设置自动运行就不需要这个函数了?

最佳答案

查看完整内容[请看2#楼]

当任务创建好后,是处于任务就绪(Ready) ,创建仅仅是把任务添加到系统中,还没真正调度,FreeRTOS 中启动任务调度器的函数是 vTaskStartScheduler(),开启后此时才是真正进入实时操作系统中的第一步,建议你全局搜下vTaskStartScheduler 看看是不是在其他的地方被调用了
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

31

主题

2183

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
14287
金钱
14287
注册时间
2018-8-3
在线时间
1147 小时
发表于 2020-3-14 15:01:07 | 显示全部楼层
当任务创建好后,是处于任务就绪(Ready) ,创建仅仅是把任务添加到系统中,还没真正调度,FreeRTOS 中启动任务调度器的函数是 vTaskStartScheduler(),开启后此时才是真正进入实时操作系统中的第一步,建议你全局搜下vTaskStartScheduler  看看是不是在其他的地方被调用了
啊哈~加油!!
回复

使用道具 举报

4

主题

82

帖子

0

精华

高级会员

Rank: 4

积分
743
金钱
743
注册时间
2018-9-1
在线时间
177 小时
发表于 2020-3-14 16:04:57 | 显示全部楼层
必须调用该函数。且在初始化调度器之前,除了创建任务/队列等,不要做多余动作。
vTaskStartScheduler()主要完成以下工作:
1. 建立空任务
2. 初始化全局变量3. 设置SysTick、PendSV、FPU
4. 触发SVC异常,运行第一个任务


像你的情况,有可能是:
如果你使用的是HAL库,则HAL_Init()会初始化SysTick,SysTick会挂起PendSV运行调度器导致任务运行。
不要再HAL_Init()中初始化SysTick,注释掉相关初始化代码(最好不要修改库函数,直接复制出来使用)
uevip#126.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-25 21:30

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表