STM32堆栈溢出
在使用STM32读取SD Card的文件时,总是会卡死在读函数那里
res = f_read(&fsrc, gbuffer, sizeof(gbuffer)-1, &br);
而且出现很奇怪的现象。若是我只定义全局变量
BYTE gbuffer[TEMP_SIZE];// file copy gbuffer,8-bit
那么程式必定会卡死。
若是我定义两个全局变量
BYTE gbuffer[TEMP_SIZE];// file copy gbuffer,8-bit
BYTE temp[TEMP_SIZE];//for log record
还是只用到gbuffer,temp只是定义并不使用,这时程式就会OK。这是问题一
这在逻辑上完全说不通,我没有使用到temp,只是定义了而已,为什么会影响到gbuffer呢?
于是调试程式,发现程式最终卡死在sdcard.c中的一个while循环里面。
else if (DeviceMode == SD_INTERRUPT_MODE)
{
SDIO_ITConfig(SDIO_IT_DCRCFAIL | SDIO_IT_DTIMEOUT | SDIO_IT_DATAEND | SDIO_IT_RXOVERR | SDIO_IT_RXFIFOHF | SDIO_IT_STBITERR, ENABLE);
while ((TransferEnd == 0) && (TransferError == SD_OK))
{
}
if (TransferError != SD_OK)
{
return(TransferError);
}
}
跳出while循环的两个条件TransferEnd和TransferError值的改变都是在SD卡的interrupt服务程序里面。
在interrupt里面设置断点,发现程式根本没有进去。但是gbuffer里面的值都有变化。
意思也就是说,读SD card都正常,但是就是不进中断。
为什么不进中断?我把所有触发中断的条件都打开了。这是问题二。
综合问题一和二,我发现从程序逻辑上来分析已经讲不通了。于是想到了栈的大小。。。
尝试着把Stack_Size EQU 0x00000200
改为Stack_Size EQU 0x00000800
结果,程式再也不会卡死了,数据也能正常读取。。。。
虽然问题解决了,但是问题出现的根本原因还是不清楚,大概推断是堆栈溢出了。中断服务程序是要
使用MSP主堆栈的。在堆栈溢出的情况下,中断服务程序的PC就找不到了,或者发生了其他问题,所以程序就跑飞了。
以下摘自 《CM3权威指南》,关于中断服务程序和堆栈的描述
进入中断后,入栈的8个字。
STM32堆栈溢出的更多相关文章
- STM32/GD32上内存堆栈溢出探测研究
无数次遭受堆栈溢出折磨,随着系统变得复杂,故障点越来越难以查找!主要溢出情况如下:1,一般RAM最后两块空间是堆Heap和栈Stack,堆从下往上用,栈从上往下用,任意一个用完,都会进入对方的空间2, ...
- arcgis engine 中出现的内存堆栈溢出问题。
两种解决方案: 1.循环加载mxd文档的时候出现的堆栈溢出,解决办法是每次循环结束时清空FeatureLayer,感觉并不好,但是确实可以实现功能. 2.循环调取featureclass的search ...
- CC_STACKPROTECTOR防内核堆栈溢出补丁分析【转】
转自:https://yq.aliyun.com/articles/1723 摘要: 作者:王智通 CC_STACKPROTECT补丁是Tejun Heo在09年给主线kernel提交的一个用来防 ...
- Javascript中递归造成的堆栈溢出及解决方案
关于堆栈的溢出问题,在Javascript日常开发中很常见,Google了下,相关问题还是比较多的.本文旨在描述如何解决此类问题. 首先看一个实例(当然你可以使用更容易的方式实现,这里我们仅探讨递归) ...
- js堆栈溢出错误
function prompt() { var answer = prompt("What is your name","") if (answer) { al ...
- 如何解决js递归里面出现的堆栈溢出
16.下面的递归代码在数组列表偏大的情况下会导致堆栈溢出.在保留递归模式的基础上,你怎么解决这个问题? var list = readHugeList(); var nextListItem = fu ...
- VS2013 堆栈溢出调查(0xC00000FD: Stack overflow)
在调试一个代码时,执行过程中会出现如下错误(0xC00000FD: Stack overflow). 很明显是堆栈溢出了. 网上很多方法,都是通过修改设置工程配置,把堆栈调大一些,如下图. 但是堆栈到 ...
- stm32 堆溢出
STM32 堆溢出 遇到的问题 最近在给旧项目添加了段代码,程序经常到某个状态就突然崩溃了,也不一定是在运行新代码的时候崩溃.检查了几遍代码,数组越界访问,除数为0,内存泄露等常见的问题都不存在. 原 ...
- propertychange事件导致的IE浏览器堆栈溢出
前段事件做项目,在IE下测试时,发现会报堆栈溢出的错误,其他浏览器正常,于是开始了苦逼的IE查错路程... 由于是在操作了某个输入框之后才出现的错误,所以把重点放到了input的相关事件,最终发现是这 ...
随机推荐
- Thinking in java学习笔记之finalize
finalize:一旦垃圾回收器准备好释放对象占用的存储空间,将首先调用其finalize()方法,并且在下次垃圾回收动作发生时,才会真正回收对象占用的内存,所以可用此作为对象终结条件的验证.注意的三 ...
- Angular实现注册系统
Angular是Google开发的前端技术框架,下载地址:https://code.angularjs.org/1.5.0/angular.js 通过对angular的简单理解后发现,angular通 ...
- 启动Hadoop HA Hbase zookeeper spark
服务器角色 服务器 192.168.58.180 192.168.58.181 192.168.58.182 192.168.58.183 Name CentOSMaster Slvae1 Slave ...
- IIS提示“异常详细信息: System.Runtime.InteropServices.ExternalException: 无法执行程序”
先来看错误提示: 无法执行程序.所执行的命令为 "C:/Windows/Microsoft.NET/Framework/v3.5/csc.exe" /noconfig /fullp ...
- Discuz! x3.1 /utility/convert/index.php Code Execution Vul
catalog . 漏洞描述 . 漏洞触发条件 . 漏洞影响范围 . 漏洞代码分析 . 防御方法 . 攻防思考 1. 漏洞描述 Discuz! x3.1的插件/utility/convert/inde ...
- python统计nginx脚本信息
#!/usr/bin/env python # -*- coding: utf-8 -*- import urllib2 import json import subprocess import th ...
- C#用HttpClient抓取jd.com搜索框下拉数据
添加System.Web.dll引用 添加System.Net.Http引用 using System.Net.Http; using System.Web; string key = "电 ...
- HDU 4768 Flyer(二分)
题目链接: 传送门 Flyer Time Limit: 1000MS Memory Limit: 32768 K Description The new semester begins! Di ...
- mysql 某周的起始和结束日期
转自:http://bbs.csdn.net/topics/370096126 t_table有数据如下:year Week2011 22011 32011 42011 ...
- vs------密钥
HM6NR-QXX7C-DFW2Y-8B82K-WTYJV