针对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;
是否有可能像我对函数那样对寄存器进行类似的操作?我不想在项目代码中引入更改。
答案 0 :(得分:0)
MSP430器件的寄存器名称均在器件特定的头文件中声明。虽然您不一定能够轻易模仿这些寄存器的行为,但您可以编写自己的等效文件,将寄存器映射到程序可访问的存储器位置。
模仿端口寄存器,串口状态寄存器和其余部分的按位功能将是一项艰巨的任务。
答案 1 :(得分:0)
您可以通过创建包含声明的“假”处理器头来简单地将内存映射处理器外设寄存器声明为易失性数据:
extern volatile uint16_t PCDIR_L ;
它们当然不会像外设寄存器那样,但它可以构建代码。
更好的方法是构建硬件抽象层,以便外围访问是通过功能API而不是直接访问硬件,然后您可以创建一个模仿硬件行为的“虚假”API。