本系统采用四层架构设计,遵循"高内聚低耦合"原则,每层职责明确:
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升级(使用串口升级不太好用,不如直接调试器升级)