[STM32F4] 407系统在做IAP功能,有问题请教!

[复制链接]
1308|18
 楼主| yzzly 发表于 2022-3-31 13:44 | 显示全部楼层 |阅读模式
如果APP代码区有有效的APP代码,则IAP代码启动后执行跳转指令使CPU执行APP程序,否则IAP要等待更新APP代码。IAP代码如何知道APP代码区是否有有效的APP代码?谢谢!

香水城 发表于 2022-3-31 13:53 | 显示全部楼层
一般来讲,IAP跳过去前都会检查下APP的起始地址是否有设置合适栈变量。

類似這句

   if (((*(__IO uint32_t*)APPLICATION_ADDRESS) & 0x2FFE0000 ) == 0x20000000)
 楼主| yzzly 发表于 2022-3-31 14:07 | 显示全部楼层
香水城 发表于 2022-3-31 13:53
一般来讲,IAP跳过去前都会检查下APP的起始地址是否有设置合适栈变量。

類似這句

谢谢,立马见效!
corerocky 发表于 2022-3-31 19:54 | 显示全部楼层
在IAP里写APP的时候,计算整个APP的和校验,写进某个FLASH地址里,每次开机必须校验一次APP,校验码跟之前写的校验码一致才允许跳转!!!
QuakeGod 发表于 2022-3-31 22:54 | 显示全部楼层
corerocky 发表于 2022-3-31 19:54
在IAP里写APP的时候,计算整个APP的和校验,写进某个FLASH地址里,每次开机必须校验一次APP,校验码跟之前 ...

没错,这样可以防止万一更新APP的时候出错中断,下次不进IAP,直接进APP,然后死机,再也救不回来了。
ayb_ice 发表于 2022-4-1 08:35 | 显示全部楼层
可以简单的检查某个位置是否有特定的字符串,这个字符串最好是放在APP的最后的地址,因为一般要先擦除整个APP,烧录的时候是最后写字符串,所以字符串有效,APP肯定有效,当然还有其它方法
 楼主| yzzly 发表于 2022-4-1 09:51 | 显示全部楼层
corerocky 发表于 2022-3-31 19:54
在IAP里写APP的时候,计算整个APP的和校验,写进某个FLASH地址里,每次开机必须校验一次APP,校验码跟之前 ...

谢谢!就是按字节计算累加和?
corerocky 发表于 2022-4-28 11:21 | 显示全部楼层
yzzly 发表于 2022-4-1 09:51
谢谢!就是按字节计算累加和?

具体怎么校验可以自己定义,CRC校验用得多
skyred 发表于 2022-4-28 15:53 | 显示全部楼层
我用的是标志位
liu96jp 发表于 2022-6-8 14:33 | 显示全部楼层
加一个标志位就好了啊
zhizia4f 发表于 2022-6-8 15:10 | 显示全部楼层
这个是读取标记的,标记有效则代表代码有效就可以了
su1yirg 发表于 2022-6-8 15:32 | 显示全部楼层
你可以加个标记位,代表这个app是否OK
q1d0mnx 发表于 2022-6-8 16:18 | 显示全部楼层
你可以试试版本迭代,读取版本也行,这个好像keil支持这个功能
q1ngt12 发表于 2022-6-8 17:20 | 显示全部楼层
就是加标记才行,否则不可以
tax2r6c 发表于 2022-6-12 08:12 | 显示全部楼层
就是做个标记的事情,你的IAP可以做个判断标记是否有效,有效则可以进入app就好了
kaif2n9j 发表于 2022-6-12 08:54 | 显示全部楼层
我们做的就是加个标记即可
cen9ce 发表于 2022-6-12 09:06 | 显示全部楼层
有效APP可以加个flag,IAP读取这个flag就行了
g0d5xs 发表于 2022-6-12 11:15 | 显示全部楼层
这个我觉得还是有个标记比较好
ex7s4 发表于 2022-6-12 12:21 | 显示全部楼层
加标记就行,我觉得这个是比较好的方法
您需要登录后才可以回帖 登录 | 注册

本版积分规则

428

主题

1194

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部