自认为熟悉ADS编译器和IAR编译器的高人请进

[复制链接]
3013|2
 楼主| armmage 发表于 2010-11-11 13:55 | 显示全部楼层 |阅读模式
在ADS编译环境下定义一个指向字符串的指针(全局变量)
char *p = "123";
指针p本身存放于内存中 但是字符串"123"系统默认为const型的数据 在code区自动被创建并被初始化 然后将地址赋给p 如果通过*p去修改目标地址的内容 编译器将会报错 我在AXD环境下的内存空间看过 p的值是flash区的地址 肯定是只读的。
相信上述概念很好理解 那么同样的语句在IAR编译环境下
char *p = "123";
这个字符串"123"被系统默认为data区的 在内存上被创建并被初始化
我通过IAR的编译器关键字设置定义 char __flash *p 我的目的就是想让字符串存放在flash区 这样可以节省内存 但是IAR编译器似乎不支持这样做
当然理论上给一个__flash指针赋值可以分两部
char __flash a[] = "123";
char __flash *p = a;
概念我是知道  但我要的效果是 给p赋值的时候 直接写"123"字符串 而不是先定义一个数组再赋值给p
有人知道怎么解决么 熟悉IAR的高人 求解
 楼主| armmage 发表于 2010-11-11 14:00 | 显示全部楼层
我想要的效果是 char __flash *p = "123";
让IAR编译器自动在flash区创建"123"字符串并赋值给__flash型指针p 但是编译器报错说
不能把一个char *型的数据赋值给一个 char __flash *型的数据
难道IAR就认死了 赋值号右侧的字符串 必须创建在内存上? 有什么办法改改么 比如编译器设置?
tuzihog 发表于 2011-10-21 20:06 | 显示全部楼层
真给力
值得细细拜读
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

286

帖子

1

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