将 PORT 保存为静态常量成员
saving a PORT as static const member
如何存储 PORT
或 DDR
或静态常量成员?
我想做的是,而不是在我的 class header 中使用 #define TEMPERATURE_PORT PORTC
我想存储一个具有该值的静态常量成员并在 [=41= 中初始化它] 将我所有的定义放在一个地方。
class Temperatur
{
private:
static const volatile uint8_t m_port;
};
settings.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)
这是一个固定值,因为 __SFR_OFFSET 根据某些标记值定义为 0x00 或 0x20。
它可能是 _SFR_IO8
的 makro 的定义,因为它有一个简单的计算?如果是这样我该如何解决?
这对我来说编译得很好:
#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
关键字。
如何存储 PORT
或 DDR
或静态常量成员?
我想做的是,而不是在我的 class header 中使用 #define TEMPERATURE_PORT PORTC
我想存储一个具有该值的静态常量成员并在 [=41= 中初始化它] 将我所有的定义放在一个地方。
class Temperatur
{
private:
static const volatile uint8_t m_port;
};
settings.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)
这是一个固定值,因为 __SFR_OFFSET 根据某些标记值定义为 0x00 或 0x20。
它可能是 _SFR_IO8
的 makro 的定义,因为它有一个简单的计算?如果是这样我该如何解决?
这对我来说编译得很好:
#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
关键字。