我正在开发一个新的现有代码库,假设存在v1版本的硬件,则假定文件high_level_feature.cpp完全写入。目前它包含v1 HW寄存器的头文件。
我现在需要添加对v2版本硬件的支持,谁的头文件与v1具有相同的寄存器名称,但是不同的偏移量和地址。
注意:版本是在运行时检测到的,而不是编译时间。
所以很明显我需要更改头文件中的名称以便能够添加两个头文件(v1和v2)并在high_level_feature.cpp中实现该功能,这将支持v1和amp; v2 HW。
有没有更好,更清晰的方法来重构代码并实现它?
谢谢, 基米
答案 0 :(得分:3)
您的逻辑代码不应与硬件耦合。我建议创建一个接口并为HW1和HW2创建实现。由于您的代码将在运行时知道选择正确硬件的版本,因此使用虚拟接口是实现它的方法。
class HwInterface
{
public:
virtual void set_port() = 0;
};
class Hw1 : public HwInterface
{
public:
void set_port() override
{
...
}
};
class Hw2 : public HwInterface
{
public:
void set_port() override
{
...
}
};
class Logic
{
public:
void do_something(HwInterface& hw)
{
hw.set_port();
}
};
void run(int version)
{
Logic logic;
if (version == 1) {
Hw1 hw1;
logic.do_something(hw1);
}
else {
Hw2 hw2;
logic.do_something(hw2);
}
}