Вс май 22, 2022 10:57:45
Ну так любую задачу можно разбить на подзадачи.Вот прямо в вашей фразе звучит две отдельных задачи: сконфигурировать, переключать.
GpioA<0xFFFF> pa0_15;
GpioA<0x0FF0> pa4_11;
GpioA<0xFF00> pa8_15;
// pa0_15.clear();
LDR.N R0,??DataTable2_2 // &GPIOA->ODR
MOVS R1,#+0
STR R1,[R0, #+0] // 32 битный доступ в ODR
// pa4_11.clear();
MOV R2,#+4080
STRH R2,[R0, #+6] // 16 битный доступ в старшую часть BSRR
// pa8_15.clear();
MOVS R3,#+0
STRB R3,[R0, #+1] // 8 битный доступ во второй байт ODR
template<uint32_t PM=PinsMask>
static inline void clear()
{
if constexpr (PM == 0xFFFF)
base()->ODR = 0;
else if constexpr (PM == 0x00FF)
*pVU8(&base()->ODR) = 0;
else if constexpr (PM == 0xFF00)
*(pVU8(&base()->ODR) + 1) = 0;
else if constexpr((PM & 0xFF)==0)
*(pVU8(&base()->BSRR)+3) = PM>>8;
else
*(pVU16(&base()->BSRR)+1) = PM;
}
Вс май 22, 2022 11:11:24
using segs = PinList<PC7, PA4, PA10, PB10, PB11, PD3, PB9, PA11>;
using digits = PinList<PC0, PB8, PA3, PC6>;
Semiseg<digits, segs> semiseg;
semiseg.init();
using segs = PinList<PB15, PB14, PB13, PB12, PB11, PB10, PB9, PB8>;
Вс май 22, 2022 11:21:10
Вс май 22, 2022 11:33:34
Вс май 22, 2022 11:34:13
using segs = PinList<PC7, PA4, PA10, PB10, PB11, PD3, PB9, PA11>;
using digits = PinList<PC0, PB8, PA3, PC6>;
segs::write(comAnodeTbl[ch] & ~dot);
digits::write(1 << digit);
Вс май 22, 2022 11:38:39
Вс май 22, 2022 11:42:23
назовите конфигуратором компилятор С++, и проблема решена интерфейс у конфигуратора - текстовый, символами ставится задача, и он генерирует максимально оптимальный код в соответствии с заданием.Reflector писал(а):как аналоги этих двух строк будут выглядеть после отработки хорошего конфигуратора выдающего код в котором не будет ничего лишнего
это верно. только что сделает кубист на небольшое изменение задачи типа "блин, на этот пин нельзя вешать SDA, там светодиод нужен, давай переставим их местами"? я так понимаю, Reflector в своем PinList вместо P1 поставит P22 и посмотрит на кубиста, как на говно...НовыйДень писал(а):Нынче любой "кубист" сделает всё быстрее, а на ваши доводы о лишних тактах презрительно усмехнется и сплюнет
Вс май 22, 2022 11:46:45
Вс май 22, 2022 11:57:01
Вс май 22, 2022 11:59:19
Вс май 22, 2022 12:02:58
Вс май 22, 2022 12:07:18
Вс май 22, 2022 12:12:02
Вс май 22, 2022 12:19:05
Вс май 22, 2022 12:23:22
во-первых, признаюсь: моё предположение, что слежение за контекстом в крови программиста, оказалось ошибочным - ты явно не следишь за контекстом написанного мною.Reflector писал(а):Сравни это, например, со своим любимым впихиванием невпихиваемого в tiny13, что из этого большая глупость?
Вс май 22, 2022 12:36:49
Вс май 22, 2022 12:42:27
Вс май 22, 2022 12:46:44
Вс май 22, 2022 12:57:14
Вс май 22, 2022 13:29:54
template <typename T, size_t SIZE>
struct ENCODE_TABLE
{
template <typename F>
constexpr ENCODE_TABLE(F f) { size_t i{}; for(auto& x:table) x=f(i++); }
constexpr auto operator()(const size_t n) const { return table[n]; }
constexpr auto& operator[](const size_t n) const { return table[n]; }
private:
T table[SIZE]{};
};