你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

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

[复制链接]
a707083746 提问时间:2020-6-1 19:48 /
阅读主题, 点击返回1楼
收藏 评论18 发布时间:2020-6-1 19:48
18个回答
yklstudent-1794 回答时间:2020-6-3 17:11:22
想法很美好
a707083746 回答时间:2020-6-3 18:12:38

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

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

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

目前正常运行,不知道有没有其他问题,仅供参考
cap 回答时间:2020-6-15 09:31:55
a707083746 发表于 2020-6-12 09:04
终于实现了。
原来光这样指定函数位置还不行:

Flash的擦除就是往扇区写0xFF,实际写flash的时候是写0的,所以可以看.map文件看看这个函数占用多少空间,然后往这些空间里面全部写0覆盖就行了,这样可以避免擦除整片扇区,(理论是这样,没有实践过)
a707083746 回答时间:2020-6-15 19:39:33
cap 发表于 2020-6-15 09:31
Flash的擦除就是往扇区写0xFF,实际写flash的时候是写0的,所以可以看.map文件看看这个函数占用多少空间,然 ...

感觉你理解错了
写FF就是FF,不是0,所谓的擦除是把0变成1。
另外,擦除最少是按页擦除。如果要写入的位置(按字对齐,或者是半字,忘了),不全为0就必须擦除。
所以擦除是免不了的,但不是整片扇区擦除。
yklstudent-1794 回答时间:2020-6-16 10:10:41
迈出了加密的第一步
12

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版