如何重构代码以支持多个版本的硬件?

时间:2018-01-22 23:58:25

标签: c++ embedded refactoring software-design

我正在开发一个新的现有代码库,假设存在v1版本的硬件,则假定文件high_level_feature.cpp完全写入。目前它包含v1 HW寄存器的头文件。

我现在需要添加对v2版本硬件的支持,谁的头文件与v1具有相同的寄存器名称,但是不同的偏移量和地址。

注意:版本是在运行时检测到的,而不是编译时间。

所以很明显我需要更改头文件中的名称以便能够添加两个头文件(v1和v2)并在high_level_feature.cpp中实现该功能,这将支持v1和amp; v2 HW。

有没有更好,更清晰的方法来重构代码并实现它?

谢谢, 基米

1 个答案:

答案 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);
  }
}