簡體   English   中英

ARM cortex M4部件閃爍的LED延遲

[英]ARM cortex M4 assembly blinking LED Delay

我現在正在使用c學習組裝電話。 我正在嘗試更改代碼,因此匯編代碼從不退出,並且繼續使LED閃爍,但是我不知道該怎么做。 我嘗試將C文件更改為只具有myled =!myled,但這不起作用。

更改delay_asm代碼可以打開和關閉LED,並且永遠不要退出delay_asm.s子例程。

這是C文件和程序集。

 #include "mbed.h"
DigitalOut myled(LED1);
extern "C" void delay_asm(void);
int main() {
while(1) {
    delay_asm(); 
    myled = !myled; // invert LED state
   }
}

匯編文件:

AREA |.text|, CODE, READONLY
delay_asm     PROC
      EXPORT delay_asm
      MOV R0, #0x01900000
      MOV R1, #1
LOOP      SUBS R0, R1
      BNE LOOP
      BX LR
      ENDP

      ALIGN
      END

您需要重新設計在注釋中提到的“ mbed在線IDE的功能”。 mbed稍后提供了一種硬件抽象來實現此目的。 例如, 此處針對M3 DesignStart(這是一個非常簡單的SoC,最少的引腳多路復用並且無需擔心時鍾)。 查看添加了對該平台支持的補丁程序,以查看代碼范圍。

hal是非常模塊化的,因此可以對其進行定制以適合各種硬件。 不是'Cortex-M4'處理器,而是SoC級GPIO和其他外圍設備。 您應該始終參考在這種情況下使用的特定SoC。

使用GPIO有兩個部分。 您需要配置引腳和外圍設備。 這應該由C ++構造函數完成(因此,您可能希望將其保留在代碼中)。 然后,每次讀取或寫入狀態的訪問通常將是對特定外設的單個存儲器訪問。

您當然可以在匯編代碼中調用hal的函數,但這聽起來像是不必要的轉移,即如何將C ++連接到匯編器(請注意mbed是C ++)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM