查看文章 |
关键词:STM32F 堆栈溢出 The stack pointer for stack 'CSTACK' 前言:这两天在学习STM ![]() 在状态栏(log)给出提示为 Tue Oct 07 14:26:35 2008: Target reset 但是把调试工具选为simulator,即纯软件模式下无此问题。补充一下,编译工具为IAR 4.42 +jlink v6 选用swd模式 上网求助,先看看什么是堆栈?详情请参考百度百科http://baike.baidu.com/view/93201.htm 下面的解释是我抄来的 堆栈是一种数据项按序排列的数据结构,只能在一端(称为栈顶(top))对数据项进行插入和删除。要点: 堆:顺序随意 栈:后进先出(Last-In/First-Out) 一个由c/C++编译的程序占用的内存分为以下几个部分 A、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 B、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。 解决问题:以关键字“The stack pointer for stack 'CSTACK'”百度之,结果共三页,细细读之,参考发帖求助结果发现此类问题大概可以分为两种: 一:堆栈确实太小了,(大部分为此类问题,可惜我的问题不在此列)在*.xcl文件中调整,一般可以解决问题。下面列2个有代表性的帖子 http://www.ic37.com/htm_bbs_dic/2007-12/100131_480800.htm http://group.ednchina.com/619/10215.aspx?page=1 二:程序中未对中断做初始化,程序跑飞了,也会出现这样的问题,参考sunke9这个帖子“报告icdev 我仿真的时候又被卡住了” http://www.icdev.com.cn/bbs/viewthread.php?tid=8911 上面说过,搜索结果的3页的每个结果我都看了,花了半天的时间,不停的修改堆栈参数,检查中断初始化,但是都不能解决问题。最后又百度了一遍还是3页的结果,仔细看了下这个帖子“这样的警告怎么处理” http://www.ouravr.com/bbs/bbs_content.jsp?bbs_sn=779668&bbs_id=9999 里面网友tsb0574 阿波给出了解释 “出现这个问题一般有两种情况!! 回头仔细再看我的状态栏提示: “Tue Oct 07 14:26:39 2008: The stack 'CSTACK' is filled to 100% (1024 bytes used out of 1024). The warning threshold is set to 90.% ” 想想我的程序很小就那么几行,1024 byte怎么会不够用呢,况且我改成了2048byte仍然提示不够用!难道是真的如阿波所言这是一个假象?目标板有问题?不太可能吧?仿真器问题?我的仿真器可是最新d版 v6 jlink啊,不管怎么样试试看吧,首先怀疑st的芯片swd模式有问题和jlink有冲突,于是改为jtag模式…嗯,很好,问题消失了。换用st linkII,依然没有问题,不过,st的芯片不至于这么烂吧? 难道是jlink的swd模式有问题?更新jlink驱动为 Btw,开始点LED的时候没有出现问题,当我开始做IO映射,以便把STM 再顺便感谢一下ednchina 的 小可歌 和 ouravr 的tsb0574 阿波网友! |
