我现在正在学习用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
答案 0 :(得分:0)
您需要重新设计mbed在线IDE的功能'你在评论中提到的。 mbed稍后提供硬件抽象来实现这一目标。例如,here用于M3 DesignStart(这是一个非常简单的SoC,最小的引脚复用,无需担心时钟)。查看添加了对此平台的支持的补丁,以查看代码的范围。
hal非常模块化,因此可以定制以适应各种硬件。不是' Cortex-M4'处理器,但SoC级GPIO和其他外设。您应始终参考您在此方案中使用的特定SoC。
使用GPIO有两个部分。您需要配置引脚和外设。这应该由C ++构造函数完成(所以你可能希望在代码中保留它)。然后,每次访问读取或写入状态通常都是对特定外设的单个内存访问。
您当然可以使用汇编代码调用hal函数,但这听起来像是不必要地转换为如何将C ++与汇编程序接口(请注意mbed是C ++)。