ARM cortex M4组件闪烁LED延迟

时间:2017-09-15 17:54:35

标签: c assembly arm

我现在正在学习用c调用程序集。我正在尝试更改我的代码,因此汇编代码永远不会退出并继续闪烁LED,但我无法弄清楚如何做到这一点。我已经尝试将C文件更改为myled =!myled,但这不起作用。

更改delay_asm代码转弯 打开和关闭LED,永远不要退出delay_asm.s子程序。

这是C文件和Assembly。

 #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

1 个答案:

答案 0 :(得分:0)

您需要重新设计mbed在线IDE的功能'你在评论中提到的。 mbed稍后提供硬件抽象来实现这一目标。例如,here用于M3 DesignStart(这是一个非常简单的SoC,最小的引脚复用,无需担心时钟)。查看添加了对此平台的支持的补丁,以查看代码的范围。

hal非常模块化,因此可以定制以适应各种硬件。不是' Cortex-M4'处理器,但SoC级GPIO和其他外设。您应始终参考您在此方案中使用的特定SoC。

使用GPIO有两个部分。您需要配置引脚和外设。这应该由C ++构造函数完成(所以你可能希望在代码中保留它)。然后,每次访问读取或写入状态通常都是对特定外设的单个内存访问。

您当然可以使用汇编代码调用hal函数,但这听起来像是不必要地转换为如何将C ++与汇编程序接口(请注意mbed是C ++)。