打印
[STM32F1]

记录一下FreeRTOS+fatfs+BOOT开发过程中踩过的一个坑

[复制链接]
1271|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
cry1109|  楼主 | 2020-4-26 13:54 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 cry1109 于 2020-4-26 13:55 编辑

跑裸机时,128kB的flash分区情况:BOOT区48k,USB-HOST只配置为MSC类+fatfs,对U盘进行读写操作用于U盘IAP;APP区80k,USB-HOST配置为Supporting ALL Classes+fatfs,用于U盘读写+HID设备通讯。系统很稳定并没有出现异常。

上了FreeRTOS后,采用相同的分区情况相同的外设配置,BOOT还是采用之前的BOOT程序,没有任何改变,就是在APP里跑了FreeRTOS。问题来了,只要在FreeRTOS任务里调用f_mount()、f_open()等操作U盘的函数,程序从BOOT跳转至APP后立刻飞了,开的看门狗都无法复位,而且也没进入Error_Handler(),由于程序有个跳转的动作没法用仿真器追踪,不知道程序飞到哪儿去了。把任务里的f_mount()、f_open()这些函数屏蔽掉,程序跳转后可以正常运行,难道是fatfs操作U盘时需要的堆栈较大?调大U盘任务堆栈后问题并未解决,甚至把任务堆栈调到了5120 words还是不行。增大任务堆栈不行,那我增大单片机的系统堆栈可以吗?在启动文件里把Stack_Size和Heap_Size增加到0x2000,问题依然没能解决。好吧,那我不分区了,直接把APP下载到0x08000000起始地址,板子上的小小LED终于闪烁了起来。

问题就出现在分区上,不确定是由于BOOT里对USB和fatfs的配置引起APP程序跑飞的或者是因为分区导致内存不足引起跑飞的。后来将BOOT重新分区,由原来的48k减小为36k,这样留给APP的内存由原来的80k增加到92k,OK,终于能够正常运行了。具体原因不知道为什么,猜测是由于FreeRTOS+fatfs需要的堆栈较大,导致内存溢出。


使用特权

评论回复
沙发
gygp| | 2020-5-1 20:50 | 只看该作者
         

使用特权

评论回复
板凳
tcdbobo| | 2020-5-6 13:25 | 只看该作者
不好意思,楼主可否抽空帮我看一下。您那个“STM32步进电机S型加减速算法 ”的回复贴。

https://bbs.21ic.com/icview-2934618-1-1.html

回复贴.jpg (198.85 KB )

回复贴.jpg

使用特权

评论回复
地板
磨砂| | 2020-5-9 14:45 | 只看该作者
非常感谢楼主分享

使用特权

评论回复
5
晓伍| | 2020-5-9 14:46 | 只看该作者
我也要记录下来

使用特权

评论回复
6
八层楼| | 2020-5-9 14:46 | 只看该作者
楼主真是热心人啊

使用特权

评论回复
7
观海| | 2020-5-9 14:46 | 只看该作者
长知识了  谢谢

使用特权

评论回复
8
guanjiaer| | 2020-5-9 14:47 | 只看该作者
非常感谢楼主分享

使用特权

评论回复
9
heimaojingzhang| | 2020-5-9 14:49 | 只看该作者
宝贵的经验啊

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

40

主题

172

帖子

4

粉丝