yklstudent-1794 发表于 2020-6-3 17:11:22

想法很美好

a707083746 发表于 2020-6-3 18:12:38

yklstudent-1794 发表于 2020-6-3 17:11
想法很美好

东搞西搞:lol

butterflyspring 发表于 2020-6-9 16:00:56

已经把这段代码单独安排到尾部一页,一上电就删除这一页,那当初为啥还把这段代码敲进去啊?:lol
而且每次上电都擦除一次,FLAH可是有擦写寿命的哦。 理论上指令和数据总线不再访问这块是不影响运行的

tanic 发表于 2020-6-9 17:30:57

可行

a707083746 发表于 2020-6-9 19:40:39

butterflyspring 发表于 2020-6-9 16:00
已经把这段代码单独安排到尾部一页,一上电就删除这一页,那当初为啥还把这段代码敲进去啊?
而且每次 ...

这段代码的主要是计算出flash其他部分的校验并保存起来,算完之后使命就完成了,所以要删掉。
据说可以用于加密。
并不需要每次上电都擦除。

a707083746 发表于 2020-6-12 09:04:29

终于实现了。
原来光这样指定函数位置还不行:

#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)
}
}

目前正常运行,不知道有没有其他问题,仅供参考:lol

cap 发表于 2020-6-15 09:31:55

a707083746 发表于 2020-6-12 09:04
终于实现了。
原来光这样指定函数位置还不行:



Flash的擦除就是往扇区写0xFF,实际写flash的时候是写0的,所以可以看.map文件看看这个函数占用多少空间,然后往这些空间里面全部写0覆盖就行了,这样可以避免擦除整片扇区,(理论是这样,没有实践过:P)

a707083746 发表于 2020-6-15 19:39:33

cap 发表于 2020-6-15 09:31
Flash的擦除就是往扇区写0xFF,实际写flash的时候是写0的,所以可以看.map文件看看这个函数占用多少空间,然 ...

感觉你理解错了:lol
写FF就是FF,不是0,所谓的擦除是把0变成1。
另外,擦除最少是按页擦除。如果要写入的位置(按字对齐,或者是半字,忘了),不全为0就必须擦除。
所以擦除是免不了的,但不是整片扇区擦除。

yklstudent-1794 发表于 2020-6-16 10:10:41

迈出了加密的第一步:victory:
页: 1 [2]
查看完整版本: 可以将某个函数从flash删除,而不死机吗?