2017-06-28 51單片機混合編程小結(jié)

????C語言與匯編混合編程(keil)時:1、首先要在Project 窗口中包含匯編代碼的C 文件上右鍵,選擇“Options for ...”

2、然后在Properties選項卡中激活“Generate Assembler SRC File”和“Assemble SRC File”


3、然后把相應(yīng)的庫文件C51S.Lib添加到工程,路徑:在默認安裝盤KEIL/C51/LIB/C51S.Lib。注意庫文件必須是工程的最后一個文件。

4、在c語言中嵌入沒有參數(shù)調(diào)用的匯編程序段用#program asm······#program endasm前后括起來就行。

????嵌入有參數(shù)調(diào)用的程序段未嘗試。

5、C語言調(diào)用匯編函數(shù):

在c程序中用extern···聲明

在匯編中:

?PR?···SEGMENT CODE? //在程序存儲區(qū)中定義段,?PR?表示段位于程序存儲區(qū)內(nèi),轉(zhuǎn)換規(guī)律如? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 下:CODE——?PR??? XDATA——?XD

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? DATA——?DT? BIT——?BI?PDATA——?PD

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ···表示函數(shù)名,轉(zhuǎn)換規(guī)律如下:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Viod func(void) FUNC無參數(shù)傳遞或不含寄存器的函數(shù)名不作轉(zhuǎn)變轉(zhuǎn)入目

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 標 文件中,名字只是簡單地轉(zhuǎn)為大寫形式;

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Void func(char) _FUNC 帶寄存器參數(shù)的函數(shù)名,前面加“_”前綴,它表明

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 這類函數(shù)包含寄存器內(nèi)的參數(shù)傳遞;

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Void func(void) reentrant _?FUNC 對于重入函數(shù),前面加“_?”前綴,它表

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 明該函數(shù)包含棧內(nèi)才參數(shù)傳遞(未嘗試);

PUBLIC ···? ? ? ? ? ? ? ? ? ? ? ? ? //聲明函數(shù)為公共函數(shù)

RSEG ?PR?···? ? ? ? ? ? ? ? ? ?//表示函數(shù)可被連接器放置在任何地方,RSEG 是段名的屬性

···:? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //程序開始

參數(shù)傳遞說明:

返回值傳遞說明:

全局變量的使用:不推薦在匯編中使用C中定義的全局變量,如果必須要使用,可用如下方法:

????在C程序中聲明全局變量

????在匯編函數(shù)開始聲明?? EXTERN??DATA(變量名)

????直接使用變量

????如全局變量為數(shù)組,則使用變量名+偏移量,以數(shù)組BUFF[5]為例,如要訪問數(shù)組BUFF中的元素BUFF[3],在匯編中先聲明EXTERN? DATA(BUFF),在程序中使用MOV? A,BUFF+03H

6、匯編調(diào)用C程序(未嘗試)


????總體來說混合編程比較復(fù)雜,容易產(chǎn)生問題,一般都是不得已的情況下才會使用。使用中還是盡量使程序模塊化,盡量少使用全局變量;如使用C語言為主,則盡量少的使用匯編,尤其是大段的匯編程序,由于C是自動編譯,使用內(nèi)存地址不確定而匯編是人為指定內(nèi)存地址,容易造成地址復(fù)用產(chǎn)生錯誤,若程序中再加入中斷則情況會變得更復(fù)雜。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容