当前位置:首页 > 单片机 > 单片机
[导读]SARM空间是AVR单片机最重要的部分,所有的操作必须依赖该部分来完成。变量在SARM空间的存储模式有tiny,small,large 三种,也就是对应于__tiny, __near,__far三中存储属性。一旦选择为哪种存储模式,对应的数据默

SARM空间是AVR单片机最重要的部分,所有的操作必须依赖该部分来完成。变量在SARM空间的存储模式有tiny,small,large 三种,也就是对应于__tiny, __near,__far三中存储属性。一旦选择为哪种存储模式,对应的数据默认属性也就确定了,但可以采用__tiny, __near,__far关键字来更改。


对于程序中的局部变量,编译器会自动处理的,我们也不可能加什么储存属性,但IAR提供了强大的外部变量定义。

IAR编译器内部使用了部分工作寄存器,留给用户的只有R4-R15供12个寄存器供用户使用,要使用工作寄存器必须在工程选项里打开锁定选项。
例:
定义两个变量使用工作寄存器R14,R15。

#include__regvar__no_initcharg@15;__regvar__no_initcharP@14;voidmain(void){g++;P++;}

在工程选项里c/c++ complier>code里打开要使用的寄存器R14-R15。

编译结果就如下,看看是不是直接使用了寄存器做为数据应用

//4voidmain(void)main:CFIBlockcfiBlock0UsingcfiCommon0CFIFunctionmain//5{g++;REQUIRE?Register_R14_is_global_regvarREQUIRE?Register_R15_is_global_regvarINCR15//6P++;}INCR14RET


注意:定义在寄存器里变量不能带有初始值。最好不要使用超过9个寄存器变量,不然可能引起潜在的危险,因为建立库的时候没有锁定任何寄存器。

定义变量的绝对地址.没有特性的变量是随机分配的,要给变量分配地址必须加以特性修饰注意在定义地址的时候千万不要和片内寄存器地址重合了。

定义没有存储特性的绝对地址变量必须加__no_init 或者const对象特性
__no_init char t @ 0x65;//定义在I/O地址以外
const char t @ 0x65;//定义只读变量的地址
例:

#include

__no_initcharu@0x65;voidmain(void){u++;}

对应汇编:


voidmain(void)main:{u++;}0000000E6E5LDIR30,1010000002E0F0LDIR31,000000048100LDR16,Z00000069503INCR1600000088300STZ,R16000000A9508RET

带存储特性的关键字定义变量的绝对地址__io,__ext_io定义变量在i/o空间


#include__iocharu@0x65;voidmain(void){u++;}

对应汇编:

void main(void)

main:{u++;}000000091000065LDSR16,10100000049503INCR16000000693000065STS101,R16000000A9508RET



本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

有关开发人员如何通过在RAM中执行时间敏感功能而不是从Flash中执行时间敏感功能来加快其应用程序代码的文章。您可能想知道是否要进行这样的调整,表现会发生什么变化?答案会根据微控制器的制造技术而有所不同,但是开发人员可以...

关键字: RAM 绩效改进

现在的FPGA不仅包含以前的LE,RAM也更大更快更灵活,管教IOB也更加的复杂,支持的IO类型也更多,而且内部还集成了一些特殊功能单元。

关键字: FPGA RAM

在现代嵌入式系统开发中,STM32系列微控制器因其高性能、低功耗和丰富的外设资源而广受欢迎。然而,随着应用需求的不断增长,内部RAM的容量往往成为限制系统性能的一个瓶颈。为了解决这个问题,开发者通常会将堆(Heap)配置...

关键字: STM32 RAM

RAM和ROM等存储单元的物理地址映射是由做硬件的数字工程师确定,他们在划分时主要会考虑电路的延迟,将这些储存单元按照一定的方式挂在同一条AHB总线上。而嵌入式平台软件工程师可以通过修改链接脚本来设置哪些数据、代码在程序...

关键字: RAM ROM

在嵌入式系统领域,程序代码的运行位置是一个至关重要的问题。传统的观念认为,程序代码必须从FLASH存储器搬到RAM中运行,以提高执行速度和效率。然而,随着技术的不断发展,这一观念正在受到挑战。本文将深入探讨嵌入式系统中程...

关键字: 嵌入式系统 Flash RAM

ROM和RAM是人尽皆知的概念。即:RAM(random access memory)随机存储内存 ,这种bai存储器在断电时du将丢失其存储内容,故主要用于存储短时间使用的程序。ROM(Read-Only Memory...

关键字: RAM ROM 嵌入式

在C51编程环境中,变量的存储是理解程序运行机制和优化性能的关键。C51是专为8051系列单片机设计的一种C语言扩展,它不仅继承了标准C语言的强大功能,还针对单片机的硬件特性进行了优化。本文将深入探讨C51语言中变量的存...

关键字: C51语言 单片机 RAM

沙特阿拉伯利雅得2024年9月12日 /美通社/ -- 沙特数据与人工智能管理局(SDAIA)今日发起了一项开创性倡议,旨在推动符合伦理的人工智能研究与应用。 这一重大声明是在第三届全球人工智能峰会期间发布的,峰会目前正...

关键字: 人工智能 SD AI RAM

我们经常可以看到初学者在单片机论坛中询问他们是否可以在他们微不足道的小的8位微机中运行Linux。这些问题的结果通常是带来笑声。

关键字: RAM MCU

日本横滨2024年8月20日 /美通社/ -- 富士通半导体存储器解决方案株式会社(Fujitsu Semiconductor Memory Solution Limited)欣然宣布,自2025年1月1日起,公司名称将...

关键字: LIMIT RAM 富士通 半导体存储器
关闭