将端口另存为静态常量成员

saving a PORT as static const member

本文关键字:常量 成员 静态 另存为      更新时间:2023-10-16

如何存储PORTDDR或诸如静态常量的成员?我正在尝试做的是,而不是在我的类标头中使用#define TEMPERATURE_PORT PORTC,而是想存储一个具有该值的静态 const 成员,并将其初始化在 settings.h 中,以便将我的所有定义放在一个地方。

class Temperatur
{
private:
    static const volatile uint8_t m_port;
};

设置.h,最后包含

const uint8_t Temperatur::m_port = PORTC;

这直接导致

Error   24  'Temperatur::m_port' cannot be initialized by a non-constant expression when being declared 

我使用分配在设置.h内,该文件紧随该文件之后:

#include "Sensors/Temperatur.h"
#include "Sensors/Microphone.h"
//... some more includes here
//load the static and const settings
#include "settings.h"

这已经适用于其他一些值,但不适用于PORTDDR

更多信息:端口定义为:

#define PORTC _SFR_IO8(0x08)

定义为:

#define _SFR_IO8(io_addr) ((io_addr) + __SFR_OFFSET)

这是一个固定值,因为__SFR_OFFSET被定义为0x00或0x20,具体取决于某个 marko 值。

也许是_SFR_IO8的马克罗的定义,因为它有一个简单的计算?如果是这样,我该如何解决这个问题?

这对我来说编译得很好:

#define __SFR_OFFSET 0x00
#define _SFR_IO8(io_addr) ((io_addr) + __SFR_OFFSET)
#define PORTC _SFR_IO8(0x08)
class Temperatur
{
private:
    static const volatile uint8_t m_port;
};
const volatile uint8_t Temperatur::m_port = PORTC;

我发现您可能缺少的唯一内容是作业中的volatile关键字。