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

qlmiao   2010-5-2 18:21 楼主


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

我想在程序里头直接显示CODE_I、CODE_ID、DATA_I、DATA_C等编译器自带的变量值,怎么才可以做到?
请大侠指点!

回复评论 (5)



#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;
点赞  2010-5-2 21:11
正在调试中……
先问一句大侠是从哪里学到的,也好授之以渔
点赞  2010-5-3 08:30
我整理了一下:
#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区里头,只是函数调用的时候去取出来。
点赞  2010-5-3 11:24
                                 这个在编译器的说明书里面有详细介绍
点赞  2010-5-3 17:05
但是下面这个问题编译不过去呀:(

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

但是编译的时候报错
Error[Pe028]: expression must have a constant value
点赞  2010-5-4 10:06
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复