2012年8月8日 星期三

在Keil C51函數中加入ASM代碼

在Keil C51函數中加入ASM代碼

方法如下:


預處理指令 #pragma asm 開始ASM代碼
預處理指令 #pragma endasm 結束ASM代碼


如果就這樣直接編譯的話,會出現以下錯誤:
error Cxxx : 'asm/endasm' requires src-control to be active


解決方法:在 Files Toolbar 中選中當前C51文件,點右鍵查看文件選項,將
Generate Assembler SRC File Assemble SRC File 的勾選由灰色變為黑色,即使這兩項有效!




這時進行編譯沒有問題,但是Link時產生了兩個警告:
*** WARNING L1: UNRESOLVED EXTERNAL SYMBOL
*** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL


解決方法是需要在 Source Group 中添加一個 LIB 文件,根據專案的內容不同有所區別:
C51S.LIB - 沒有浮點運算的 Small model
C51C.LIB - 沒有浮點運算的 Compact model
C51L.LIB - 沒有浮點運算的 Large model
C51FPS.LIB - 帶浮點運算的 Small model
C51FPC.LIB - 帶浮點運算的 Compact model
C51FPL.LIB - 帶浮點運算的 Large model


LIB 方件在 Keil 安裝目錄下的 \C51\LIB\ 目錄中。


只是加入組合語言碼後, 需要特別注意到 堆疊、 指標、 跟暫存器的值, 儘量能保持一致。
而且不要用絕對位址去改變參數等資料、避免 C 的參照改變。


沒有留言:

張貼留言

FPGA Verilog 的學習經驗,提供給要入門的新手

今天簡單說說 FPGA Verilog 的學習經驗,提供給要入門的新手: 1.對自己寫的FPGA Verilog程式,所生成的數位電路要心中有數。 這一點個人認為很重要,就正如寫 C語言,心中要能生成對應的組合語言一樣,我是這樣要求自己的。 雖然 FPGA Verilog語言...