Цитата(Make_Pic @ Jun 23 2018, 08:16)

Просится оформить в виде структур
Поскольку в этой Вашей теме нет
запрета на C++, то тут напрашивается использование не структур, а классов, наделенных соотв. функционалом.
Вот конкретный пример из моей библиотеки, в данном случае - аппаратных таймеров.
"Лишнее" вырезано с целью упрощения понимания.
Timer.hpp:
CODE
#pragma once
.....
#include "Include/stm32l1xx.h"
#include "Interrupt.hpp"
.....
namespace stm32l1
{
class TimerBase
{
public:
explicit TimerBase(TIM_TypeDef * registers, Interrupt::Index irqIndex);
virtual ~TimerBase();
void installVector(stm32l1::Interrupt::Vector& vector);
void run();
void stop();
void setPrescaler(uint16_t value);
void setBaseFrequencyHz(uint32_t frequencyHz);
.............
private:
volatile TIM_TypeDef * timer;
uint32_t baseFrequencyHz;
Interrupt interrupt;
.............
};
#ifdef TIM2
class TimerTIM2 : public TimerBase
{
public:
TimerTIM2() : TimerBase(TIM2, TIM2_IRQn) { }
Irq<TIM2_BASE, TIM_DIER_UIE, TIM_SR_UIF> irqUpdate;
...................
};
#endif
#ifdef TIM3
class TimerTIM3 : public TimerBase
{
public:
TimerTIM3() : TimerBase(TIM3, TIM3_IRQn) { }
...................
};
#endif
// и так далее
Если вырезать вообще все лишнее, то вот суть:
Код
class TimerBase
{
public:
TimerBase(TIM_TypeDef * registers); // Вся реализация TimerBase в соотв. cpp файле
}
......
class TimerTIM2 : public TimerBase
{
public:
TimerTIM2() : TimerBase(TIM2) {}
}
На структурах в голом C это тоже возможно, но получится несколько
колхозно что ли, но вполне реализуемо )))