一、分层架构设计思想
2. OTA升级流程
本系统采用四层架构设计,遵循"高内聚低耦合"原则,每层职责明确:
1. HAL层(硬件抽象层)核心职责:
硬件初始化(ADC/Serial/RTC/SPI/GPIO等)
外设驱动实现(ST7735显示屏驱动、摇杆输入解析等)
提供统一硬件操作接口
关键实现示例:

核心职责:
统一输入输出接口
设备无关性抽象
数据类型标准化
关键实现:

核心职责:
复杂业务逻辑实现
系统级服务管理
资源协调分配
关键服务:

核心职责:
具体应用逻辑实现
用户交互处理
调用下层服务
应用示例:

| Bootloader | 0x00000000 | 64KB | 引导程序区 |
| Main App | 0x00010000 | 448KB | 主应用程序区 |
| Backup | 0x00080000 | 448KB | OTA备份区 |
| SmartEEPROM | 0x000F0000 | 64KB | 保存应用数据 |

// bootloader (ATSAME51J20A)
void main() {
// 1. 初始化基本硬件
SYS_Initialize(NULL);
// 2. 检查OTA标志
if (*((volatile uint32_t*)OTA_FLAG_ADDR) == OTA_PENDING) {
// 3. 执行固件搬运
flash_erase(MAIN_APP_START, BACKUP_SIZE);
uint32_t src = BACKUP_START;
uint32_t dest = MAIN_APP_START;
for (int i = 0; i < BACKUP_SIZE; i += FLASH_PAGE_SIZE) {
flash_copy_page(src, dest);
src += FLASH_PAGE_SIZE;
dest += FLASH_PAGE_SIZE;
}
// 4. 清除OTA标志
flash_write(OTA_FLAG_ADDR, 0, 4);
}
// 5. 跳转到应用程序
void (*app_entry)(void) = (void(*)(void))(*(uint32_t*)(MAIN_APP_START + 4));
__set_MSP(*(uint32_t*)MAIN_APP_START);
app_entry();
while(1);
}三、已知问题目前对于hal层的实现完全依赖于MPLAB X IDE,一旦更换配置就需要重新修改,因此这一块有待改进(如果有标准库的话可能会好一点)
OTA概率失败暂未解决(正在分析)
由于没有BT/WIFI模块故而采用串口进行升级,后续准备修改为USB升级(使用串口升级不太好用,不如直接调试器升级)
我要赚赏金
