微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI Zigbee设计交流 > IAR 在使用#pragma命令时,编译出来的hex文件,没有收到命令控制

IAR 在使用#pragma命令时,编译出来的hex文件,没有收到命令控制

时间:10-02 整理:3721RD 点击:

在.c文件中添加

#pragma location="IMAGE_VERSION"
const CODE uint32 _imageVersion = 0x17053155;
#pragma required=_imageVersion

在xcl文件中添加

-Z(CODE)IMAGE_VERSION=0x4800-0x4803

但是在编译出来的hex文件中

:1047F30045B30E6F001245B3916F001245B36B685A
:10480300001245B32169001245B36369001245B331

在4800 - 4803 没有出现我定义的内容

我用IAR 版本是8.20 。

编译的时候在#pragma required=_imageVersion 这一句这里有个警告说 

Warning[Pe609]: this kind of pragma may not be used here C:\Users\Administrator\Desktop\app\boot\source\sb_main.c 26

这个为什么不能用 获取有可能就是这个警告引起的

 不是很懂,不过看你做法跟别人的略有不同

http://yihuoyubing.lofter.com/

查看这个人的博客文章

(5)升级文件首部填充

#pragma location="IMAGE_HEADER"

const __code img_hdr_t _imgHdr = {

  0xFFFF,  

  OAD_IMG_VER( OAD_IMAGE_VERSION ), 

  OAD_IMG_R_AREA * OAD_FLASH_PAGE_MULT,

#if defined HAL_IMAGE_A

  OAD_IMAGE_A_USER_ID, 

#else

  OAD_IMAGE_B_USER_ID,

#endif

  { 0xFF, 0xFF, 0xFF, 0xFF } 

};

第一句的#pragma location="IMAGE_HEADER"将这个首部布局在在链接文件所指定的IAMGE_HEADER空间。

首部的crc1成员的值必须为0xFFFF,因为这个值是在BIM代码中计算的。

首部的ver成员的值根据是ImageA还是ImageB而有所不同,如下:

#if defined (HAL_IMAGE_A)

  #define OAD_IMG_VER( ver ) ( (uint16)( (ver) << 0x01 ) )           

#else

  #define OAD_IMG_VER( ver ) ( (uint16)( ( (ver) << 0x01 ) | 0x01 ) ) 

#endif

简单来说,凡是奇版本的升级文件都是ImageA生成的,凡而偶版本的升级文件都是ImageB生成的。ver的实际版本号只使用高15位,而最低的一位用来区分ImageA与ImageB.

首部的uid[4]的根据ImageA还是ImageB而不同,用4个"A"表示为ImageA,用4个"B"表示为ImageB。

首部的res[4]则全部0xFF填充。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top