标签: arm

ARM 汇编函数有问题吗?

我有一个用 ARM 汇编器编写的简单函数。第一次运行时,一切都按预期工作(打印BOOT\n)。然而,第二次执行该函数时,没有打印任何内容。

.globl __printTest
.text
.align 2

__printTest:
 sub sp, #64 /* yes, I know this is too much */

 mov r0, #66
 str r0, [sp]
 mov r0, #79
 str r0, [sp, #1]
 mov r0, #79
 str r0, [sp, #2]
 mov r0, #84
 str r0, [sp, #3]
 mov r0, #10
 str r0, [sp, #4]

 mov r0, #0
 mov r1, sp
 mov r2, #5

 bl _write
 add sp, #64

 bx lr
Run Code Online (Sandbox Code Playgroud)

可能是什么问题?我怀疑这不知何故搞砸了缓冲区,使它不再起作用。Write是一个write使用指令调用Linux上系统调用的函数svc

linux assembly arm

1
推荐指数
1
解决办法
514
查看次数

NEON 如何处理溢出?

我想知道 Neon 如何处理溢出。例如:

uint8x8_t vadd_u8 (uint8x8_t, uint8x8_t)
Run Code Online (Sandbox Code Playgroud)

据我了解,这是 2 个向量的加法(每个向量有 8 个无符号字节元素)。假设两个向量的所有值都是 255。

在这种情况下我们应该期待什么结果?8 元素向量 (510,...510) 还是其他向量?

arm overflow neon

1
推荐指数
1
解决办法
673
查看次数

适用于 ARM Cortex M3 (SAM3N4X) 的简单任务调度程序

在过去的两天里,我一直在为上述 ARM Cortex M3 寻找一个简单的调度程序,尽管我找到了一些 RTOS 解决方案,但我没有找到独立的任务调度程序。

我不需要任何太花哨的东西,因为我的应用程序不一定需要它,但它将有助于产品的未来证明(不要激怒最后这句话,我很清楚它的问题)。

编辑:

正如@Clifford 所建议的,我不太清楚简单是什么意思。我想说它的代码非常少,并且不会消耗太多 SRAM。

embedded arm rtos

1
推荐指数
1
解决办法
3424
查看次数

arm-none-eabi-as 和 ARM 注释符号 ';'

我必须问它......它已经让我发疯好几天了。选择arm-none-eabi作为工具链后,我的生活变成了一场噩梦,原因很简单-arm-none-eabi-as将每条评论视为指令,而且有时它只是不理解ARM汇编器抛出奇特的错误,例如“AREA 是一条错误的指令”...

这是我从 keil 文档中复制并粘贴的代码:

AREA     Loadcon, CODE, READONLY
    ENTRY                              ; Mark first instruction to execute
start
    BL       func1                     ; Branch to first subroutine
    BL       func2                     ; Branch to second subroutine
stop
    MOV      r0, #0x18                 ; angel_SWIreason_ReportException
    LDR      r1, =0x20026              ; ADP_Stopped_ApplicationExit
    SVC      #0x123456                 ; ARM semihosting (formerly SWI)
func1
    LDR      r0, =42                   ; => MOV R0, #42
    LDR      r1, =0x55555555           ; => LDR R1, [PC, #offset to
                                       ; Literal Pool 1]
    LDR      r2, =0xFFFFFFFF           ; => MVN R2, #0 …
Run Code Online (Sandbox Code Playgroud)

assembly arm

1
推荐指数
1
解决办法
4190
查看次数

ldrex / strex如何使ARM中的atomic_add成为原子操作?

根据http://lxr.free-electrons.com/source/arch/arm/include/asm/atomic.h#L31

 static inline void atomic_add(int i, atomic_t *v)
 41 {
 42         unsigned long tmp;
 43         int result;
 44 
 45         prefetchw(&v->counter);
 46         __asm__ __volatile__("@ atomic_add\n"
 47 "1:     ldrex   %0, [%3]\n"
 48 "       add     %0, %0, %4\n"
 49 "       strex   %1, %0, [%3]\n"
 50 "       teq     %1, #0\n"
 51 "       bne     1b"
 52         : "=&r" (result), "=&r" (tmp), "+Qo" (v->counter)
 53         : "r" (&v->counter), "Ir" (i)
 54         : "cc");
 55 }
Run Code Online (Sandbox Code Playgroud)

可以抢占,怎么能叫“原子”呢?

arm atomic inline-assembly linux-kernel load-link-store-conditional

1
推荐指数
1
解决办法
3384
查看次数

在 C 程序的日志语句中自动插入文件名和行号

我正在用C 语言编写嵌入式 ARM 处理器的程序。我想在日志语句中查看源文件名和行号。

由于编译的代码不了解行号和源文件,因此我正在寻找在编译过程之前/期间自动插入的方法。

是否有任何标准工具或编译器功能可供我使用?

我正在使用海湾合作委员会。

例如:

这就是我要在源文件中写入的内容:

log("<#filename#> <#linenumber#> : Hello World");
Run Code Online (Sandbox Code Playgroud)

这是实际编译的内容:

log("Foobar.c 225 : Hello World");
Run Code Online (Sandbox Code Playgroud)

c debugging gcc arm c-preprocessor

1
推荐指数
1
解决办法
1423
查看次数

在 JDK8 for Arm 中找不到 JavaFX

我在我的 beaglebone black 上下载并安装了适用于 ARM 的 JDK8u33,并且根据此文档(http://docs.oracle.com/javase/8/embedded/jdk-arm-8u6/index.html)包含并支持 javafx。

但是,我在 JRE 或 JDK 中找不到 jfxrt.jar,并且在简单的 javafx 程序上使用 javac 生成的“javafx.application”不是一个包。

是什么赋予了?

arm javafx java-8 beagleboneblack

1
推荐指数
1
解决办法
4389
查看次数

从 ARM 汇编到 C 的函数调用的参数传递约定

我有一个 C 代码,它调用 ARM Assembly 中定义的函数。必须传递两个参数。

如果函数调用如下所示:

functionName(a, b)
Run Code Online (Sandbox Code Playgroud)

寄存器x0并按x1什么顺序保存这些值?是x0一直持有a还是一直x1持有b,还是相反?

c assembly arm parameter-passing

1
推荐指数
1
解决办法
4237
查看次数

如何在不同的操作系统和体系结构上运行相同的汇编程序?

这是一个简单的 NASM 64 位 linux 汇编程序:

_exit:
    mov rax, 60
    mov rdi, 0
    syscall
Run Code Online (Sandbox Code Playgroud)

我的电脑是 AMD(x86_64 64 位),我知道这个汇编程序也可以在 INTEL 64 位处理器上运行。

但我有以下这些问题!

  • 该程序是否可以在具有MIPS 64 位ARM 64 位架构的( linux ) 计算机上运行?
  • 当汇编代码使用不同的操作系统时,是否只有系统调用发生变化?

64-bit assembly arm x86-64 nasm

1
推荐指数
1
解决办法
76
查看次数

汇编ARM中堆栈指针和帧指针有什么区别

我想知道是否有人可以向我解释汇编 ARM 中堆栈指针和帧指针之间的区别

assembly arm stack-frame stack-pointer

1
推荐指数
1
解决办法
100
查看次数