标签: arm

Cortex R5 - 启动代码

cortex r5 处理器的启动文件和链接器文件中应包含哪些内容?重置处理器后我们需要遵循哪些具体步骤?(特定于 cortex r5)知道如何为 Arm 的 GNU-GCC 执行此操作吗?

谢谢!

c embedded gcc arm gnu

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

嵌套ARM Thumb2"IT"指令是否定义明确?

如果我有一个ARM Thumb 2指令流,如下所示:

itt NZ
mov r1,r2
it MI
mov r3,r4
Run Code Online (Sandbox Code Playgroud)

第一个IT指令的IT块包含mov第二个IT指令it.这个序列是允许的,还是未定义的行为?

assembly arm thumb

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

微控制器(esp32)使用x86还是arm,我可以在这些MCU中安装Linux

我正在进入微控制器,所以我想知道像esp32和esp8266这样的微控制器和其他同类产品是基于x86还是arm架构?我尝试在互联网上搜索,但没有得到足够的线索

如果它使用这两种架构中的任何一种,是否有机会在这些控制器中安装Linux,我想到了这一点,因为freeRTOS说它是微控制器的操作系统,我认为它不是

但不知何故,如果它是一个操作系统,那么像Linux这样的其他操作系统呢,他们今天有机会安装在MCU中吗?或者甚至在未来五年内他们有机会吗?

microcontroller x86 operating-system arm xtensa

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

使用C的嵌入式应用程序中的time()函数问题

time()在ARM微控制器上使用。达到此功能后,处理器将重新启动。

奇怪的是,当我处于调试模式时,代码可以完美运行,但是当我想以独立方式应用它时,就会遇到重置。

我在俯视什么吗?是否可以代替此功能?

代码部分是这样的

#include <sys/time.h>
#include <stdio.h>

void main (void)
{

   static time_t  rawtime = 0;

   rawtime = time (NULL);
}
Run Code Online (Sandbox Code Playgroud)

c embedded time arm

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

ARM处理器如何区分负数和正数?

让我们考虑一个8位处理器来简化我的问题。我知道-2被存储为其2的补码,即0b1111_1110,该数据块的小数表示为254,对吗?现在,我的问题是,由于ARM处理器的二进制表示形式相同,因此它们将如何区分“ -2”和“ 254”?

我尝试查找整个互联网,每个人都在不断解释处理器如何存储负数。我需要知道的是它们是如何区分的。

c embedded arm processor firmware

-1
推荐指数
2
解决办法
164
查看次数

为什么16位指令不能访问通用寄存器的高位寄存器

所以现在我读了《ARM Cortex-M3/M4 权威指南》一书,无法理解为什么 16 位指令无法访问高级通用寄存器 R8-R12。

它说实际上很少有人可以访问这些寄存器,但大多数不能。

assembly arm instruction-set cpu-registers thumb

-1
推荐指数
2
解决办法
188
查看次数

分支偏移超出范围。用于打印最多 N 的素数的 ARM 汇编程序,其中 N 是用户输入

我的主要源文件:

L0  LDR R0, =prompt
    BL WriteString  ;print prompt
    BL ReadInt      ;R0 = n
    CMP R0, #0
    BGE L1 
    LDR R0, =res0       ; invalid input
    BL  WriteString
    B   L0
    
L1  MOV R1, #2
L2  UDIV    R2, R0, R1
    MLS R2, R1, R2, R0
    CBZ R2, L3
    BL WriteInt
    ADD R1, #1
    CMP R1, R0
    BLT L2

L3  SUB R0, #1
    CBZ R0, L0    ;Error: A1176E: Branch offset 0xFFFFFFC8 out of range.  
    B   L1

prompt  DCB "Enter a positive integer: ", …
Run Code Online (Sandbox Code Playgroud)

assembly arm cortex-m

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

“ldr pc, _boot”和“b _boot”有什么区别?

我正在检查 ARM Cortex A9 的向量表,并偶然发现了两种类型的指令:

B_boot

LDR PC,_boot

有人可以向我解释一下使用 B 或 LDR 的区别吗?两个代码应该做同样的事情,但显然一定有区别。和链接寄存器有关系吗?

谢谢你的时间!

assembly arm

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

ARM 与 RISC 以及 x86 与 CISC

通过一些研究,我意识到 ARM 和 RISC 几乎可以互换使用,x86 和 CISC 也是如此。我理解RISC和CISC是架构。我的理解是,架构(即 RISC 或 CISC)是一种指令集,进程必须能够执行这些指令才能成为这些架构之一。例如,RISC-V 有一个它可以执行的指令列表,CISC 有一个它可以执行的指令列表。要成为 RISC 或 CISC,处理器必须能够执行特定的指令列表之一。但是,我不明白ARM和RISC以及x86和CISC分别有什么区别。ARM和x86不也是架构吗?我经常读到“ARM 架构”或“x86 架构”。感谢您为我澄清这一点。

x86 arm cpu-architecture risc

-1
推荐指数
2
解决办法
2479
查看次数

ARM 编译器的未优化行为

在我的源代码中,我看到了arm编译器的奇怪行为,它对字符串进行了冗余迭代,这是不必要的。我在这里展示了一个最小的例子来说明这一点,并在下面提出我的问题

#include <string.h>
#define MIN(x, y) (((x) < (y)) ? (x) : (y))

int MAX_FILE_NAME = 2500;
int F(char *file){
    int file_len = MIN(strlen(file), MAX_FILE_NAME - 1);
    return file_len;
}
int main(void) {
    F(__FILE__);
    return 0 ;
}
Run Code Online (Sandbox Code Playgroud)

编译为:

arm-none-eabi-gcc -nostdlib -Xlinker -Map="m7_experiments.map" -Xlinker --cref -Xlinker --gc-sections -Xlinker -print-memory-usage -mcpu=cortex-m7 -mfpu=fpv5-sp-d16 -mfloat-abi=hard -mthumb -T "m7_experiments_Debug.ld" -o "m7_experiments.axf"  ./src/cr_startup_cm7.o ./src/crp.o ./src/flashconfig.o ./src/m7_experiments.o   

Run Code Online (Sandbox Code Playgroud)

导致:

Dump of assembler code for function F:
   0x00000104 <+0>:     push    {r4, lr}
   0x00000106 <+2>:     mov     r4, r0
   0x00000108 …
Run Code Online (Sandbox Code Playgroud)

c assembly arm

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