IAR RAM的操作
来源:互联网 发布:淘宝葡萄糖酸锌片价格 编辑:程序博客网 时间:2024/05/29 09:15
SARM空间是AVR单片机最重要的部分,所有的操作必须依赖该部分来完成。变量在SARM空间的存储模式有tiny,small,large 三种,也就是对应于__tiny, __near,__far三中存储属性。一旦选择为哪种存储模式,对应的数据默认属性也就确定了,但可以采用__tiny, __near,__far关键字来更改。
对于程序中的局部变量,编译器会自动处理的,我们也不可能加什么储存属性,但IAR提供了强大的外部变量定义。
IAR编译器内部使用了部分工作寄存器,留给用户的只有R4-R15供12个寄存器供用户使用,要使用工作寄存器必须在工程选项里打开锁定选项。
例:
定义两个变量使用工作寄存器R14,R15。
#include<iom8.h>__regvar __no_init char g @ 15;__regvar __no_init char P @ 14;void main(void){ g++; P++;}
在工程选项里c/c++ complier>code里打开要使用的寄存器R14-R15。
编译结果就如下,看看是不是直接使用了寄存器做为数据应用
// 4 void main(void)main:CFI Block cfiBlock0 Using cfiCommon0CFI Function main// 5 { g++;REQUIRE ?Register_R14_is_global_regvarREQUIRE ?Register_R15_is_global_regvarINC R15// 6 P++; }INC R14RET
注意:定义在寄存器里变量不能带有初始值。最好不要使用超过9个寄存器变量,不然可能引起潜在的危险,因为建立库的时候没有锁定任何寄存器。
定义变量的绝对地址.没有特性的变量是随机分配的,要给变量分配地址必须加以特性修饰注意在定义地址的时候千万不要和片内寄存器地址重合了。
定义没有存储特性的绝对地址变量必须加__no_init 或者const对象特性
__no_init char t @ 0x65;//定义在I/O地址以外
const char t @ 0x65;//定义只读变量的地址
例:
#include<iom8.h>__no_init char u @ 0x65 ;void main(void){ u++;}
对应汇编:
void main(void)\ main:{u++;}\ 00000000 E6E5 LDI R30, 101\ 00000002 E0F0 LDI R31, 0\ 00000004 8100 LD R16, Z\ 00000006 9503 INC R16\ 00000008 8300 ST Z, R16\ 0000000A 9508 RET
带存储特性的关键字定义变量的绝对地址__io,__ext_io定义变量在i/o空间
#include<iom8.h>__io char u @ 0x65 ;void main(void){ u++;}
对应汇编:
void main(void)\ main:{u++;}\ 00000000 91000065 LDS R16, 101\ 00000004 9503 INC R16\ 00000006 93000065 STS 101, R16\ 0000000A 9508 RET
- IAR RAM的操作
- IAR之RAM的操作
- iar(msp430)中如何看代码 占用flash 和ram的大小
- IAR 环境下基于JLINK在RAM中调试STM32
- IAR中代码在flash和ram中调试流程
- HR8P506,FLASH的IAP操作与RAM不得不说的秘密
- 操作CMOS RAM芯片(1403)
- 单口RAM、伪双口RAM、双口RAM与FIFO的区别
- 单口RAM、伪双口RAM、双口RAM与FIFO的区别
- 单口RAM、伪双口RAM、双口RAM与FIFO的区别
- 单口RAM、伪双口RAM、双口RAM与FIFO的区别
- 【IAR】IAR的多行注释
- FIFO、单口RAM、双口RAM的区别
- IAR编译器的常见问题
- IAR的编译过程
- IAR 遇到的问题
- IAR的介绍
- IAR的中断程序
- PHP-CGI 进程 CPU 100% 与 file_get_contents 函数的关系
- C#递归算法-遍历XML文件,以UL列表显示树形结构目录
- 音视频压缩编码技术
- Yun.io 一款用心制作的国产文件同步网盘云存储服务 (支持Win/Mac/Linux/手机)
- Hadoop在Cygwin下的JDK配置
- IAR RAM的操作
- java调用dll.C++调用没有lib的dll中类中的函数.
- Nginx源码分析---Nginx启动初始化过程(二)
- hdu 1104
- Qt事件--数字时钟
- 全国省市数据库
- Windows核心编程<读书笔记七>线程的调度、优先级以及亲缘性 【含有代码】
- SVN邮件通知功能
- poj 2312 Battle City(优先队列)