[英]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.