请教:擦除了一个函数,重启就不再工作了

2020-01-01 17:41发布

随便写了一个很简单的函数,将其编译在一个特定的页
1.此页只有它,无其它内容;
2.板子重启后,也不会被调用(特定条件才会被执行)

用烧写软件,将此页删除,程序立即死掉(可以理解)

断电重启,发现板子还是死掉的,这一点很难理解,大家有什么见解?谢谢
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
40条回答
xmm
1楼-- · 2020-01-04 08:36
函数虽然没引用,但是可能在其索引可能在其它位置,还是不要动的好
popo_new
2楼-- · 2020-01-04 10:08
johnlj 发表于 2015-1-14 09:25
楼主这是在搞擦除自毁程序的节奏

也没有啊,无意中做了这个实验,想不通,说明自己的理解还有盲区。
我一直认为,函数没有调用,也就不存在返回,程序的指针都没有去到那段“已擦除”的地方,不应该不工作的。
albert.hu
3楼-- · 2020-01-04 14:16
popo_new 发表于 2015-1-14 13:20
也没有啊,无意中做了这个实验,想不通,说明自己的理解还有盲区。
我一直认为,函数没有调用,也就不存 ...

是不是开优化了,共用了代码
popo_new
4楼-- · 2020-01-04 15:48
 精彩回答 2  元偷偷看……
albert.hu
5楼-- · 2020-01-04 17:54
popo_new 发表于 2015-1-14 16:15
应该没有,我用的是UV4

看c/c++那项,改成o1优化试试
popo_new
6楼-- · 2020-01-04 22:27
这个问题,一直没搞定,今天继续测试,
使用仿真器,一启动程序直接死在 while处,
因为我刚好就是用绝对定位将一个小函数编译到某页(无其它内容),难道Stm32
在运行前,会将所有的函数检查一遍?

void HardFault_Handler(void)
{
        /* Go to infinite loop when Hard Fault exception occurs */
  while (1)
  {
  }
}

一周热门 更多>