加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ICCAVR 中存储空间的分配

发布时间:2020-12-15 18:24:32 所属栏目:百科 来源:网络整理
导读:在 Keil 中为了节省数据存储器的空间,通过 “ code ” 关键字来定义一个数组或字符串将被存储在程序存储器中: ??? ????uchar?code?buffer[]={0,1,2,3,4,5}; ????uchar?code?string[]=" ARM oric"?; ??? 而这类代码移值到 ICCAVR 上时是不能编译通过的。我

Keil中为了节省数据存储器的空间,通过code关键字来定义一个数组或字符串将被存储在程序存储器中:

???

????uchar?code?buffer[]={0,1,2,3,4,5};

????uchar?code?string[]="ARMoric"?;

???

而这类代码移值到ICCAVR上时是不能编译通过的。我们可以通过"const"?限定词来实现对存储器的分配:

??

????#pragma?data:code

????const?unsigned?char?buffer[]={0,5};

????const?unsigned?char?string[]="ARMoric";

????#pragma?data:data

??

???注意:

?《1》使用ICCAVR6.31时,#pragma?data?:code??;#pragma?data:data?;??这些语法时在"data:cod""data:data"字符串中间不能加空格,否则编译不能通过。

?《2const?ICCAVR是一个扩展关键词,它与ANSIC标准有冲突,移值到其它的编译器使用时也需要修改相关的地方。

?????????????????

???在ICCAVR中对数组和字符串的五种不同空间分配:

???

const?unsigned?char?buffer[]={0,5};??//buffer数组?被分配在程序存储区中

const?unsigned?char?string[]="ARMoric"?;???????//stringp字符串被分配在程序存储区中

const?unsigned?char?*pt???????//指针变量pt被分配在数据存储区中,指向程序存储区中的字符类型数据

unsigned?char?*const?pt??????//指针变量pt被分配在程序存储区中,指向数据存储区中的字符类型数据

?const?unsigned?char?*const?pt??//指针变量pt被分配在程序存储区,指向程序存储区中的字符类型数据

?unsigned?char?*pt????//指针变量pt被分配在数据存储区中,指向数据存储区中的数据

?

如何将ICCAVR程序中的数组存入FLASH中下面是ICCAVR中对字符串和常数表格分配可能出现的五种情况:

const?int?table[]={1,3};//table表格只分配进程序存储器中

const?char?string[]="iccavr";//字符串数组只分配进程序存储器中

const?char?*prt1?//指针prt1位于数据存储器空间指向程序存储器空间的字符型数据

char?*const?prt2?//指针prt2位于程序存储器空间指向数据存储器空间的字符型数据

const?char?*const?prt3?//指针prt3位于程序存储器空间指向程序存储器空间的字符型数据

实际使用中常使用前三种

KEIL中的用法

unsigned?char?code?table[]={1,4};

unsigned?char?code?a[]="keil";

IAR中引入"flash"关键字,用法如下:

flash?unsigned?char?table[]={1,5};

flash?unsigned?char?a[]="IAR";

ICCAVR中的用法是

#pragma?data:code

const?unsigned?char?table[]={1,3};

const?unsigned?char?a[]="ICCAVR";

#pragma?data:data

转载后记:我用的是iccavr?7的破解版,套用上面的方法不行,提示为内存初始化错误,我试着将#pragma?data:code#pragma?data:data对调位置,结果编译正确,即将上文的

#pragma?data:code

const?unsigned?char?table[]={1,3};

const?unsigned?char?a[]="ICCAVR";

#pragma?data:data

改为:

#pragma?data:data

const?unsigned?char?table[]={1,3};

const?unsigned?char?a[]="ICCAVR";

#pragma?data:code

不知道为什么这样,只是给路过的朋友提个醒。

后来发现ICCAVR7.22不用这么改也好用的。

?

大家要注意的是:

写入flash里面的数据调用的时候,需要注意调用的声明。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读