打印

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

[复制链接]
3960|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区里头,只是函数调用的时候去取出来。

使用特权

评论回复
5
lxyppc| | 2010-5-3 17:05 | 只看该作者
这个在编译器的说明书里面有详细介绍

使用特权

评论回复
6
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

粉丝