以下仅为个人理解
uint32 check_image(uint32 readpos)函数
函数功能
该函数返回rom的老rom头的开始地址(新的sdk会在rom前加上新的rom头和irom段,因为irom段不用映射,所以要将irom段和新的rom头跳过,然后紧接着的就是老rom头和其他.data .rodata和.text各段)
函数形参
readpos : 为rom的地址,如0x2000则表示rom烧在spiflash的第二个扇区(从0开始)
函数变量
// 数据缓冲区,为256字节
uint8 buffer[0x100];
// 以下两个变量用于for循环,用于测试除了irom的各段
uint8 sectcount;
uint8 sectcurrent;
// 校验和,不太清楚这个概念,代码中相关部分没有注释
uint8 chksum = 0xef ;
// 也是用于接下来的for循环
uint32 loop;
// 用于记数字段的剩余数据长度
uint32 remaining;
// 函数要返回的值
uint32 romaddr;
新的rom头和段头结构体
typedef struct {
uint8* address; // 字段的开始地址(不包括段头)
uint32 length; // 该字段的数据长度
} section_header;
typedef struct {
uint8 magic; // 识别作用
uint8 count; // 该rom的字段数
uint8 flags1; // 烧录信息
uint8 flags2; // 烧录信息
uint32 entry; // 该rom的入口函数地址
uint32 add; // zero
uint32 len;