我有一些使用 NEON 内在函数的 C++ 代码。根据我所读到的内容,您所需要做的就是将arm_neon.h包含到您的项目中。然后我读到这个arm_neon.h标头实际上并不容易自动供您使用,您必须从网络上获取它。所以我找到了这个版本并将其添加到我的项目中:
http://clang.llvm.org/doxygen/arm__neon_8h-source.html
在我的项目的 prefix.pch 中我添加了:
#import "arm_neon.h"
Run Code Online (Sandbox Code Playgroud)
当我尝试在 iPhone6 设备上构建时(我没有使用模拟器),我在arm_neon.h 文件中遇到了十亿个错误:
谁能向我解释一下我在这里缺少什么吗?
我们是否可以配置运行在 intel x64 架构上的 gcc 来为 ARM 芯片生成二进制文件,只需将一些标志传递给 gcc,而不使用交叉编译器。
我正在尝试获取 argv 的内容并显示它们。
该程序将被称为像./main 5 6 7.
r0 = argc
r1 = argv[0]
r2 = argv[1]
该程序可以正确获取命令行参数的数量,但使用 r1 并打印字符串时效果不同。它打印根据参数数量变化的随机字符。
.text
.global main
.extern printf
main:
push {ip, lr}
mov r1, r0
ldr r0, =string
bl printf
pop {ip, pc}
.data
string: .asciz "Argc: %d\n"
Run Code Online (Sandbox Code Playgroud)
参数:
.text
.global main
.extern printf
main:
push {ip, lr}
mov r1, r2
ldr r0, =string
bl printf
pop {ip, pc}
.data
string: .asciz "Argv: %s\n"
Run Code Online (Sandbox Code Playgroud) 我正在为 ARM 控制器开发 Keil 编译器并用 C 语言编写代码。我遇到了这个警告,我收到了这个:
warning : passing 'char [7]' to parameter of type 'unsigned char *'converts between pointers to integer types with different sign.
Run Code Online (Sandbox Code Playgroud)
常规 :
void WriteString(unsigned char *Msg_add)
{
for(Lcd_pointer=0; Lcd_pointer < 16; Lcd_pointer++)
{
Write_lcd_data(*Msg_add);
Msg_add++;
if(*Msg_add == '\0')
break;
}
}
Run Code Online (Sandbox Code Playgroud)
我用随机字符串传递上面的例程:
WriteString("Token:");
Run Code Online (Sandbox Code Playgroud)
顺便说一下,这些功能是有效的,但我收到了这个警告。如何去除?
我正在尝试在具有 PMU 支持的 aria10 fpga 板(带有 2 个 ARM Cortex A9 CPU)上分析我的用户空间程序。我正在运行 windriver linux 版本 9.x。我使用人们在互联网上建议的几乎所有 CONFIG_ 选项构建了我的内核。另外,我的 pgm 是使用 \xe2\x80\x93fno-omit-frame-pointer 和 \xe2\x80\x93g 选项编译的。
\n\n我看到的是 \xe2\x80\x98perf record\xe2\x80\x99 根本不生成任何样本。\xe2\x80\x98perf stat true\xe2\x80\x99 输出看起来是有效的(不知道从中可以得到什么)。有人有建议/想法为什么我没有看到生成任何样本吗?
\n\n~: perf record --call-graph dwarf -- my_app\n\n^C\n[ perf record: Woken up 1 times to write data ]\n[ perf record: Captured and wrote 0.003 MB perf.data ]\n\n~: perf report -g graph --no-children\nError:\nThe perf.data file has no samples!\n To display the perf.data header info, please use --header/--header-only options.\n\n~: perf …Run Code Online (Sandbox Code Playgroud) 我有一个 ARM 二进制文件和一些汇编代码。从二进制读取反汇编
1e40 -> subs r0,r0,#1
汇编代码中的指令读起来是一样的。(代码使用.syntax unified指令)
但是,当我使用 GNU AS(来自 ARM 2017 Q4 的 gcc 工具链)时,它会评估
subs r0,r0,#1到
3801-> subs r0,#1
使用 objdump
我想这两个可能是相同的,但是我仍然想知道是否有一种方法可以选择第一个操作码而不是第二个操作码的生成,因为我相信这会导致我正在使用的设备出现问题。
我有一个关于 ARM 64 寄存器的问题。\n X0代表function argument passing和function return value。是X30. function return address\n 有两个代码片段:
一个是cpp:
\n\nvoid test(void* arg) {}\nRun Code Online (Sandbox Code Playgroud)\n\n另一个是汇编代码:
\n\nmov x3 ,x4\n......\nret \nRun Code Online (Sandbox Code Playgroud)\n\n现在我假设X30存储函数的地址test 并存X0储值0xfffffff
当执行完ret指令后,pc会取出 的值,X30即 的地址test。所以程序将运行到函数test。 \n我的问题是 的值是否arg将被设置为0xffffff,如果不是,我如何将值从我的汇编代码传递到arm 64平台中的函数test\xe2\x80\x99参数?arg
谢谢大家。
\n我已经学习 C 几个月了,现在我开始更深入地研究较低级语言 - ARM 汇编,因此,我决定从一个非常基本的项目开始,制作一个汇编文件 .S,它定义了阶乘函数,然后在C中调用使用它。所以我想问是否可以用汇编来定义这么复杂的函数,并可以用作C中的另一个函数?如果您不介意,请给我一个 .S 文件的简单示例,其中函数从标准输入 num1 和 num2 加载 2 个数字到寄存器,计算 num1*num2 并返回结果已定义并可在 C 源代码中使用文件?
感谢您的阅读。如果这个问题很愚蠢,至少请给我一个方向,以便我可以自己跟踪并找出答案。
我知道这个问题之前已经被问过,很抱歉再次询问,但我不知道如何解决它。在程序开始时,我尝试将二进制值 101000110000100110000 移动到 R0 中,但收到错误消息“错误:修复后无效常量 (146130)”
.global _start
_start:
mov R0,#0b101000110000100110000
bl correct16
mov R7,#1
svc 0
correct16:
push {R1-R10}
Run Code Online (Sandbox Code Playgroud)
我真的不明白为什么要这样做或如何修复它,因为我以前从未遇到过此错误。
我最近购买了 STM32 NUCLEO 开发套件,想知道实际的嵌入式系统工程师在开发产品时是否会在行业中使用它?
我正在使用 Kiel Uvision 5、STMCubeMX 和 STM32 ST-LINK Utility 来开发某些项目。由于我习惯使用 PIC 和 PORTA、OSCCON、TIMER0 等寄存器,我看到 Kiel Uvision 5 使用现成的函数,如 HAL_GPIO_TogglePin(.........) 等。这是他们通常的做法吗这是在工业中还是更直接地与寄存器一起工作?