1. gzyueqian
      13352868059

      嵌入式開發(fā):匯編語言的4種用法

      更新時(shí)間: 2022-04-26 09:32:10來源: 粵嵌教育瀏覽量:9520

        很多嵌入式開發(fā)人員認(rèn)為應(yīng)該避免使用匯編語言,原因是它特定于所使用的處理器架構(gòu),難以閱讀、理解和維護(hù)。今天,我們將看看仍然適合使用匯編語言的幾個(gè)領(lǐng)域以及該代碼的樣子。

        在我們查看仍然可以使用匯編語言的每個(gè)領(lǐng)域之前,請(qǐng)記住,這些匯編指令如何集成到代碼庫(kù)中將根據(jù)所使用的開發(fā)環(huán)境而有所不同。通常有一些自定義編譯器函數(shù)用于讓編譯器語言知道正在使用匯編指令,例如_asm()。我們檢查的代碼片段可能需要在使用前進(jìn)行修改。

        匯編用法 1 – 執(zhí)行斷點(diǎn)指令

        每當(dāng)我開始一個(gè)新項(xiàng)目時(shí),我在實(shí)施過程中做的第一件事就是將斷點(diǎn)的匯編指令放在 CPU 故障、看門狗超時(shí)和特殊 RTOS 事件(例如 malloc 失敗)的中斷服務(wù)例程中(即使我避免使用malloc)。這樣做的原因是我想在意外到達(dá)這些功能之一時(shí)收到通知,但我不想管理這些斷點(diǎn)。許多現(xiàn)代處理器都有斷點(diǎn)匯編指令,使用匯編代碼執(zhí)行該指令是完全合適的。

        對(duì)于 Arm Cortex-M 處理器,使用類似于 STM32 CubeIDE 的 IDE,這樣的匯編實(shí)現(xiàn)可能如下所示:

        當(dāng)?shù)竭_(dá)該指令時(shí),處理器將停止執(zhí)行。

        匯編用法 2 – 從引導(dǎo)加載程序到應(yīng)用程序的轉(zhuǎn)換

        嵌入式開發(fā)人員應(yīng)該考慮使用匯編語言的第二個(gè)領(lǐng)域是從引導(dǎo)加載程序到應(yīng)用程序代碼的過渡點(diǎn)。在許多系統(tǒng)中,引導(dǎo)加載程序是第一個(gè)執(zhí)行的應(yīng)用程序。它設(shè)置處理器、驗(yàn)證內(nèi)存并可能執(zhí)行其他幾個(gè)功能。但在某些時(shí)候,引導(dǎo)加載程序讓位并跳轉(zhuǎn)到主應(yīng)用程序。為了使跳轉(zhuǎn)成功,處理器中的許多組件需要設(shè)置為其初始狀態(tài),例如系統(tǒng)堆棧,然后需要加載應(yīng)用程序的復(fù)位向量的函數(shù)指針。

        當(dāng)我將匯編語言集成到應(yīng)用程序中時(shí),我經(jīng)常使用 IDE 的匯編功能。這些功能可能因一個(gè) IDE 而異。例如,下面是一個(gè)函數(shù),它接受應(yīng)用程序的復(fù)位向量所在的起始地址位置。此代碼是使用 NXP 特定工具鏈為 NXP Kinetis-L 處理器編寫的:



        另一個(gè)相同功能的示例,但在這種情況下,代碼是為德州儀器 C2000 處理器編寫的:



        同樣,這提供了對(duì)處理器的低級(jí)控制,以確保一切都回到原點(diǎn),然后應(yīng)用程序可以從頭開始執(zhí)行。

        匯編用法 3 – 控制循環(huán)中的代碼優(yōu)化

        在某些情況下,可能需要在使用匯編的高頻控制循環(huán)中優(yōu)化代碼。在裝配中手動(dòng)編碼快速控制回路過去很常見,雖然有時(shí)這仍然是合適的,但在當(dāng)今擁有超快處理器和使用復(fù)雜優(yōu)化技術(shù)的編譯器的嵌入式開發(fā)環(huán)境中,匯編語言使用的最后一種情況正在消失。

        匯編用法 4 – 教授微控制器基礎(chǔ)知識(shí)

        雖然今天許多人都希望從可能的最高抽象級(jí)別開始,但對(duì)于嵌入式系統(tǒng)來說,開發(fā)人員了解底層發(fā)生的事情至關(guān)重要,并且沒有比在匯編中編寫軟件更好的學(xué)習(xí)方法了。

        雖然不應(yīng)該花很多時(shí)間在編寫匯編上,但剛接觸嵌入式系統(tǒng)的開發(fā)人員應(yīng)該編寫一些非常基本的應(yīng)用程序,例如“Hello World”應(yīng)用程序和閃爍 LED 應(yīng)用程序,以了解如何初始化處理器,控制寄存器并稍微熟悉底層指令集。如果開發(fā)人員了解底層架構(gòu),這些細(xì)節(jié)可以幫助開發(fā)人員用 C/C++ 編寫更高效的代碼,而真正理解它的唯一方法就是使用它自己的自然語言來使用它。

        總結(jié)

        今天在大多數(shù)情況下應(yīng)該避免使用匯編語言,但是當(dāng)使用它時(shí),它可以提供一種機(jī)制來非常精細(xì)地控制應(yīng)用程序的行為方式。如果你確實(shí)決定使用某種匯編語言,請(qǐng)確保你大量記錄該代碼區(qū)域,以便你自己和其他嵌入式開發(fā)人員將來更容易維護(hù)該代碼。


      免費(fèi)預(yù)約試聽課

      亚洲另类欧美综合久久图片区_亚洲中文字幕日产无码2020_欧美日本一区二区三区桃色视频_亚洲AⅤ天堂一区二区三区

      
      

      1. 在线观看免费AV永久免费 | 日本免费二区三区久久 | 亚洲另类欧美综合久久 | 中文字幕在线播放 | 在线看片国产的免费 | 一级a一级a爱片免费久久 |