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

C++ 将端口另存为静态常量成员,c++,static,avr,static-members,avr-gcc,C++,Static,Avr,Static Members,Avr Gcc,如何存储端口或DDR或静态常量成员? 我想做的是,我不想在我的类头中使用#define TEMPERATURE\u PORT PORTC,而是存储一个具有该值的静态常量成员,并在settings.h中对其进行初始化,以便将我的所有定义放在一个位置 class Temperatur { private: static const volatile uint8_t m_port; }; 设置。h最后包括哪个 const uint8_t Temperatur::m_port = PORTC;

如何存储
端口
DDR
或静态常量成员? 我想做的是,我不想在我的类头中使用
#define TEMPERATURE\u PORT PORTC
,而是存储一个具有该值的静态常量成员,并在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 

我使用的赋值在settings.h中,该文件后面会包括:

#include "Sensors/Temperatur.h"
#include "Sensors/Microphone.h"
//... some more includes here
//load the static and const settings
#include "settings.h"
这已经适用于某些其他值,但不适用于
PORT
DDR

更多信息: 端口定义为:

#define PORTC _SFR_IO8(0x08)
#define _SFR_IO8(io_addr) ((io_addr) + __SFR_OFFSET)
定义为:

#define PORTC _SFR_IO8(0x08)
#define _SFR_IO8(io_addr) ((io_addr) + __SFR_OFFSET)
这是一个固定值,因为uu SFR_偏移量定义为0x00或0x20,这取决于一些marko值


是不是因为makro的计算很简单,所以它可能是对
\u SFR\u 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
关键字。

什么类型的
PORTC
?您在哪个文件中将其分配给
m\u端口
PORTC
定义为
\u SFR\u IO8(0x08)
,我将其分配给
m\u端口
中的
settings.h
,在包含系统的其他部分之后,我立即将其包含在主文件中。是的。就是这样,我错过了这场比赛。谢谢你,我没看见。