Thursday, August 15, 2013

[DS5] c源文件访问scatter file中定义的变量

问题如下:

Scatter file内容部分:

#define MY_REGION_START 0x100
#define MY_REGION_END 0x200

现在需要在工程的c源文件中访问MY_REGION_START和MY_REGION_END.

方法如下
1. Scatter file修改为:
#define MY_REGION_START 0x100
#define MY_REGION_END 0x200

....
#定义一个新的段名字为 MY_REGION
  MY_REGION MY_REGION_START
  {
        * (MY_REGION_START)
  }

  MY_REGION MY_REGION_END
 
        * (MY_REGION_END)
  }

2. 在需要访问的c源文件头上定义extern变量如下:

extern unsigned int Image$$MY_REGION$$ZI$$Base;  // 对应MY_REGION_START
extern unsigned int Image$$MY_REGION$$ZI$$Limit:  // 对应MY_REGION_END

或者
extern char Image$$MY_REGION$$ZI$$Base[];
extern char Image$$MY_REGION$$ZI$$Limit[];
两者区别:
如果声明的symbol是int型, 那在访问的时候需要用&(取址符).
例如:
printf("start: 0x%X, end 0x%X\n", (unsigned int) &Image$$MY_REGION$$ZI$$Base,Image$$MY_REGION$$ZI$$Limit);


参考文档:
1. Image$$ execution region symbols
2. Importing linker-defined symbols in C and C++

No comments: