STM32 进阶教程 6 - 汇编与C混合编程
前言
在嵌入式開發(fā)過程中,有時(shí)候?yàn)榱俗非蟠a性能與效率不得不采用匯編語(yǔ)言來(lái)編寫代碼,但是匯編代碼在閱讀時(shí)表現(xiàn)不如C語(yǔ)言友好,本節(jié)給大家介紹一種新的方法,關(guān)鍵代碼用匯編語(yǔ)言時(shí)行實(shí)現(xiàn),然后用C語(yǔ)言時(shí)行接封裝,用C語(yǔ)言與匯編語(yǔ)言混合編程的方式,在實(shí)現(xiàn)代碼性能與運(yùn)行效率的同時(shí),又較方便閱讀與理解決代碼邏輯。
本節(jié)將以STM32 MCU平臺(tái)作為展示,教大家如何實(shí)現(xiàn)編碼與C混合編程,本節(jié)實(shí)現(xiàn)方式是在《STM32 進(jìn)階教程 4 -? 軟件實(shí)現(xiàn)高精度延時(shí) 2》基礎(chǔ)上將一些C程序代碼用匯編代碼實(shí)現(xiàn),最終的效果與《STM32 進(jìn)階教程 4 -? 軟件實(shí)現(xiàn)高精度延時(shí) 2》節(jié)一樣,學(xué)會(huì)了stm32本節(jié)內(nèi)容,在51,AVR,DSP等硬件平臺(tái)同樣適用。
示例詳解
基于硬件平臺(tái): STM32F10C8T6最小系統(tǒng)板, MCU 的型號(hào)是?STM32F103c8t6, 使用stm32cubemx 工具自動(dòng)產(chǎn)生的配置工程,使用KEIL5編譯代碼。
?
?
本示例所用的最小系統(tǒng)板原理圖:
?
?
?
?
?
Delay.h文件放在INC文件夾下即可。
不同于啟動(dòng)文件外,本節(jié)要講的是C語(yǔ)言中包含匯碼代碼,這就需要用到關(guān)鍵字“__ASM” 或“__asm”關(guān)于__asm關(guān)鍵字的用法有如下說明:
?
__asm
這個(gè)關(guān)鍵字將信息從編譯器傳遞給ARM匯編程序armasm。這個(gè)關(guān)鍵字的確切作用取決于它的使用。
?
嵌入式匯編/ 內(nèi)聯(lián)匯編:
關(guān)鍵字__asm可以將內(nèi)聯(lián)程序集合并到函數(shù)中。例如:
int add(int i, int j)
{
??? int res;
??? __asm
??? {
??????? ADD?? res, i, j
??? }
??? return res;
}
指定匯編標(biāo)簽:
關(guān)鍵字__asm可以為C程序變量指定程匯編變量名。例如::
int count __asm__("count_v1"); // 在匯編代碼中導(dǎo)出的變量count_v1,而不是count
?
命名寄存器變量:
關(guān)鍵字__asm可以聲明一個(gè)命名的寄存器變量。例如:
register int foo __asm("r0");? //? 變量foo 實(shí)際上就是寄存器r0. 類似的操作在”Cmsis_armcc.h”中較多見。
?
關(guān)于__asm關(guān)鍵中,本節(jié)主要用到的是 “嵌入式匯編/ 內(nèi)聯(lián)匯編”功能。
?
?
將其延時(shí)1us及2us的操作用匯編指令nop來(lái)實(shí)現(xiàn)
?
讓程序全速運(yùn)行,查看PC13引腳上的波形,
進(jìn)入軟件仿真可以看到Delay_us中函數(shù)1us及2us的函數(shù)對(duì)應(yīng)匯編代碼如下:
通過上面的實(shí)例,我們已基本學(xué)會(huì)基于keil MDK平臺(tái)的stm32 中C程序中嵌入?yún)R編的實(shí)現(xiàn)方法,那么如么在匯編程序中讞用C函數(shù)接口呢,這個(gè)其實(shí)更簡(jiǎn)單,可以參看stm32的官方啟動(dòng)文件“startup_stm32fxxxx.s” 它就是一個(gè)典型的匯編程序調(diào)用C函數(shù)的實(shí)現(xiàn)。最后更多關(guān)于__asm的說明可以查看KEIL mdk的幫助文檔。:
?
OK,本期實(shí)驗(yàn)完成!下期見!同時(shí)如果大家有什么疑問或是有想了解的其它內(nèi)容,也歡迎大家留言!!最后喜歡這個(gè)公眾號(hào)的同學(xué)們記得加關(guān)注了,會(huì)有不定期技術(shù)干貨推出!!
文中源碼資料下載,在公眾號(hào)里給十三發(fā)消息:
下載|STM32進(jìn)階教程 6
?
關(guān)注十三公眾號(hào)
?
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的STM32 进阶教程 6 - 汇编与C混合编程的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: STM32 进阶教程 5 - 内联函数
- 下一篇: STM32 进阶教程 7 - C与C+