gpt4 book ai didi

c - 我拦截对微 Controller 寄存器的调用

转载 作者:行者123 更新时间:2023-11-30 17:31:21 26 4
gpt4 key购买 nike

对 TI MSP430 的嵌入式 C 进行单元测试。单元测试将在使用 GCC 编译的 Linux 主机上运行。该项目相当大,主要是遗留代码。

对 PCIN_L、PCOUT_L 和 PCDIR_L 等寄存器进行读取和写入,编译时会生成错误,表示它们未声明。这是真的,因为在主机上运行时不存在这样的寄存器。
早些时候,我学会了拦截对不可用的函数(符号)的调用,并将这些调用重定向到假函数,仅返回预定义的值。我使用链接器选项 -Wl --wrap,someSymbol 完成此操作。

Makefile:
LDFLAGS=-Wl --wrap,AbsentFunction
SOURCES=WrappedFunctions.c

WrappedFunctions.c:
int __wrap_AbsentFunction(int val_a)
{
return val_a;
}

这会将任何对 AbsentFunction 的调用重定向到 __wrap_AbsentFunction。然而,我也在我的寄存器上尝试过这个,但没有任何运气。

Makefile:
LDFLAGS=-Wl --wrap,PCDIR_L
SOURCES=WrappedSymbols.c

WrappedSymbols.c:
char __wrap_PCDIR_L;

是否有可能像我对函数所做的那样类似于寄存器?我不喜欢在项目代码中引入更改。

最佳答案

您可以通过创建包含以下声明的“假”处理器头来简单地将内存映射处理器外设寄存器声明为 volatile 数据:

extern volatile uint16_t PCDIR_L ;

它们的行为当然不会像外围寄存器,但它将允许构建代码。

更好的方法是构建一个硬件抽象层,以便通过函数 API 进行外设访问,而不是直接访问硬件,然后您可以创建一个模拟硬件行为的“假”API。

关于c - 我拦截对微 Controller 寄存器的调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24656449/

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