IAP升级文件编译后自动加头部信息~简单快捷

IAP升级文件编译后自动加头部信息~简单快捷

编码文章call10242025-09-11 15:45:462A+A-

当我们开发IAP时,经常会在升级文件头部加上一段产品信息相关的信息,最简单的目的是为了不会把非本产品的OTA升级文件写入本产品。

可以有以下几种方式:

  1. 在编译后,手动给升级文件加头部信息、文件长度、校验信息;
  2. 通过一些脚本自动编译、加上头部信息后再自动输出;
  3. 给项目工程配置,使得编译输出文件即是附加头部信息的升级文件,本文使用gcc编译cortex M0来介绍此种方式;

我的FLASH地址分配为:


在app中定义

const uint8_t __attribute__((section(".product_id"))) product[64] = "PRODUCT_NAME_V1_";


修改链接脚本文件:

新增PRODUCT_ID段,我预留了256字节:

NVIC 中有一个寄存器,称为“向量表偏移量寄存器”(在地址0xE000ED08 处),通过修改它的值就能定位向量表。但必须注意的是:向量表的起始地址是有要求的:必须先求出系统中共有多少个向量,再把这个数字向上增大到是2 的整次幂,而起始地址必须对齐到后者的边界上。例如,如果一共有32 个中断,则共有32+16(系统异常)=48 个向量,向上增大到2 的整次幂后值为64,因此地址必须能被64*4=256 整除,从而合法的起始地址可以是:0x0, 0x100, 0x200 等。

我们修订app的链接脚本如下:

/* Specify the memory areas */
MEMORY
{
RAM (xrw)       : ORIGIN = 0x20000000, LENGTH = 8K 
PRODUCT_ID (rx) : ORIGIN = 0x8002C00, LENGTH = 256
FLASH (rx)      : ORIGIN = 0x8002D00, LENGTH = 64K - 11K - 256
}

链接脚本新增一个段:表示从0x8002C00开始存放产品信息【256字节】,

0x8002D00开始存放中断向量表,0x8002D1C0开始存放用户代码。

对于BOOT下载代码写FLASH过程,0x8002C00为下载地址,0x8002D00为程序跳转地址。

/* Define product id section */
SECTIONS
{
  .DEF_PRODUCT  0x8002C00 : 
  {
    KEEP (*(.product_id))
  } > PRODUCT_ID
}

编译后输出文件



至此,已完成输出文件自动加头部的设计,简单快捷!

点击这里复制本文地址 以上内容由文彬编程网整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!
qrcode

文彬编程网 © All Rights Reserved.  蜀ICP备2024111239号-4