我现在正在学习用 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 稍后提供硬件抽象来实现这一点。例如,here适用于 M3 DesignStart(这是一个非常简单的 SoC,最小的引脚多路复用且无需担心时钟)。查看添加了对该平台的支持的补丁以了解代码的范围。
hal 是非常模块化的,因此可以对其进行定制以适应各种硬件。不是“Cortex-M4”处理器,而是 SoC 级别的 GPIO 和其他外设。您应该始终引用您在这种情况下使用的特定 SoC。
使用 GPIO 有两个部分。您需要配置引脚和外设。这应该由 C++ 构造函数完成(因此您可能希望将其保留在您的代码中)。然后,每次读取或写入状态的访问通常都是对特定外围设备的一次内存访问。
您当然可以使用汇编代码调用 hal 的函数,但这听起来像是不必要地转移到如何将 C++ 连接到汇编程序(请注意 mbed 是 C++)。
关于c - ARM cortex M4 组件闪烁 LED 延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46245191/