2015-04-19 1 views
1

Как хранить PORT или DDR или такие как статические константы? То, что я пытаюсь todo, вместо использования #define TEMPERATURE_PORT PORTC внутри моего заголовка класса, я хотел бы сохранить статический член константы с этим значением и инициализировать это внутри параметра settings.h, чтобы все мои значения определялись в одном месте.сохранение ПОРТА как статического константного элемента

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

settings.h, который получает включены последний

const uint8_t Temperatur::m_port = PORTC; 

Это acutally вызывает

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, потому что оно имеет простой расчет? Если да, то как это решить?

+0

Какой тип 'PORTC'? В каком файле вы его присваиваете 'm_port'? –

+0

'PORTC' определяется как' _SFR_IO8 (0x08) 'и я назначаю его' m_port' внутри 'settings.h', который я включаю в основной файл сразу после включения других частей системы. – BennX

ответ

1

Это компилируется нормально для меня:

#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 ключевое слово в назначении.

+0

да правый. Это я пропустил волатильность. Спасибо, что я этого не видел. – BennX

Смежные вопросы