不知道是否extern
是处理这种情况的正确方法,但这是我目前尝试的方法。如何在多个文件中定义一个extern函数并指定要使用哪个定义?
我有一个库共享多个项目的通用代码,其中一些库具有不同的引脚配置,必须在库中的_system_pre_init()
函数(由于微处理器行为而被称为main()
之前)期间完成。
例:
boot.cpp
extern void Init(void);
// called prior to main() due to microprocessor behavior
extern "C" int _system_pre_init(void)
{
Init();
return 1;
}
board1.hpp
void Init(void);
board1.cpp
void Init(void)
{
// init specific to board 1
}
board2.hpp
void Init(void);
board2.cpp
void Init(void)
{
// init specific to board 2
}
计划是为了实现libary#包括它需要什么板头的项目,而后者将在定义适当的Init()函数。
的main.cpp
#include "board1.hpp"
int main(int argc, char ** argv)
{
//...
}
但是,它并不像的板头我包括具有超过初始化的()的定义有任何影响。我怎样才能管理这个?或者还有其他一些更适合的范例吗?
它看起来像函数'_system_pre_init(void)'在一个文件中,'main()'在另一个文件中。两个文件是否同时编译允许在编译时指定板类型,或者函数'_system_pre_init(void)'需要在运行时进行初始化决定?什么时候调用'_system_pre_init(void)'而不是'main()'时调用? 'main()'实际上是否需要知道正在使用哪个电路板,或者它可以询问'_system_pre_init(void)'? –
您是否考虑为board1,board2,boardN创建单独的库,并使用唯一适合项目的库? –
主要(或通常是bsp'电路板支持包'的启动代码)必须在硬件上查询某些东西(称之为库存?)以发现代码在哪个板上运行。 OSE和vxWorks都提供了BSP,旨在简化这一过程。你在滚动你自己吗?不管。这是一个典型的鸡与蛋挑战,以获得代码运行在“任一”目标上。大多数设计为在多个配置上运行的代码必须发现该卡的独特之处。通常是一个ROM“库存”,但可能有一张卡有另一个没有的接口。 –