ZARD渐空 发表于 3 天前

用户AP区怎样再分两个区,AP1和AP2

<p>大佬知不知道怎么在用户AP区再分两个区,AP1和AP2,<br />
我的想法是先把数据写入到AP2中,再把AP2的数据写到AP1中,然后把AP2的数据擦除,<br />
1、如果升级过程中突然断电,那下次上电时,AP1和AP2都有数据,<br />
那这时怎么让单片机跑完AP1的代码后,不再往后跑AP2的代码呢?<br />
2、如果把AP2的数据写到AP1过程中断电,那下次上电时,AP1程序不完整,AP2程序完整,<br />
那这时怎么让单片机直接执行AP2的代码?</p>

神农鼎 发表于 3 天前


乘风飞扬 发表于 3 天前

1. 你的程序是在AP1空间运行的话,除非程序跑飞,否则是不会跑到程序地址以外空间运行。
2. 上电时先在用户ISP区判断AP1程序是否完整(可以设置一个升级完成标志),
    如果完整的话执行AP1程序。AP1不完整,AP2完整的话将AP2程序重新复制到AP1空间。

ZARD渐空 发表于 3 天前

神农鼎 发表于 2025-10-14 09:31


我现在就用“8系列UART在线升级”的例程,这里面的ISP代码没有对AP用户再分区,
而且最重要的是如果AP1和AP2区都存在,在运行AP1区结束时,怎么能让程序不跑到AP2区

ZARD渐空 发表于 3 天前

乘风飞扬 发表于 2025-10-14 09:38
1. 你的程序是在AP1空间运行的话,除非程序跑飞,否则是不会跑到程序地址以外空间运行。
2. 上电时先在用户 ...

1、请求解答一下,如果AP1和AP2都存在,程序是怎么一直在AP1区运行的,是因为main函数后面那个while吗?
2、你这个想法是很可以,我有想过设置一个升级标志,但是你后半句说的这个处理方式,我就没想到,我去试一下,谢谢大佬!

乘风飞扬 发表于 3 天前

ZARD渐空 发表于 2025-10-14 09:51
1、请求解答一下,如果AP1和AP2都存在,程序是怎么一直在AP1区运行的,是因为main函数后面那个while吗?
...

1. 是的,正常一套程序是一个完整的闭环,程序都在主循环跟中断里执行,不会跑到这套程序以外的地址运行。
页: [1]
查看完整版本: 用户AP区怎样再分两个区,AP1和AP2