當(dāng)前位置:首頁 > 單片機(jī) > 單片機(jī)
[導(dǎo)讀]Function Declarations函數(shù)聲明Cx51對(duì)標(biāo)準(zhǔn)C進(jìn)行了一定的擴(kuò)展,使用這些擴(kuò)展可以:(1)把一個(gè)函數(shù)聲明為一個(gè)中斷過程(2)選擇使用的寄存器組(3)選擇存儲(chǔ)器模式(4)聲時(shí)可重入(5)聲明外部函數(shù)在函數(shù)聲中包含這些

Function Declarations函數(shù)聲明

Cx51對(duì)標(biāo)準(zhǔn)C進(jìn)行了一定的擴(kuò)展,使用這些擴(kuò)展可以:

(1)把一個(gè)函數(shù)聲明為一個(gè)中斷過程

(2)選擇使用的寄存器組

(3)選擇存儲(chǔ)器模式

(4)聲時(shí)可重入

(5)聲明外部函數(shù)

在函數(shù)聲中包含這些擴(kuò)展或?qū)傩裕褂孟旅娴姆椒暶鰿x51函數(shù)

[return_type]funcname([args]) [{small | compact | large}][reentrant][interruptn][usingn]

這里

return_type 返回值類型

funcname 函數(shù)名稱

args參數(shù)

small, compact, or large 存儲(chǔ)器模式

reentrant 是否可重入

interrupt 是否是中斷函數(shù)

using 使用哪個(gè)寄存器組

Function Parameters and the Stack函數(shù)參和堆棧

經(jīng)典的8051堆棧指針只訪問內(nèi)部的數(shù)據(jù)存儲(chǔ)器。Cx51緊接著在所有的數(shù)據(jù)之后放堆棧區(qū)。堆棧指針間接地訪問內(nèi)部數(shù)據(jù)存儲(chǔ)器,可以訪問所有的00-FFH的空間

在經(jīng)典的8051中堆棧的空間是受限制的,最大只有256字節(jié)。除了函數(shù)參數(shù)消耗堆??臻g,Cx51為每個(gè)函數(shù)指定了一些固定的內(nèi)存空間。當(dāng)函數(shù)被調(diào)用時(shí),調(diào)用者必須在進(jìn)入函數(shù)之前把參數(shù)拷貝到這個(gè)固定的空間中。然后函數(shù)從這個(gè)固定的空間中讀取并使用這些參數(shù)。在這個(gè)過程中只有返回地址存放在堆棧中。中斷函數(shù)會(huì)需要更多的堆??臻g,因?yàn)槌绦虮仨毲袚Q寄存器組并且保存一些寄存器的值到堆棧中。

注:Cx51允許使用在某些8051的增強(qiáng)型變種中可用的擴(kuò)展的堆棧區(qū)。通過這種方式,堆棧區(qū)域的大小可以增加到幾K字節(jié)。

在缺省的情況下,Cx51使用三個(gè)寄存器傳遞函數(shù)的參數(shù),這樣可以提高代碼的執(zhí)行速度。

注:有些8051變種僅提供64字節(jié)的片上數(shù)據(jù)存儲(chǔ)器,大多數(shù)器件有256字節(jié)。在使用存儲(chǔ)器模式時(shí)應(yīng)該把這些都考慮進(jìn)去,畢竟片上的data和idata數(shù)據(jù)存儲(chǔ)器直接影響到堆棧空間的大小。

Passing Parameters in Registers通過寄存器傳遞參數(shù)

Cx51允許使用CPU寄存器傳遞三個(gè)參數(shù),由于這種方式不需將參數(shù)寫入存儲(chǔ)器和從存儲(chǔ)器中讀出,所以明顯地提高了系統(tǒng)的性能。參數(shù)的傳遞受上一章講到的REGPARMS 和NOREGPARMS指令控制。

下表列出了用于不同位置參數(shù)和數(shù)據(jù)類型的寄存器。


參數(shù)個(gè)數(shù)


Char, 1-yte ptr


Int, 2-byte ptr


Long, float


Generic ptr


1


R7


R6&R7


R4-R7


R1-R3


2


R5


R4&R5


R4-R7


R1-R3


3


R3


R2&R3



R1-R3


沒有可用的寄存器來傳遞參數(shù),則用一個(gè)固定的存儲(chǔ)器區(qū)域來傳遞函數(shù)參數(shù)。

Function Return Values函數(shù)返回值

函數(shù)返回值總是使用CPU寄存器。下表列出了返回值的類型和所用的寄存器。


返回值


寄存器


描述


Bit


進(jìn)位標(biāo)志



Char, unsigned char, 1-byte ptr


R7



Int, unsigned int, 2-byte ptr


R6&R7


高位字節(jié)為R6,低位字節(jié)為R7


Long, unsigned long


R4-R7


高位字節(jié)為R4,低位字節(jié)為R7


Float


R4-R7


32位IEEE格式


Generic ptr


R1-R3


存儲(chǔ)器類型在R3,高位R2,低位R1


注:如果函數(shù)的第一個(gè)參數(shù)是bit類型的,其他的參數(shù)據(jù)是不通過寄存器傳遞的。這是因?yàn)槟茉诩拇嫫髦袀鬟f的參數(shù)與前述的編號(hào)方案都不相同。因此,bit類型的參數(shù)應(yīng)該在參數(shù)列表中末尾聲明。

Specifying the Memory Model for a Function

聲明函數(shù)的存儲(chǔ)器模式

Cx51函數(shù)通常采用缺省的存儲(chǔ)器模式來決定哪個(gè)存儲(chǔ)器空間用于函數(shù)的參數(shù)和局部變量。

可以通過包含small, compact,或large在函數(shù)的屬性中來指定函數(shù)的存儲(chǔ)器類型。

如:

int large_func (int i, int k) large /* Large model */

{

return (mtest (i, k) + 2);

}

函數(shù)使用small存儲(chǔ)器模式的好處是函數(shù)的參數(shù)和局部變量都放在8051的RAM中。因此,數(shù)據(jù)訪問效率非常高。然而,內(nèi)部的數(shù)存儲(chǔ)器有限。有時(shí)候有限的內(nèi)部數(shù)據(jù)存儲(chǔ)器的大小不能滿足需要,就必須使用其他的存儲(chǔ)器模式。在這種情況下,可以使用上面的方法定義一個(gè)函數(shù)使不同的存儲(chǔ)器模式。

通過指定函數(shù)的存儲(chǔ)器模式,可以從三種可能的可重入堆棧和結(jié)構(gòu)指針中擇優(yōu)使用。堆訪問SMALL模式要比訪問LARGE模式快得多。

Specifying the Register Bank for a Function

指定函數(shù)使用的寄存器組

8051系列器件的低32字節(jié)被分成了4個(gè)組,每個(gè)組8個(gè)寄存器。程序可以通過R0-R7訪問這些寄存器。寄存器組可以通過程序狀態(tài)字(PSW)的兩個(gè)位選擇。寄存器組對(duì)中斷處理或者是使用實(shí)時(shí)操作系統(tǒng)非常有用。在中斷服務(wù)程序中CPU切換寄存器組而不把不當(dāng)前的寄存器都保存起來。

關(guān)鍵字using用來指定函數(shù)使用的寄存器組:

void rb_function (void) using 3

{

。。。。。。。

}

關(guān)鍵字using的參數(shù)是一個(gè)0-3的整型常量,而且表達(dá)式中不允許有操作符出現(xiàn)。在函數(shù)的原型中不允許出現(xiàn)using關(guān)鍵字。這個(gè)關(guān)鍵詞對(duì)函數(shù)代碼有如下影響:

(1)當(dāng)前選擇的寄存器組在函數(shù)的入口處被保存在堆棧中

(2)指定的寄存器組被設(shè)定

(3)前面使用的寄存器組被保存下來直到當(dāng)前的函數(shù)退出

不能關(guān)鍵字using來聲明一個(gè)返回值在寄存器中的函數(shù)。在使用的時(shí)候必須非常小心,確保寄存器組切換只出現(xiàn)在謹(jǐn)慎地控制地區(qū)域。稍不小心會(huì)得到錯(cuò)誤的返回值。即使用同一個(gè)寄存器組,使用了using關(guān)鍵字聲明了屬性的函數(shù)也不能返回一個(gè)bit類型的值。

典型地,using屬性對(duì)于聲明了interrupt屬的函數(shù)是非常有用的。為每一個(gè)級(jí)別的中斷都聲明一個(gè)不同寄存器組是比較常見的。因此,你可以在所有非中斷程序中使用一個(gè)寄存器組,在高優(yōu)先級(jí)中斷中使用一個(gè)寄存器組,在低優(yōu)先級(jí)中斷中使用一個(gè)寄存器組。

Register Bank Access寄存器訪問

Cx51允許在一函數(shù)中定義缺省的寄存器組??刂浦噶頡EGISTERBANK允許程序員在源文件中指定在所有函數(shù)另使用哪一個(gè)寄存器組。然而這個(gè)指令并不產(chǎn)生切換寄存器的代碼。

復(fù)位后,8051在PSW中裝入00h從而選擇寄存器組0。所以缺省地所有非中斷程序代碼都使寄存器組0。要想改變,必須:

(1)修改startup代碼以選擇其他的寄存器組

(2)使用REGISTERBANK指令進(jìn)行聲明

缺省地,Cx51編譯器生成用絕對(duì)地址訪問R0-R7的代碼。這是為了最高的執(zhí)行效率。絕對(duì)地址的使用通過指令A(yù)REGS和NOAREGS控制。使用絕對(duì)址進(jìn)行寄存器訪問的函數(shù)不能被使用其他寄存器組的函數(shù)調(diào)用。由于調(diào)用者使用了不同的寄存器組,這樣做會(huì)引起不可預(yù)料的后果。要使用函數(shù)對(duì)當(dāng)前的寄存器組不敏感,函數(shù)必須在編譯前使用控制指令NOAREGS。這對(duì)于那種可能在主函數(shù)中調(diào)用,也可能被使用不同寄存器組的中斷程序調(diào)用的函數(shù)很有用。注:Cx51編譯器并不檢查函數(shù)間的寄存器組是否一致。因此,必須確保使用不寄存器組的函數(shù)只調(diào)用那些不指定缺省寄存器組的函數(shù)。


本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動(dòng)力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉