你的浏览器版本过低,可能导致网站不能正常访问!为了你能正常使用网站功能,请使用这些浏览器。
举报
安 发表于 2020-6-3 15:23 理论上是可以的,通过判断指定地址的内容是否不为空。或者不为全FF。但是在工程中需要将这部分代码写入到指 ...
cap 发表于 2020-6-15 09:31 Flash的擦除就是往扇区写0xFF,实际写flash的时候是写0的,所以可以看.map文件看看这个函数占用多少空间,然 ...
查看全部评分
wenyangzeng 发表于 2020-6-1 20:58 代码的校验和就会出错而死机。
toofree 发表于 2020-6-2 12:12 建议看一下汇编代码,STM32指令是32位的,有可能一个或几个32位数地构成一条指令。 你改一个字节,有可能不 ...
MrJiu 发表于 2020-6-2 13:04 删除Flash,我经常这么干啊,因为要保持一些数据到flash上去,没出现什么死机现行。。。我感觉是函数保存问 ...
yklstudent-1794 发表于 2020-6-3 17:11 想法很美好
butterflyspring 发表于 2020-6-9 16:00 已经把这段代码单独安排到尾部一页,一上电就删除这一页,那当初为啥还把这段代码敲进去啊? 而且每次 ...
原来光这样指定函数位置还不行:
#pragma arm section code=".ARM.__at_0x0800F000"
//函数
#pragma arm section code
因为,在函数后面还有一些全局变量的初始值。
为了将两者分开,采用分散加载的方式:
LR_IROM1 0x08000000 0x00010000
{ ; load region size_region
ER_IROM1 0x08000000 0x0000F800
{ ; load address = execution address
*.o (RESET, +First)
*(InRoot$$Sections)
.ANY (+RO)
}
RW_IRAM1 0x20000000 0x00004FF0
{ ; RW data
.ANY (+RW +ZI)
}
}
LR_TEST 0x0800F800 0x00000400
{ ; load region size_region
ER_TEST_ROM 0x0800F800 0x00000400
{
OnlyTest.o (+RO)
}
ER_TEST_RAM 0x20004FF0 0x00000010
{
OnlyTest.o (+RW +ZI)
}
}
目前正常运行,不知道有没有其他问题,仅供参考
我已经把这部分代码指定到flash尾部单独的一页了,并且没占满一页,一页1024字节。
#pragma arm section code=".ARM.__at_0x0800F000"
//函数
#pragma arm section code
感觉你理解错了
写FF就是FF,不是0,所谓的擦除是把0变成1。
另外,擦除最少是按页擦除。如果要写入的位置(按字对齐,或者是半字,忘了),不全为0就必须擦除。
所以擦除是免不了的,但不是整片扇区擦除。
你改一个字节,有可能不是关键的数据。有可能程序没有执行到这条指令,或者执行到这条指令了,但是只是个参数,而不是命令,而没有影响程序运行。
评分
查看全部评分
评分
查看全部评分
那交换两个字节的位置可能就不死机了
我把代码删除以后,就没有去调用,它应该不会执行吧
我这个确实是想当然了。我是想在第一次上电时执行这个函数,然后把它从flash删除掉,之后不去调用它。
评分
查看全部评分
东搞西搞
而且每次上电都擦除一次,FLAH可是有擦写寿命的哦。 理论上指令和数据总线不再访问这块是不影响运行的
评分
查看全部评分
这段代码的主要是计算出flash其他部分的校验并保存起来,算完之后使命就完成了,所以要删掉。
据说可以用于加密。
并不需要每次上电都擦除。