gpt4 book ai didi

c - 如何获取C语言中的asm变量值?

转载 作者:行者123 更新时间:2023-11-30 16:23:17 25 4
gpt4 key购买 nike

现在我正在尝试了解 CM3 固件代码。但特别是我发现一些代码是由 asm 代码编写的,如下所示, asm code

// Uart string output 
void UartPuts(unsigned char * mytext)
{
unsigned char CurrChar;
do {
CurrChar = *mytext;
if (CurrChar != (char) 0x0) {
UartPutc(CurrChar); // Normal data
}
*mytext++;
} while (CurrChar != 0);
return;
}
#if defined ( __CC_ARM )
/* ARM RVDS or Keil MDK */
__asm void FlashLoader_ASM(void)
{
MOVS R0,#0
LDR R1,[R0] ; Get initial MSP value
MOV SP, R1
LDR R1,[R0, #4] ; Get initial PC value
BX R1
}

我想使用UartPuts函数打印MSP值和PC值。

您能指导我如何打印它吗?

最佳答案

一种方式(气体语法):

.thumb_func
.globl GET32
GET32:
ldr r0,[r0]
bx lr

extern unsigned int GET32 ( unsigned int );
unsigned int x;
...
x = GET32(0x00000000);
...
x = GET32(0x00000004);

另一种不需要汇编的方法:

#define ZERO (*((volatile unsigned int *)0x00000000))
#define FOUR (*((volatile unsigned int *)0x00000004))
...
unsigned int x;
...
x = ZERO;
...
x = FOUR;

如果您有 stdint.h 或等效文件,则可以使用 uint32_t 代替 unsigned int。 (对于 gcc 和 clang/llvm 将产生 unsigned int)。

源自您的代码/语法

__asm uint32_t read_zero(void)
{
MOVS R0,#0
LDR R0,[R0]
BX LR
}

__asm uint32_t read_four(void)
{
MOVS R0,#4
LDR R0,[R0]
BX LR
}

关于c - 如何获取C语言中的asm变量值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54041413/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com