c - ARM cortex M4 组件闪烁 LED 延迟

标签 c assembly arm

我现在正在学习用 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/

相关文章:

android - 最适合用于移植 Android 操作系统的基于 ARM 的开发套件

gcc - 如何解决交叉编译中的 crt0.o 链接问题?

c++ - Windows 中的蓝牙中间人保护

iphone - 如何在iPhone应用程序中通过修改图像的像素值来为UIImage添加色调效果

c - 传递给函数的用户定义类型是 C 中的按值调用吗?

objective-c - Objective-C 或 C 语言中这段代码的规则语法是什么?

c++ - 从 ida pro Hook 用户调用函数

assembly - ARM - 如何将汇编代码转换为机器语言

c++ - 全阵列替代

arm - 树莓派 : Embedded Programming Exercise, 入门