ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Вторник
23 июля
1251157 Топик полностью
Dingo (19.10.2022 07:40, просмотров: 122) ответил Vit на Недавно включал С-файлы в C-файл. Не спрашивайте зачем:)
У меня тоже было, включаемый содержит static const struct и выбор макросом флага прерывания, тактирования, и номера прерывания. Нечто вроде недавно расспрашиваемого мной механизма consteval 
// Timers helper 

struct tmr_x_str { /* Timer descriptor structure. */
	TMR_TypeDef* Timer;
	IRQn_Type IRQn;
	uint32_t tim_clock;
	uint32_t tmr_isr_mask;
};
// Timers list
static const struct tmr_x_str timers[5] = {
		{ TMR0, TMR0_IRQn, (1<<(0+8)), (1<<0)},
		{ TMR1, TMR1_IRQn, (1<<(1+8)), (1<<1)},
		{ TMR2, TMR2_IRQn, (1<<(2+8)), (1<<2)},
		{ TMR3, TMR3_IRQn, (1<<(3+8)), (1<<3)},
		{ TMR4, TMR4_IRQn, (1<<(4+8)), (1<<4)},
};
// Selector IRQ number
#define Tim_Irq(T)  (\
		(T == TMR0) ? timers[0].IRQn :\
		(T == TMR1) ? timers[1].IRQn :\
		(T == TMR2) ? timers[2].IRQn :\
		(T == TMR3) ? timers[3].IRQn :\
				timers[4].IRQn )
// Selector PCLKEN0 bit
#define Tim_ClockEn(T)  (\
		(T == TMR0) ? timers[0].tim_clock :\
		(T == TMR1) ? timers[1].tim_clock :\
		(T == TMR2) ? timers[2].tim_clock :\
		(T == TMR3) ? timers[3].tim_clock :\
				timers[4].tim_clock )
// Selector TMR_ISR mask
#define Tim_MaskISR(T)  (\
		(T == TMR0) ? timers[0].tmr_isr_mask :\
		(T == TMR1) ? timers[1].tmr_isr_mask :\
		(T == TMR2) ? timers[2].tmr_isr_mask :\
		(T == TMR3) ? timers[3].tmr_isr_mask :\
				timers[4].tmr_isr_mask )