avr的flash和ram存放的数据问题

来源:本站
导读:目前正在解读《avr的flash和ram存放的数据问题》的相关信息,《avr的flash和ram存放的数据问题》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《avr的flash和ram存放的数据问题》的详细说明。
简介:本文介绍了AVR单片机内flash和RAM存放数据的区别以及使用等内容。

avr单片机是基于哈佛结构,它的程序存储器和数据存储器分开。

avr的Flash存储器空间存放的内容有:

(1)text:程序代码区

(2)interrupt vectors:存放中断向量

(3)fun_lit:函数列表区。函数列表区包含了函数的入口地址。

(4)lit:整型数和浮点数常量区。存放的是程序中的常量数据。

(5)idata:全局变量和字符串的初始值存放在该区。

avr的RAM数据内存中存放的内容有:

1)data: 存放全局变量、静态变量和字符串。(注意:全局变量和字符串的初始值保存在Flash中的idata区域,在启动时被复制到RAM中)

2)bss:包括未初始化的全局变量。

avr中的EEPROM存放的是HEX文件。

AVR系列的SRAM和Flash的结构 SRAM实际上就是AVR的内存,运算只能通过32个工作寄存器,而SRAM在这个过程中起到保存数据的作用。

在做简单的工程的时候,你使用的变量可能只需要用的寄存器就足够了,但是在比较复杂的工程下,就要频繁的进行寄存器和SRAM之间的数据交换了。

如果你是使用汇编进行工作,此时你需要知道的是AVR的地址空间分配,对SRAM的操作的汇编指令等,而如果是使用C编译器,知道这些,能有帮助你优化你的程序。

所有的地址空间能被直接或者间接的寻址。

直接寻址:

在要保存(加载)数据到(从)你所指定的直接地址的时候,你可以使用sts、lds指令。

ldi r16,0x55 ;r16装入立即数0x55

sts 0x0190,r16 ;把r16里的数据保存在SRAM中地址为0x190的地方

lds r16,0x0190 ;把SRAM中地址为190的数据装入r16

间接寻址可以象C或者Pascal里的指针那样操作,就是32个寄存器里的(R26,R27)X,(R28,R29)Y,(R30,R31)Z。

还是以地址0x0190为例子

ldi XL, 0x90 ;加载目标地址的低位

ldi XH, 0x01 ;加载目标地址的高位

ld r16, X ;把目标地址的数据加载到r16

间接寻址的加载和存储和直接的指令是不一样的,间接的只能使用ls和st来执行。

AVR的地址空间是由3个主要部分构成的:32个寄存器、I/O寄存器(UART、TIME、等等)、内部SRAM。

另外不同的编译软件对FLASH中的变量定义方法不一样。

提醒:《avr的flash和ram存放的数据问题》最后刷新时间 2024-03-14 01:08:33,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《avr的flash和ram存放的数据问题》该内容的真实性请自行鉴别。