www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁 > 單片機(jī) > 單片機(jī)
[導(dǎo)讀]SARM空間是AVR單片機(jī)最重要的部分,所有的操作必須依賴該部分來完成。變量在SARM空間的存儲(chǔ)模式有tiny,small,large 三種,也就是對(duì)應(yīng)于__tiny, __near,__far三中存儲(chǔ)屬性。一旦選擇為哪種存儲(chǔ)模式,對(duì)應(yīng)的數(shù)據(jù)默

SARM空間是AVR單片機(jī)最重要的部分,所有的操作必須依賴該部分來完成。變量在SARM空間的存儲(chǔ)模式有tiny,small,large 三種,也就是對(duì)應(yīng)于__tiny, __near,__far三中存儲(chǔ)屬性。一旦選擇為哪種存儲(chǔ)模式,對(duì)應(yīng)的數(shù)據(jù)默認(rèn)屬性也就確定了,但可以采用__tiny, __near,__far關(guān)鍵字來更改。


對(duì)于程序中的局部變量,編譯器會(huì)自動(dòng)處理的,我們也不可能加什么儲(chǔ)存屬性,但I(xiàn)AR提供了強(qiáng)大的外部變量定義。

IAR編譯器內(nèi)部使用了部分工作寄存器,留給用戶的只有R4-R15供12個(gè)寄存器供用戶使用,要使用工作寄存器必須在工程選項(xiàng)里打開鎖定選項(xiàng)。
例:
定義兩個(gè)變量使用工作寄存器R14,R15。

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

在工程選項(xiàng)里c/c++ complier>code里打開要使用的寄存器R14-R15。

編譯結(jié)果就如下,看看是不是直接使用了寄存器做為數(shù)據(jù)應(yīng)用

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


注意:定義在寄存器里變量不能帶有初始值。最好不要使用超過9個(gè)寄存器變量,不然可能引起潛在的危險(xiǎn),因?yàn)榻斓臅r(shí)候沒有鎖定任何寄存器。

定義變量的絕對(duì)地址.沒有特性的變量是隨機(jī)分配的,要給變量分配地址必須加以特性修飾注意在定義地址的時(shí)候千萬不要和片內(nèi)寄存器地址重合了。

定義沒有存儲(chǔ)特性的絕對(duì)地址變量必須加__no_init 或者const對(duì)象特性
__no_init char t @ 0x65;//定義在I/O地址以外
const char t @ 0x65;//定義只讀變量的地址
例:

#include

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

對(duì)應(yīng)匯編:


voidmain(void)main:{u++;}