如何隐藏类中的寄存器地址

时间:2014-12-16 08:29:05

标签: c++ driver cpu-registers

我正在创建一个驱动程序,并且已经在我的类的头文件中声明了我的寄存器。

private:

static const uint32_t REG1 = (0x00000000);
static const uint32_t REG2 = (0x00000004);
static const uint32_t REG3 = (0x00000008);
static const uint32_t REG4 = (0x0000000c);
static const uint32_t REG5 = (0x00000010);
// etc ...

然后在我的.cpp中,我做到了这一点:

const uint32_t Class::REG1;
const uint32_t Class::REG2;
const uint32_t Class::REG3;
const uint32_t Class::REG4;
const uint32_t Class::REG5;

有人告诉我,我需要隐藏寄存器值,不要将它们放入标题中。哪种方式最佳?

2 个答案:

答案 0 :(得分:5)

一种方法是将它们放在类的源文件中的匿名命名空间中,将它们从标题(和类)中完全删除:

namespace /*no name mean it's an anonymous namespace*/ {
    const uint32_t REG1 = ( 0x00000000);
    /*etc*/
}

我放弃了static以及不再需要它。

这样,只能从特定的编译单元访问它们。

答案 1 :(得分:1)

您始终可以在实现源中初始化常量。

标题:

private:

    static const uint32_t REG1;
    static const uint32_t REG2;
    static const uint32_t REG3;
    static const uint32_t REG4;
    static const uint32_t REG5;

实施cpp:

const uint32_t Class::REG1 = (0x00000000);
const uint32_t Class::REG2 = (0x00000004);
const uint32_t Class::REG3 = (0x00000008);
const uint32_t Class::REG4 = (0x0000000c);
const uint32_t Class::REG5 = (0x00000010);

这样常量仍然是类的静态成员,值在实现部分中。这样,如果类实现在几个编译单元中分开,你仍然可以使用它们而不在header事件中定义值。

相关问题