0
问答首页 最新问题 热门问题 等待回答标签广场
我要提问

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

在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的高人 求解
提问者:瓦德瓦155 地点:- 浏览次数:4519 提问时间:04-23 14:21
我有更好的答案
提 交
2条回答
yshlah 05-02 00:09
我想要的效果是 char __flash *p = "123";
让IAR编译器自动在flash区创建"123"字符串并赋值给__flash型指针p 但是编译器报错说
不能把一个char *型的数据赋值给一个 char __flash *型的数据
难道IAR就认死了 赋值号右侧的字符串 必须创建在内存上? 有什么办法改改么 比如编译器设置?
cmh4 04-27 00:49
真给力
值得细细拜读
撰写答案
提 交
1 / 3
1 / 3