ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
19 июля
1353943 Топик полностью
Cкpипaч, пророк (24.09.2023 13:42 - 14:21, просмотров: 247) ответил AlexG на 1. Книга Christopher Kormanyos. Real-Time C++. Efficient Object-Oriented and Template Microcontroller Programming и примеры к ней. Можно посмотреть на различные возможности языка. Не скажу, что прямо так и надо делать. И вообще не плохо было бы, если бы автор объяснил, зачем он так в примерах извращался и проверил, что все они компилируются.
Да уж. Посмотрел первый пример из книги (мигание светиком) и сел на жопу. Хардкорные манипуляции с контролем типов, за которые лично я бы просто оторвал руки, прямо в конструкторе класса. 

// The LED program.

#include <cstdint>

#include "mcal_reg.h"


class led {


public:

typedef std::uint8_t port_type;

typedef std::uint8_t bval_type;


led(const port_type p, const bval_type b) : port(p), bval(b) {


*reinterpret_cast<volatile bval_type*>(port) &= static_cast<bval_type>(~bval);

const port_type pdir = port - 1U;

*reinterpret_cast<volatile bval_type*>(pdir) |= bval;

}


void toggle() const {


*reinterpret_cast<volatile bval_type*>(port) ^= bval;

}


private:


const port_type port;

const bval_type bval;

};


namespace{


const led led_b5 { mcal::reg::portb, mcal::reg::bval5 };

}


int main(){


for(;;){


led_b5.toggle();

}

}

... но не любой ценой.