a707083746 发表于 2020-6-1 19:48:11

可以将某个函数从flash删除,而不死机吗?

芯片:STM32F103C8
我把一个函数定位到单独的一页上,读flash判断函数还存在时才调用这个函数。
在特定的条件下,把这一页擦除,重启后进入 HardFault_Handler() 中断。
有没有可能删除这个函数了,程序还能运行呢?

a707083746 发表于 2020-6-1 20:17:50

只修改一个字节没死机~~

wenyangzeng 发表于 2020-6-1 20:58:43

代码的校验和就会出错而死机。

toofree 发表于 2020-6-2 12:12:07

建议看一下汇编代码,STM32指令是32位的,有可能一个或几个32位数地构成一条指令。
你改一个字节,有可能不是关键的数据。有可能程序没有执行到这条指令,或者执行到这条指令了,但是只是个参数,而不是命令,而没有影响程序运行。

MrJiu 发表于 2020-6-2 13:04:54

删除Flash,我经常这么干啊,因为要保持一些数据到flash上去,没出现什么死机现行。。。我感觉是函数保存问题,而且,还涉及到变量问题。。。总之,没你想得那么简单

a707083746 发表于 2020-6-3 13:46:52

wenyangzeng 发表于 2020-6-1 20:58
代码的校验和就会出错而死机。

那交换两个字节的位置可能就不死机了:lol

a707083746 发表于 2020-6-3 13:49:00

toofree 发表于 2020-6-2 12:12
建议看一下汇编代码,STM32指令是32位的,有可能一个或几个32位数地构成一条指令。
你改一个字节,有可能不 ...

我把代码删除以后,就没有去调用,它应该不会执行吧

a707083746 发表于 2020-6-3 13:51:20

MrJiu 发表于 2020-6-2 13:04
删除Flash,我经常这么干啊,因为要保持一些数据到flash上去,没出现什么死机现行。。。我感觉是函数保存问 ...

我这个确实是想当然了。我是想在第一次上电时执行这个函数,然后把它从flash删除掉,之后不去调用它。

发表于 2020-6-3 15:23:28

理论上是可以的,通过判断指定地址的内容是否不为空。或者不为全FF。但是在工程中需要将这部分代码写入到指定的FLASH地址。需要考虑使用芯片的空间分布情况。有的芯片分区少,一个区的地址是128或者256。这样使用会不会感觉到浪费?

a707083746 发表于 2020-6-3 16:18:05

安 发表于 2020-6-3 15:23
理论上是可以的,通过判断指定地址的内容是否不为空。或者不为全FF。但是在工程中需要将这部分代码写入到指 ...

我已经把这部分代码指定到flash尾部单独的一页了,并且没占满一页,一页1024字节。

#pragma arm section code=".ARM.__at_0x0800F000"
//函数
#pragma arm section        code
页: [1] 2
查看完整版本: 可以将某个函数从flash删除,而不死机吗?