你的浏览器版本过低,可能导致网站不能正常访问!为了你能正常使用网站功能,请使用这些浏览器。
a707083746 发表于 2020-6-12 09:04 终于实现了。 原来光这样指定函数位置还不行:
cap 发表于 2020-6-15 09:31 Flash的擦除就是往扇区写0xFF,实际写flash的时候是写0的,所以可以看.map文件看看这个函数占用多少空间,然 ...
原来光这样指定函数位置还不行:
#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的擦除就是往扇区写0xFF,实际写flash的时候是写0的,所以可以看.map文件看看这个函数占用多少空间,然后往这些空间里面全部写0覆盖就行了,这样可以避免擦除整片扇区,(理论是这样,没有实践过)
感觉你理解错了
写FF就是FF,不是0,所谓的擦除是把0变成1。
另外,擦除最少是按页擦除。如果要写入的位置(按字对齐,或者是半字,忘了),不全为0就必须擦除。
所以擦除是免不了的,但不是整片扇区擦除。