如何在编程时读取IAR编译器的segments空间分配

[复制链接]
5399|5
 楼主| bigfacecat 发表于 2010-5-2 18:21 | 显示全部楼层 |阅读模式
本帖最后由 bigfacecat 于 2010-5-2 18:24 编辑

如何在编程时读取IAR编译器的segments空间分配

我想在程序里头直接显示CODE_I、CODE_ID、DATA_I、DATA_C等编译器自带的变量值,怎么才可以做到?
请大侠指点!
voidx 发表于 2010-5-2 21:11 | 显示全部楼层
本帖最后由 voidx 于 2010-5-2 21:13 编辑

#define MAIN_CSTACK_BEGIN ((size_t)_Pragma("segment=\"CSTACK\"") __segment_begin("CSTACK"))
#define MAIN_RSTACK_BEGIN ((size_t)_Pragma("segment=\"RSTACK\"") __segment_begin("RSTACK"))
#define MAIN_CSTACK_END ((size_t)_Pragma("segment=\"CSTACK\"") __segment_end("CSTACK"))
#define MAIN_RSTACK_END ((size_t)_Pragma("segment=\"RSTACK\"") __segment_end("RSTACK"))

程序中直接:
unsignedi nt x=MAIN_CSTACK_BEGIN;
 楼主| bigfacecat 发表于 2010-5-3 08:30 | 显示全部楼层
正在调试中……
先问一句大侠是从哪里学到的,也好授之以渔
 楼主| bigfacecat 发表于 2010-5-3 11:24 | 显示全部楼层
我整理了一下:
#pragma segment="CODE"
unsigned int *x = __segment_begin("CODE");

但是编译的时候报错
Error[Pe028]: expression must have a constant value

是unsigned int *x = __segment_begin("CODE");的错误

另外我想把__segment_begin("CODE")的值编译完就固化在代码的某个位置例如ORG 0x1000
是否可以做到?
__segment_begin只是一个库函数,所以__segment_begin("CODE")的值必定是已经存在于CODE区里头,只是函数调用的时候去取出来。
lxyppc 发表于 2010-5-3 17:05 | 显示全部楼层
这个在编译器的说明书里面有详细介绍
 楼主| bigfacecat 发表于 2010-5-4 10:06 | 显示全部楼层
但是下面这个问题编译不过去呀:(

#pragma segment="CODE"
unsigned int *x = __segment_begin("CODE");

但是编译的时候报错
Error[Pe028]: expression must have a constant value
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

46

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部