MCU字库升级方案

字库处理存储方法

flag区

固定在后256k起始地址,即0x08040000

c 复制代码
typedef __packed struct
{
    uint32_t exist_flag;
    uint32_t fontlib_addr;
    uint32_t fontlib_len;
    uint8_t md5[16];
} font_upgrade_flags_t;
__attribute__((at(FONT_LIB_FLAG_ADDR))) volatile const font_upgrade_flags_t font_flags = {
    .exist_flag = FONT_LIB_EXIST_FLAGS,
    .fontlib_addr = FONT_LIB_START_ADDR,
};

字库版本(与固件一致)

作为一个变量,存在于字库的开头,即 0x08040800

c 复制代码
__attribute__((at(FONT_LIB_START_ADDR))) volatile const uint32_t font_lib_version =
                                                        (DEVICE_VERSION_A_PRJ_NUM << 24) |
                                                        (DEVICE_VERSION_B_PRJ_STAGE << 16) |
                                                        (DEVICE_VERSION_C_MAJOR << 8) |
                                                        (DEVICE_VERSION_D_MINOR << 0);

字库数据bitmap

存放于".fontconst"的section,通过attribute给所有需要的bitmap加上属性

存放于字库版本之后,即0x08040804后都是字库数据

c 复制代码
#define LV_ATTRIBUTE_LARGE_CONST __attribute__((section(".fontconst")))

校验

开机判断:

升级过程最后会将flag区的字库存在标记置位,开机初始化阶段会进行判断,如果存在

标记位不在

标记区内的地址不合法

长度不合法

线程不运行,异常停止

合法校验:

复制代码
升级过程最后会将整个字库的MD5计算值保存到标记区,开机会进行一次计算校验
开机初始化阶段不判断MD5校验是否通过(如果打开会影响keil下载调试效率,最后也可打开)

当大包升级中心或上位机查询字库版本时,如MD5校验不通过,则status=1

通过升级ID兼容方案 和升级协议进行

相关推荐
踏着七彩祥云的小丑6 小时前
嵌入式测试学习第1天:电路基础核心概念
单片机·嵌入式硬件
Deitymoon8 小时前
STM32F103——超声波模块
stm32·单片机·嵌入式硬件
你怎么知道我是队长11 小时前
计算机系统基础22---计算机的基本组成---IO控制方式
单片机·嵌入式硬件
風清掦11 小时前
【STM32学习笔记-12】Unix 时间戳、BKP 备份寄存器与 RTC 实时时钟
笔记·stm32·单片机·嵌入式硬件·学习·实时音视频·unix
hoiii18712 小时前
基于STM32的扫地机器人源码工程
stm32·单片机·机器人
feasibility.14 小时前
嵌入式系统的“能量-执行”拓扑学:电池、舵机、电机与电调的深层关系
科技·嵌入式硬件·电机·拓扑学·舵机·电池·电调
振南的单片机世界14 小时前
EXTI边沿检测:上升沿、下降沿、双边沿,硬件自动捕捉
stm32·单片机·嵌入式硬件
Max_uuc15 小时前
【感知心法】别相信你的传感器!撕碎“所读即所得”的 API 幻觉,论物理世界的“全员撒谎”与状态观测器的绝对凝视
单片机
踏着七彩祥云的小丑16 小时前
嵌入式——认识电子元器件——符号
单片机·嵌入式硬件
莎士比亚的文学花园1 天前
stm32——平衡小车
stm32·单片机·嵌入式硬件