STM32程序下载成功但是不运行
来源:互联网 发布:fbreader源码画线功能 编辑:程序博客网 时间:2024/04/29 20:44
调试stm32程序,发现如下问题:
STM32编写程序,当程序中没有sd卡部分时,程序正常下载,正常运行。当程序中运行sd卡加文件系统时程序能正常下载但是不能正常的运行。发现问题就要解决问题呀,好了大家一起来和我解决问题吧!
根据自己问题,上网查找解决办法,最终将问题锁定在堆栈设置问题上。(堆栈设置的空间不够大)
解决办法:在stm32的程序目录下查找STM32F10x.s(或者是startup_stm32f10x_hd,这取决于你是用的寄存器还是函数库)
在打开文件,在文件的开头很醒目的位置,发现了关于堆栈的设置。
从中我们可以看出来对于栈(stack)的大小设置为0x200,堆(heap)的大小为0x0,当修改程序为栈(stack)的大小设置为0x800,堆(heap)的大小为0x400。再试一下,没错,程序可以正常的运行了!
注意:我曾尝试单纯的修改栈或者单纯的修改堆的大小但是程序还都是不运行。这似乎说明程序中即有栈溢出,也有堆不够的情况。
分析:原来的设置栈stack的数量是0x200即512个字节。在Fatfs操作过程中,他的每一个写操作的单位就是512字节,堆栈也是512字节,自然会溢出没得说,然后程序就会跳到硬件中断那里歇着去了。所以我们把他改成了2048个字节。(大点应该没有坏处吧。。)
另外,栈溢出不一定会死机,比如栈只生长到堆区,或者稍微进入变量区,而且溢出整个过程不对这些区域做写入操作,不对这些区域做取指操作,就可以完美避免hardfault,但溢出还是溢出了,数据还是被修改了.最"直接"的表现是函数调用后,还没看到执行用户代码就发现某些不相干的数据被修改,不过这也足够隐蔽了. 而且,hardfault也不一定是栈溢出的直接结果,只是入栈后数据被修改,出栈时跳转错误(最容易出现),导致指令访问错误,或者数据访问错误。
好这里就说到这里了,下一篇博客将是对stm32堆栈的引申学习
传送门:
- STM32程序下载成功但是不运行
- 程序编译成功,但是运行时不出现运行结果的界面(TC)
- vs下执行OpenGl程序能运行成功但是不显示东西
- stm32程序下载不进去
- matlab安装成功,但是首次运行的时候提示安装程序错误
- ubuntu12下安装ns3.24.1,安装成功但是没办法运行程序的解决办法
- STM32 程序如何运行
- stm32(三) STM32(STM32F217XX) 分段程序下载以及其运行原理
- stm32(三) STM32(STM32F217XX) 分段程序下载以及其运行原理
- stm32(三) STM32(STM32F217XX) 分段程序下载以及其运行原理
- STM32程序下载简介
- stm32系统在线调试时程序运行正常输出正常,但是一旦把程序烧写进去则输出不正常
- ocx注册成功但是页面不显示
- stm32移植ecos #7,移植ecos并成功运行helloworld程序
- vs2010编译 tesseract 3.01 成功.EXE文件可以运行,但是不知道如何编译出可用的dll
- 使用NSData下载图片,但是没有下载成功
- stm32程序下载方式总结
- 关于MyEclipse启动Tomcat,程序能运行,startup.bat启动,Tomcat启动成功,但程序不运行的问题
- Domain=com.alamofire.error.serialization.response Code=-1011 "Request failed: forbidden (403)"原因
- js 实现页面的复制功能 clipboard.js
- Spring Boot+SpringMVC使用ueditor(jsp版)
- java 回文数
- EffectiveC++学习笔记-条款12
- STM32程序下载成功但是不运行
- Apache+PHP 解决上传文件大小限制的问题
- 如何查看devices已经发送的uevent事件
- ubuntu mysql root 远程访问
- JVM调优经验
- 数据应用达人之SQL基础教程分享6-比较与逻辑操作
- 百度RSS整理
- html 基础入门
- web移动端浮层滚动带动底层元素滚动问题解决