Assembly Emblocks或Keil中的内联臂装配功能

Assembly Emblocks或Keil中的内联臂装配功能,assembly,arm,microcontroller,keil,Assembly,Arm,Microcontroller,Keil,对于STM32F429微控制器,如何在Emblocks或Keil中编写内嵌ARM汇编函数 这应该适用于: 我不知道EmBlocks,但IAR和GCC允许像asm或_asmmov x,y这样的内联指令。更多参数可以指定寄存器、输入和输出 这是我在IAR EWARM中ATSAM4L Cortex-M4的代码: __no_init uint reset_addr; __no_init uint reset_reta; __no_init uint reset_hfs; __no_init uint r

对于STM32F429微控制器,如何在Emblocks或Keil中编写内嵌ARM汇编函数

这应该适用于:

我不知道EmBlocks,但IAR和GCC允许像asm或_asmmov x,y这样的内联指令。更多参数可以指定寄存器、输入和输出

这是我在IAR EWARM中ATSAM4L Cortex-M4的代码:

__no_init uint reset_addr;
__no_init uint reset_reta;
__no_init uint reset_hfs;
__no_init uint reset_cfs;

extern "C" {

void HardFault(uint* stack);
__noreturn void HardFault_Handler() {
//  tst lr, #4
//  ite eq
//  mrseq r0,MSP
//  mrsne r0,PSP
    asm volatile ("MRS r0,MSP\nB HardFault"); }

void HardFault(uint* stack) {
    enum { r0, r1, r2, r3, r12, lr, pc, psr};
    reset_hfs = scb->hfs;   // fetch
    scb->hfs = reset_hfs;   // clear
    reset_cfs = scb->cfs;
    reset_addr = 0; reset_reta = 0;
    if(reset_hfs&SCB::FORCED) {
        reset_addr = stack[pc];
        reset_reta = stack[lr]; }
//  asm volatile ("BKPT 1");
    scb->softres();
}

我已经放弃为内联程序集寻找解决方案。即使我找到了纯汇编的解决方案,我也会很高兴。s/.asm我在Keil的页面上读到了一个解决方案,它不好,但我几乎每周都在工作。我有一个问题,它不承认德康斯坦斯像2

以下是一个例子:

AREA     ARMex, CODE, READONLY
                                ; Name this block of code ARMex
        ENTRY                   ; Mark first instruction to execute
start
        MOV      r0, #10        ; Set up parameters
        MOV      r1, #3
        ADD      r0, r0, r1     ; r0 = r0 + r1
stop
        MOV      r0, #0x18      ; angel_SWIreason_ReportException
        LDR      r1, =0x20026   ; ADP_Stopped_ApplicationExit
        SVC      #0x123456      ; ARM semihosting (formerly SWI)
        END                     ; Mark end of file

这不是一个答案,但我没有写在注释中,因为我想把代码格式化好。

这不是编译器手册中描述的吗?谢谢你的帮助,我已经在本文档中找到了结果。谢谢@你能分享一下你的发现吗?这里明确鼓励回答自己的问题;asm指令;不幸的是,它不起作用。它将寄存器识别为一个简单变量,而不识别constans(例如2)。我在Keil中发现:Use GCC Project->Manage->Components,Environment,Books->Folders/Extensions我选择Use GCC,我给出了一个正确的路径和前缀,但它不起作用,我得到错误消息:无法执行arm none eabias'我尝试过这个,因为我在GCC编译器中也使用EmBmocks,并且内嵌的arm程序集在那里工作得很好。但我需要知道我应该如何在Keil中使用它。太糟糕了。我在C51中使用Keil,但没有使用内联汇编,而是使用.asm文件。试试这个链接:10?还是0x18?我有一些关于Keil的老项目,但是对于C51,它使用了例如07FH应该像你发布的那样工作:我在每一行中都得到了这个,我尝试了10 0x10 new。s9:错误:A1859E:这个指令的标志保留形式不可用,如果我不写,那么这也是问题。
AREA     ARMex, CODE, READONLY
                                ; Name this block of code ARMex
        ENTRY                   ; Mark first instruction to execute
start
        MOV      r0, #10        ; Set up parameters
        MOV      r1, #3
        ADD      r0, r0, r1     ; r0 = r0 + r1
stop
        MOV      r0, #0x18      ; angel_SWIreason_ReportException
        LDR      r1, =0x20026   ; ADP_Stopped_ApplicationExit
        SVC      #0x123456      ; ARM semihosting (formerly SWI)
        END                     ; Mark end of file