繁体   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