1. gzyueqian
      18078865874

      嵌入式開發:匯編語言的4種用法

      更新時間: 2022-04-26 09:32:10來源: 粵嵌教育瀏覽量:9638

        很多嵌入式開發人員認為應該避免使用匯編語言,原因是它特定于所使用的處理器架構,難以閱讀、理解和維護。今天,我們將看看仍然適合使用匯編語言的幾個領域以及該代碼的樣子。

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

        匯編用法 1 – 執行斷點指令

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

        對于 Arm Cortex-M 處理器,使用類似于 STM32 CubeIDE 的 IDE,這樣的匯編實現可能如下所示:

        當到達該指令時,處理器將停止執行。

        匯編用法 2 – 從引導加載程序到應用程序的轉換

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

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



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



        同樣,這提供了對處理器的低級控制,以確保一切都回到原點,然后應用程序可以從頭開始執行。

        匯編用法 3 – 控制循環中的代碼優化

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

        匯編用法 4 – 教授微控制器基礎知識

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

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

        總結

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


      免費預約試聽課

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

      
      

      1. 一本大道之中文日本香蕉 | 亚洲国内自拍资源总站 | 日本欧美亚洲日韩在线视 | 精品国产高清在线拍 | 天天视频一区二区三区 | 久久人精品婷婷香蕉 |