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

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

[复制链接]
a707083746 提问时间:2020-6-1 19:48 /
阅读主题, 点击返回1楼
收藏 评论19 发布时间:2020-6-1 19:48
19个回答
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)
  }
}

目前正常运行,不知道有没有其他问题,仅供参考
_VIP_ 回答时间: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 回答时间:2020-6-16 10:10:41
迈出了加密的第一步
pulsett 回答时间:2020-10-29 17:26:55
楼主威武,搜捕百度,只提自宫,也没人说怎么自宫,自宫会遇到什么问题?在这里解决了所有问题!分散加载是核心,指定sec依然会导致zi跟着,无法单独擦除func。所以首先要指定sec,其次有修改sct文件实现分散加载。
12

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版