一直注意:交付的时候,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升级的一些小问题 要做的事: 硬件版本要在开始时强制写入 */