最近移植了一個UCOSII到STM8L,先從編譯器談起。
由于IAR與VC++很像,所以直接就選用了它。
1. 函數參數傳遞
了解到它用了16個虛擬寄存器(也可以配置成12個)作為局部變量和函數參數傳遞。地址從0x00~0x0F。從MAP文件中可以看到。注意0地址是RAM的,所以函數中對指針的判斷要特別注意。
從調試時反匯編的代碼可以看到,C函數調用開始前都需要調用系統的一些函數用于保存參數,但在匯編里的函數就必須自己保存。比如中斷回調函數:
匯編:
PUBLIC _interrupt_29 //UART_TXE irq
SECTION `.far_func.text`:CODE:NOROOT(0)
_interrupt_29: //vector number on datasheet + 2, don't ask me why. zhw
SAVE_VREGS //這個非常重要,由于有C函數調用,編譯器會用到VREGS
CALLF UART_TxEmptyIrqHandler
RESTORE_VREGS
IRET
其中宏:
SAVE_VREGS MACRO
push s:?b0
push s:?b1
push s:?b2
push s:?b3
push s:?b4
push s:?b5
push s:?b6
push s:?b7
push s:?b8
push s:?b9
push s:?b10
push s:?b11
push s:?b12
push s:?b13
push s:?b14
push s:?b15
ENDM
RESTORE_VREGS MACRO
pop s:?b15
pop s:?b14
pop s:?b13
pop s:?b12
pop s:?b11
pop s:?b10
pop s:?b9
pop s:?b8
pop s:?b7
pop s:?b6
pop s:?b5
pop s:?b4
pop s:?b3
pop s:?b2
pop s:?b1
pop s:?b0
ENDM
C函數:
#pragma vector = 29
__interrupt void Irq_UARTTxHandler ( void )
{
UART_TxEmptyIrqHandler();
}
看起來C代碼簡潔,但實際從實際效率來看,匯編的效率更好。
2. 環境配置
主要是配置你選用的芯片型號。另外還有系統堆棧大小和堆的大小。根據實際配置可節省RAM空間。如果要編譯庫(如FWLIB)也是在Options里面配置。
上一篇:IAR ARM、IAR STM8、IAR MSP430共用一個IDE
下一篇:stm8 ADC模數轉換
推薦閱讀
史海拾趣
帝特在國內市場取得一定成績后,開始積極拓展國際市場。公司在中國區開設了廣州、深圳分公司,并在泰國和馬來西亞等地設立了分公司和專賣店。通過全球化的戰略布局,帝特的產品銷售網絡遍布東南亞、中東、非洲和美洲等國家和地區,公司的知名度和市場份額均得到了顯著提升。
町洋始終堅守品質至上的原則,從原材料采購到生產流程再到成品檢驗,每一個環節都嚴格把關。這種對品質的執著追求使得町洋的產品在市場上享有極高的聲譽。客戶對町洋產品的信任和認可也成為了公司最寶貴的財富。
在電感器領域,技術創新是推動產業升級的關鍵因素。奇力新始終將技術創新作為公司發展的核心驅動力。公司不斷投入研發資金,加強與國際知名企業和研究機構的合作,推出了一系列具有自主知識產權的新技術和新產品。這些技術和產品不僅提升了奇力新的市場競爭力,還推動了整個電感器行業的升級和發展。
隨著國內市場的逐漸飽和,CTC Coils Ltd公司開始將目光投向海外市場。公司首先在歐洲設立了銷售分支機構,通過參加國際電子展會、與當地企業建立合作關系等方式,逐步打開了歐洲市場。隨后,公司又進一步拓展到北美和亞洲其他地區,實現了業務的國際化布局。
ELNA公司的故事始于1940年代,當時該公司推出了其第一臺縫紉機。這款縫紉機以其精湛的工藝和卓越的性能迅速在市場上嶄露頭角。ELNA憑借對品質的堅持和對技術的不斷創新,逐漸在縫紉機行業樹立了良好的口碑。
隨著業務的擴展,ELNA開始涉足電子領域,并逐步將其在機械制造和精密加工方面的技術優勢應用到電子產品中。這一轉變為公司未來的發展奠定了堅實的基礎。
本人設計的工業儀表,遇到這樣的問題:輸入信號0-20MV。當用手觸摸輸入端子的時候,顯示值會波動,這是什么干擾(好象是串模干擾),如何解決?注明:信號是經過了2個模擬開關(CD4051),由OP07放大 再采樣。… 查看全部問答∨ |
|
LPC1114 datasheet深度解析LPC1100低功耗設計的七個秘密以LPC1100產品進行設計32位MCU開發全攻略上32位MCU開發全攻略下LPC1000 系列 Q&A及支持 … 查看全部問答∨ |
pxa3XX 從CF卡上啟動nk.bin 的bootloader 請問各位大俠有誰做過pxa310或者pxa270的bootloader 要求從CF卡啟動nk.bin 我應該用什么軟件來編譯,用wce6.0 還是ARM提供的AXD 是不是wce6.0下生成bootimage.nb0 就是bootloader 我用仿 ...… 查看全部問答∨ |
我在SD卡里面創建一個“我們.txt”文件,結果在PC機上看到文件名為“컒쏇.txt”。 創建“我們.txt”文件,并給此文件里面寫一段中文,里面的中文都很正常。就是文件名為“컒쏇.txt” 不過用FileScanName函數可以 ...… 查看全部問答∨ |