Инициализация PWM конструктором класса ( C++ )

Долгое время писал код под МК на С. Друг пишет под МК на С++, посоветовал мне, вот я решил попробовать. Микроконтроллер у меня ATmega88А, IDE Atmel Studio 6.2. Буду использовать 6 апаратных PWM для управления сервоприводами, так как нужно писать 6 одинаковых кусков кода, решил сделать класс Servo:

class Servo
{
private:
        int* pulse_width;  

public:
        Servo(int* PWM_Channel);
        void write(int data);
}; //Servo

через конструктор передаем куда будем писать наше значение, тоесть регистр таймера для управления PWM:

// default constructor
Servo::Servo(int* PWM_Channel)
{
        pulse_width = PWM_Channel;
} //Servo


void Servo:: write(int data)
{
        *pulse_width = data;
}

Используем:

int main(void)
{ 
    Servo servo1(&OCR0A);
    Servo servo2(&OCR0B);
        
    servo1.write(10);
    servo2.write(50);
    
    while(1)
    {
    }
}


Вроде код получился читабельней.

Но вот как быть с инициализацией. Писать просто функцию где будут инициализироваться 3 апаратных таймера как то не по ООП. Добавить в конструктор весь код, будет инициализировать всё 6 раз, тоесть делать то же самое. Как можно сделать чтобы получить независимую инициализацию для каждого обьекта (канала) PWM — если регистры конфигурации разные для каждого таймера?
  • -1
  • 29 октября 2014, 12:18
  • Nemo