c - GNU ARM 中 get_pc() 的声明在哪里?

标签 c embedded arm gnu-arm

我正在使用 GNUARM C 编译器构建遗留代码并尝试解析函数的所有隐式声明。

我遇到了一些特定于 ARM 的函数,但找不到包含这些函数声明的头文件:

get_pc 
get_cpsr 
get_sp

我在网上搜索了一下,只找到了包含这些函数的源代码,没有任何非标准的包含文件。

我也满足于函数声明。

由于我还将代码移植到 Cygwin/Windows 平台,Cygwin GNU GCC 的等效声明是什么?

谢谢。

最佳答案

如果你真的需要这些功能,就自己写吧,asm 比内联 asm 更容易:

.globl get_pc
get_pc:
    mov r0,pc
    bx lr

.globl get_sp
get_sp:
    mov r0,sp
    bx lr

.globl get_cpsr
get_cpsr:
    mrs r0,cpsr
    bx lr

至少对于 ARM 来说。如果您要移植到 x86 并需要等价物,我不得不想知道这些代码需要什么。特别是 cpsr,您可能必须更改任何使用结果的代码,因为处理器供应商/系列之间的状态寄存器几乎永远不会匹配。 x86 等效项的工作量应该大致相同,与仅编写代码(如果您了解处理器)相比,进行谷歌搜索和阅读结果所需的时间更长。

根据您的应用程序正在执行的操作,最好只注释掉调用这些函数和/或使用返回值的任何代码。我可以想象为什么会使用这些项目的几个原因,但它可能会涉及特定于体系结构的东西,而且这比仅仅移植一些寄存器读取功能更复杂。所以user786653问的是关键问题。这些功能如何使用?不是我在哪里可以找到它们,而是它们是如何使用的以及您认为您为什么需要它们。

关于c - GNU ARM 中 get_pc() 的声明在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7999922/

相关文章:

c - c中的 "argv[' A']"是什么意思?

c - AARCH64 gcc#include <stdint.h> 失败

debugging - 如何在嵌入式 Forth Controller 中查找和更改变量?

c# - 如何最有效地在 C 和 C#(Mono 和 Silverlight)之间共享代码

c - 如何使用 valgrind 查看 c 中函数的堆和堆栈使用情况?

c - 在 C 中使用 ASM 命令

C 数组,向右移动元素未按预期工作

c - 为什么我的编译器不接受 fork(),尽管我包含了 <unistd.h>?

c - 程序从文件读取时显示随机列表数据

c - 为什么语法错误会导致无限循环而不是编译时的 fatal error ?