一直注意:交付的时候,APP1区要做写保护。
/*2025_08_06
485中断接收架构: UART + DMA + 空闲中断(IDLE)
不使用HAL_UART_RxCpltCallback,因为他是自动跳转的,主动触发的回调是用于固定长度的,对于空闲中断不定长的数据是用自定义函数。
*/
/*2025_08_10版本
补全06 10 的应答参数
缩小堆空间
Stack_Size EQU 0x400
Heap_Size EQU 0x200
*/
/*2025_08_12版本
Stack_Size EQU 0x400
Heap_Size EQU 0x250
控制台命令按照文档改完
*/
*/2025_08_14版本
升级标志位:
起始帧里:
0100: 文件大小存到缓存体,存到数据库2区;
0200: 文件大小存到缓存体,存到数据库2区;
结束帧里:
0100: 验证APP缓存区计算和收到的MD5码16字节是否一致,一致表示APP缓存区的数据接收和写入的没问题。
0200: 验证APP缓存区计算和收到的MD5码4字节是否一致,一致表示APP缓存区的数据接收和写入的没问题。
校验通过,则将APP缓存区数据复制到APP2区。
计算一遍APP2区MD5是否和APP数据缓存区一致,以确保复制过程没问题。
MD5码存到缓存体,存到数据库2区;
写入APP缓存区之后,验证MD5通过后,将 iapLoadStatus 置300;重启;
重启之后,
读取 iapLoadStatus 置了0 ,则继续运行APP1
读取 iapLoadStatus 置了2 ,则跳转到APP2运行。
读取 iapLoadStatus 置了300,
则开始擦除APP2区,然后将APP缓存区数据复制到APP2区 ,
复制完之后校验APP2区MD5码是否正确,如果错误则 ubootback = 401,iapLoadStatus =0;
如果正确则 ubootback = 0, iapLoadStatus = 2,重启;
ubootback = 400 的情况是,是程序运行在APP2区,但是每次重启后发现是由看门狗导致的复位次数超过了5次,
则置 ubootback = 400;iapLoadStatus = 0,重启后会回到APP1运行。
收到回退到APP1指令时,将 ubootback = 1, iapLoadStatus =0,重启。
升级成功次数增加在哪里判断
*/
*/2025_08_15版本
将标定结构体划到业务结构体里
每次控制台修改数据库的时候也要将对应的结构体刷新掉
数据库初始化到结构体的时候将标定的结构体参数也都初始化上。
要做的事:
2025/08/15
Modbus 06 和 10 改结构体数据后要同步到数据库。
增加滑动窗口以及传感器数据存到队列的时间节奏
*/
/*2025/08/20版本
修复IAP升级的一些小问题
要做的事:
硬件版本要在开始时强制写入
*/