将端口另存为静态常量成员
saving a PORT as static const member
如何存储PORT
或DDR
或诸如静态常量的成员?我正在尝试做的是,而不是在我的类标头中使用#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"
这已经适用于其他一些值,但不适用于PORT
和DDR
。
更多信息:端口定义为:
#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
关键字。
相关文章:
- 私有类型的静态常量成员
- constexpr构造函数需要常量成员函数时出现问题
- Clang 格式 10.0 与 5.0 常量成员函数的格式不同
- 为什么"具有常量成员的结构"类型的指针不能指向"具有非常量成员的结构"?
- 常量成员函数中成员变量的类型
- 如何处理运算符=中的常量成员?
- 常量成员和没有setter的私有成员之间有什么区别
- C++:允许临时对象调用非常量成员函数的设计理念是什么?
- 移动具有常量成员的类的构造和分配
- ARM C++编译器不会编译具有可变常量成员的结构
- 强制在编译时计算类的类的常量成员
- 类中常量成员函数的 c++ 链接错误
- 为什么常量成员可以初始化两次?
- 专用常量成员函数的成员检测
- 与其他静态const成员初始化静态常量成员
- 具有静态和常量成员变量的对象
- 结构中的常量成员即使在初始化后也返回 0
- 在非常量成员函数中,为什么点这个非常量,而 decltype 指针这是常量
- 有没有一种通用方法来"unprotect"静态常量成员?
- 如何初始化共享复杂初始化代码的多个常量成员变量?