[MCU] 一开始95%后来100%是什么原因

[复制链接]
dingy 发表于 2020-2-23 15:07 | 显示全部楼层
堆栈设大些试试。
 楼主| heweibig 发表于 2020-2-23 15:08 | 显示全部楼层
输出的debug\list\*.map    下面的Stack used :  000002FE是不是代表堆栈使用的大小?

->Sub-tree of type: Function tree
                             CSTACK
    | Stack used (prev) :  000002FC
  02    memcpy
        | Stack used (prev) :  00000068
        | + function block  :  00000002
        |  Already listed
  01  __data16_memcpy
      | Stack used (prev) :  000002FC
      | + function block  :  00000002
  <-Sub-tree of type: Function tree
    | Stack used          :  000002FE
jiahy 发表于 2020-2-23 15:11 | 显示全部楼层

可能堆栈越界
lizye 发表于 2020-2-23 15:14 | 显示全部楼层
这就是堆栈不够用了呗,需要优化下代码的。
shimx 发表于 2020-2-23 15:16 | 显示全部楼层
这个堆栈已经达到100% 的利用率了。。
jiaxw 发表于 2020-2-23 15:18 | 显示全部楼层
把堆栈调大一些试试
zhaoxqi 发表于 2020-2-23 15:21 | 显示全部楼层
这个尽量减少程序中的循环运行的部分,如for循环、if循环判断等语句的。
jiajs 发表于 2020-2-23 15:23 | 显示全部楼层
还有一个尽量减少局部变量,能定义成全局变量就定义成全局变量的。
zhanghqi 发表于 2020-2-23 15:25 | 显示全部楼层
看看堆栈内的数据有多少已经不是0xFF
jlyuan 发表于 2020-2-23 15:32 | 显示全部楼层
这个就是堆栈溢出的,,看能不能减少程序中的局部变量的
dengdc 发表于 2020-2-23 15:34 | 显示全部楼层
好的,我明天去单位试一下,多谢各位大侠了哈,结贴了先        
wuhany 发表于 2020-2-23 15:36 | 显示全部楼层


这还能用吗
 楼主| heweibig 发表于 2020-2-23 15:37 | 显示全部楼层
貌似现在这个仪表工作还是比较稳定的。。。
pangb 发表于 2020-2-23 15:39 | 显示全部楼层
溢出会出现莫名其妙的错误   在写程序时   最好估算一下代码量   这样选片子比较容易一点
 楼主| heweibig 发表于 2020-2-23 15:42 | 显示全部楼层
奇怪的是这个程序跑起来一直还算稳定。 这两天调试的时候刚发现的!
lizye 发表于 2020-2-23 15:44 | 显示全部楼层

保险起见还是先调大一些吧。
shimx 发表于 2020-2-23 15:45 | 显示全部楼层
一般的调试器会预先用某个特定值比如0xFF来初始化所有的堆栈

然后在每次代码中断运行,进入调试状态的时候去检查一下堆栈,看看堆栈内的数据有多少已经不是0xFF,就意味着代码已经使用了多少堆栈
jiaxw 发表于 2020-2-23 15:47 | 显示全部楼层


一般出现顶楼这样的错误可能就是确实堆栈越界了,代码使用到了100%的堆栈。
但是说实话,如果是这个原因,基本代码也不会正常工作了
spark周 发表于 2020-2-23 15:48 | 显示全部楼层

代码本身有些问题,有些数据误写入堆栈区域了。实际的堆栈可能只用了30%,但是代码误操作了堆栈最后面的地址,导致调试器初始化的值被修改了。调试器也就认为堆栈越界了。
 楼主| heweibig 发表于 2020-2-23 15:50 | 显示全部楼层
输出的debug\list\*.map    下面的Stack used :  000002FE是不是代表堆栈使用的大小?

->Sub-tree of type: Function tree
                             CSTACK
    | Stack used (prev) :  000002FC
  02    memcpy
        | Stack used (prev) :  00000068
        | + function block  :  00000002
        |  Already listed
  01  __data16_memcpy
      | Stack used (prev) :  000002FC
      | + function block  :  00000002
  <-Sub-tree of type: Function tree
    | Stack used          :  000002FE
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部