ICCAVR 中存储空间的分配

发布者:bonbono最新更新时间:2018-05-29 来源: eefocus关键字: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,1,2,3,4,5};

    const unsigned char string[]="ARMoric";

    #pragma data:data

  

   注意:

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

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

                 

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

   

const unsigned char buffer[]={0,1,2,3,4,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,2,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,2,3,4};

unsigned char code a[]="keil";

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

flash unsigned char table[]={1,2,3,4,5};

flash unsigned char a[]="IAR";

在ICCAVR中的用法是

#pragma data:code

const unsigned char table[]={1,2,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,2,3};

const unsigned char a[]="ICCAVR";

#pragma data:data

改为:

#pragma data:data

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

const unsigned char a[]="ICCAVR";

#pragma data:code

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

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

 

大家要注意的是:

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


关键字:ICCAVR  存储空间  分配 引用地址:ICCAVR 中存储空间的分配

上一篇:AVR单片机电源管理_睡眠模式(低功耗模式)实验
下一篇:AVR单片机用progisp下载报错flash verify error at :0h

推荐阅读最新更新时间:2024-03-16 16:03

AVR单片机的串口查询设计
* Code adapted from Atmel AVR ApplICation Note AVR306 * PolLEDmode driver forUART, this is the similar to the * library default putchar() and getchar() in ICCAVR */ #include #include #include “uart.h” /* iniTIalize UART */ void InitUART( unsigned char baudrate ) { UBRR = baudrate; /* set the baud rate */ UCR = BIT
[单片机]
AVR单片机的串口查询设计
超低抖动时钟分配解决方案整合了 EZSync 多芯片同步
凌力尔特公司 (Linear Technology Corporation) 推出超低抖动 1.8GHz 时钟分配芯片系列 LTC6954,该器件有 3 个独立的输出,每个都有自己的分频器和相位延迟。凭借在 12kHz 至 20MHz 带宽内不到 20fsRMS 的附加抖动,LTC6954 在对输入时钟进行分频和分配的同时,可最大限度减少了引入的噪声。这使 LTC6954 能够提供抖动很低的时钟,在驱动高分辨率数据转换器时,必须用这样的时钟才能实现最佳信噪比 (SNR)。例如,在对 RF 或高 IF 高频模拟信号等进行数字化时时,低抖动 ADC 时钟尤其重要,这使 LTC6954 成为这类系统中的理想时钟解决方案。 LTC6
[模拟电子]
B001-Atmega16-汇编-地址空间分配
地址空间规划 打开m16def.inc、可以看到如下面的定义,它和手册里面描述的FlashROM、SRAM、EEPROM等的地址空间一一对应。 ; ***** DATA MEMORY DECLARATIONS ***************************************** .equ FLASHEND = 0x1fff ; Note: Word address、这里一共是8K word的flash ROM .equ IOEND = 0x003f ; IO寄存器的地址空间是0x0000-0x003F、但它们被映射到0x0020-0x005F .equ SRAM_START = 0x0060
[单片机]
B001-Atmega16-汇编-地址空间<font color='red'>分配</font>
什么是Bootloader 浅谈STM32中bootloader的内存分配
1. 什么是Bootlo ad er Bootloader是 硬件 启动的引导程序,是运行 操作系统 的前提。在操作系统内核或用户应用程序运行之前运行的一段小代码。对硬件进行相应的初始化和设定,最终为操作系统准备好环境。 2. Bootloader的特点 Bootloader不属于操作系统,一般采用 汇编 语言和 C语言 开发。需要针对特定的硬件平台编写。在移植过程时,首先为开发板移植Bootloader。Bootloader不但依赖于 CPU 的体系架构,而且依赖于 嵌入式系统 板级设备的配置。 3. STM32 中bootloader的内存分配 stm32默认的是从0x08000000开始启动程序,所以bootloader
[单片机]
什么是Bootloader 浅谈STM32中bootloader的内存<font color='red'>分配</font>
MSP430FR5969内存分配的问题
cmd文件里的具体内容我就不贴了,大家自己可以看一下。cmd文件主要由两部分构成,一个是MEMORY{};另一个是SECTIONS{} 其中MEMORY{}是定义内部所有寄存器及存储器的地址,在这里大部分内容都是厂家定义好的,一般不能修改。但是咱们今天要改的就是他,当然只能改其中允许该的地方,那就是FRAM的分配问题。根据数据手册里提供的内存分配情况(如下图)我们可以得知,59x9的内存从0x0000开始,一直到0x13FFF。对应着这个图和Cmd文件,我们可以了解内部的地址分配问题,如果做过总线扩展之类的同学肯定对这个不会陌生了,如果没有见过就需要理解一下。其实也很简单,就是对应的地址要对应上就可以了。有一些是固定好的不能变
[单片机]
MSP430FR5969内存<font color='red'>分配</font>的问题
ICCAVR自动下载程序说明
ICCAVR软件有ISP功能,能过调用STK500完成的,只要设置好参数,在ICCAVR中就可以给芯片编程了,还可以让程序一编译完就自动下载到芯片中,相当方便。 在Tools- environment options- ISP里设定STK500.exe的路径。— 用于调用STK500程序。 在Tools- In system programming 里Programmer Interface中选中STK500。— 选择STK500下载方式。 在Tools- In system programming 里把Auto Program After Compile 的小勾选上。— 编译后自动编程。 在Tools- In system
[单片机]
<font color='red'>ICCAVR</font>自动下载程序说明
安森美新ECLinPS时钟分配器件提供亚皮秒抖动时钟
卓越的时钟分配器件提供亚皮秒抖动时钟,提高时序精度,增加设计灵活性和降低系统总成本 2007年8月9日 - 全球领先的电源半导体解决方案供应商安森美半导体 (ON Semiconductor,美国纳斯达克上市代号:ONNN) 为当今最先进的计算、数据存储、连网和消费应用的同步存储器模块推出两款新的时钟分配器件,扩展了高性能 ECLinPSTM 时钟管理产品系列。新的 NB4N121K 和 NB4N111K 为全面缓冲双列直插内存模块 (FBDIMM) 应用提供差分主时钟信令等级 (HCSL) 输出和极低传输延迟变异。 安森美半导体标准产品先进逻辑部总监何焘 (Dan Huettl) 说:“随着系统速度和容量要求持续提高,业内
[新品]
频谱分配惹争议 FCC将为5G分配更多毫米波频率
  外媒报道,在下一次公开会议上, FCC 将考虑一项命令,即它将为灵活的地面无线使用提供高达1700兆赫的高频频谱,并为核心卫星提供4千兆赫频谱。会议定于11月16日(星期四)举行。下面就随网络通信小编一起来了解一下相关内容吧。    FCC 主席特拜在一篇博客文章中曾说过,决定为 5G 分配接近11GHz的毫米波频率,这将是美国努力在 5G 方面创新引领世界的重大标志。   最近,该委员会在24 GHz以上的频段上提交的文件表明,地面无线行业和卫星产业之间的紧张关系仍然很高。近12个拟议中的卫星星座或项目比前几年更具雄心壮志。并不是所有的卫星都有望实现,但许多卫星支持者认为, 5G 服务还必须包括卫星。   至少有一位卫星高
[网络通信]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved