【发布时间】:2020-03-26 00:48:43
【问题描述】:
我有一个源文件和头文件:
//boot.h
#define BOOT_DATA_ADDRESS EMBEDDED_ADDRESS
void BootDataReadTable(bootData_t * bootData);
//boot.c
void BootDataReadTable(bootData_t * bootData)
{
uint32_t *userPageBootDataTable = (uint32_t *) (BOOT_DATA_ADDRESS );
uint32_t copiedDataTable[BOOT_DATA_WORDS] = {0U};
for (uint32_t i = 0; i < BOOT_DATA_WORDS; i++)
{
copiedDataTable[i] = userPageBootDataTable[i];
}
unpackBootData(copiedDataTable, bootData);
}
和一个测试文件:
//test_boot.c
#include "bootdata.h"
#ifdef BOOT_DATA_ADDRESS
#undef BOOT_DATA_ADDRESS
#define BOOT_DATA_ADDRESS (stackpointer)
#endif
static uint32_t stack[0x2000] = {0};
static uint32_t * stackpointer = &stack[0];
void test_BootDataReadTable(void)
{
bootData_t lBootData = {0};
BootDataReadTable(&lBootData, (uint32_t *)addr);
//test lBootData
}
此代码在嵌入式平台上运行。 BootDataReadTable 中的内存访问访问 MCU 上的内部闪存。出于单元测试的目的,我想在我的主机上运行它。在test_boot.c 中,我想将BOOT_DATA_ADDRESS 更改为指向我主机上的堆栈区域,以便BootDataReadTable 只访问一些虚拟数据而不是尝试访问内部闪存。
我正在使用ceedling 编译/运行单元测试。
我上面使用的方法不起作用。我在做什么错/如何完成从另一个文件更改 BOOT_DATA_ADDRESS 的值?
【问题讨论】:
-
“不起作用”是什么意思?你期望它做什么? (如果您希望它进入一个可能已经完成的单独编译并以某种方式重新编译它,您认为可以使用什么机制来实现您的目标?)
-
预处理器的东西看起来不错——但是,将
BOOT_DATA_ADDRESS定义为(*stackpointer)看起来有点奇怪。您确定要取消引用吗? (也许只是(stackpointer)??) -
@Adrian Mole 取消引用是一个错字。
-
@rici 我编辑了帖子希望这能解决你的问题
-
@peter:如果你准备重新编译整个项目,这显然是可行的。否则,没有。单独编译就是单独编译。
标签: c embedded c-preprocessor