OpenEdv-开源电子网

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

关于FreeRTOS卡在延时函数里的问题

[复制链接]

0

主题

3

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2021-5-8
在线时间
3 小时
发表于 2022-8-8 23:53:16 | 显示全部楼层 |阅读模式
1金钱
本帖最后由 fei140115 于 2022-8-8 23:55 编辑

程序在进入延时函数之前都正常运行,但是一进入延时函数就在图一红框处出不来。

图一

图一

图一

图二

图二

图二

图二箭头所指的地方就是有延时函数的函数,上面的代码里没有延时函数。

板子跑带有延时函数的FreeRTOS例程没有问题,但是跑我自己的代码就会死在图一红框处,有类似经历的朋友们分享分享经验,万分感谢!

附上问题工程

FreeRTOS_DS1302(1).zip

685.29 KB, 下载次数: 4

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

465

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1732
金钱
1732
注册时间
2021-4-11
在线时间
320 小时
发表于 2022-8-9 09:42:54 | 显示全部楼层
代码下载进去可以正常运行的吗?调试是会这样的
回复

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2021-5-8
在线时间
3 小时
 楼主| 发表于 2022-8-9 09:50:46 | 显示全部楼层
huanan 发表于 2022-8-9 09:42
代码下载进去可以正常运行的吗?调试是会这样的

可以跑,但是跑起来和跑调试一样的,都是执行到有延时函数的地方执行不下去了
回复

使用道具 举报

10

主题

3281

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8207
金钱
8207
注册时间
2020-5-11
在线时间
3702 小时
发表于 2022-8-9 10:48:09 | 显示全部楼层
要不试一下在延时函数的循环里面将tnow、told的值用串口发出来?看定时器是否在运行。
专治疑难杂症
回复

使用道具 举报

1

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
98
金钱
98
注册时间
2018-8-21
在线时间
10 小时
发表于 2022-8-9 11:03:47 | 显示全部楼层
是不是systick定时器没有初始化
回复

使用道具 举报

12

主题

228

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1728
金钱
1728
注册时间
2016-3-8
在线时间
677 小时
发表于 2022-8-9 11:30:32 | 显示全部楼层
esp_8266_init() --> delay_ms(2000) --> delay_us((u32)(nms*1000)) --> delay_us((u32)(2000*1000))
F15A30F9-EAC5-4e2e-8EED-D414B15232FE.png


根据当前的delay_init()的配置,SysTick的重载值是72000,也就是1ms时长。
现在调用的delay_ms(2000)-->delay_us((2000*1000))大大超过了重载值。我不确定跟这个有没有关系。

可以这样测试,看看还会不会卡死:
1.把esp_8266_init()调用的delay_ms(2000)改为delay_us(200),注意不是delay_ms(200)。
或者
2.把delay_init()中断SysTick->LOAD=reload;改为SysTick->LOAD=0xFFFFFFFF。

回复

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2021-5-8
在线时间
3 小时
 楼主| 发表于 2022-8-10 09:52:07 | 显示全部楼层
wxTB99A9f0 发表于 2022-8-9 11:03
是不是systick定时器没有初始化

初始化了
回复

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2021-5-8
在线时间
3 小时
 楼主| 发表于 2022-8-10 09:53:50 | 显示全部楼层
adlu 发表于 2022-8-9 11:30
esp_8266_init() --> delay_ms(2000) --> delay_us((u32)(nms*1000)) --> delay_us((u32)(2000*1000))


...

问题其实是出在了串口打印上,我把串口1改成串口3就行了,但是为什么用不了,我也不清楚,串口1的初始化都是按照例程上初始化的
回复

使用道具 举报

12

主题

228

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1728
金钱
1728
注册时间
2016-3-8
在线时间
677 小时
发表于 2022-8-10 16:05:15 | 显示全部楼层
fei140115 发表于 2022-8-10 09:53
问题其实是出在了串口打印上,我把串口1改成串口3就行了,但是为什么用不了,我也不清楚,串口1的初始化 ...

如果是这样,那么你在1楼的描述可能不准确。
描述是,进入delay_us()函数之后,卡死在红框处,出不来。这部分和串口并没有关系。
所以,我觉得还没有定位到原因
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-25 13:23

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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