打印

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

[复制链接]
2299|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

粉丝