您的位置:首页 > 其它

STM32F429同时使用LTDC和外部SDRAM作堆栈导致HardFault死机

2018-03-01 09:51 771 查看
最近在研究STM32F429的LTDC驱动LCD和emWin运行DEMO时候,发现程序总是异常死机,DEBUG发现是进入了HardFault!查看堆栈数据发现数据异常,难道是程序有BUG导致堆栈被破坏了吗?
于是新建一个最小工程,使用最精简的代码,只创建一个GUI线程跑emWin的DEMO程序,发现还是会不定时死机!难道是GUI线程的堆栈设置太小了吗?
于是加大GUI任务的堆栈,由8K增加到16K,故障依旧!!!不应该啊,难道是我的RTOS有问题吗?

于是去掉RTOS,修改emWin的配置文件,改为裸机运行,跑了一段时间,竟然不死机了!WTF!!!
于是又单独测试RTOS,去掉GUI任务反复测试,运行非常正常,各种测试代码都没有问题啊!!!
到底是怎么回事呢,为什么GUI和RTOS同时使用就会死机呢?
对比两份代码,区别就是使用RTOS的时候,把外部SDRAM用作了任务堆栈,而裸机程序使用的是内部RAM做堆栈。
于是把RTOS的任务堆栈设置为内部RAM,结果程序运行正常了! 真是奇怪,难道STM32F429的SDRAM不能作堆栈吗?
不对,不对,不对,在移植GUI之前一直都是用外部SDRAM作任务堆栈,从来没有出现过这种死机的问题啊,难道是LTDC的问题吗?
于是又恢复刚才的代码,继续使用外部SDRAM作堆栈,但是去掉LTDC的初始化代码,再次运行程序,屏幕虽然没有任何显示,但是从板子上的不断闪烁的LED来看,程序并没有死机,继续观察10多分钟,也没有死机.
我的天!!!这是为何???
在启用LTDC之后,使用外部SDRAM用作堆栈会导致程序异常死机,至今没有找到原因。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  LTDC SDRAM RTOS STM32F429