问题如下:
#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型, 那在访问的时候需要用&(取址符).
例如:
参考文档:
1. Image$$ execution region symbols
2. Importing linker-defined symbols in C and C++
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:
Post a Comment