Я ж говорю - это до тех пор, пока вы не пишите ничего сложнее дергания ног на слабеньком микроконтроллереAQ29 писал(а): Пт июл 31, 2026 22:06:30 Эти записи, на мой взгляд, проще и нагляднее, чем на СИ. Насчёт того, что СИ проще и компактнее – вопрос.
Но чем сложнее задачи и "железо", тем больше требований к возможностям языка программирования. Бывает, что даже чистый Си не справляется, приходится брать его продвинутую версию - С++.
Вот например сравнительно несложный, но показательный пример:
Код: Выделить всё
Layer1::Window::Configure(
start, end,
LayerPF::RGB888,
layer.getBuf(),
layer.getSize().x);
То есть, показанная выше функция имеет внутри себя вложенные функции:
Код: Выделить всё
static bool Configure(const PixCoord& start, const PixCoord& end,
LayerPF pf, uint32_t bufAddress, uint16_t linePitch)
{
if(Window::SetPosition(start, end) == false ||
Buffer::Configure(pf, linePitch, end - start + (PixCoord){1, 1}) == false)
return false;
Buffer::SetAddress(bufAddress);
return true;
}
Код: Выделить всё
static bool SetPosition(PixCoord start, PixCoord end)
{
PixCoord firstVisiblePixel = Ltdc::Scan::GetFirstVisiblePixel();
start += firstVisiblePixel;
end += firstVisiblePixel;
if(end < start || end > Ltdc::Scan::GetLastVisiblePixel())
return false;
lay->WHPCR = ((start.x << LTDC_LxWHPCR_WHSTPOS_Pos) & LTDC_LxWHPCR_WHSTPOS_Msk) |
((end.x << LTDC_LxWHPCR_WHSPPOS_Pos) & LTDC_LxWHPCR_WHSPPOS_Msk);
lay->WVPCR = ((start.y << LTDC_LxWVPCR_WVSTPOS_Pos) & LTDC_LxWVPCR_WVSTPOS_Msk) |
((end.y << LTDC_LxWVPCR_WVSPPOS_Pos) & LTDC_LxWVPCR_WVSPPOS_Msk);
return true;
}
Код: Выделить всё
static PixCoord GetFirstVisiblePixel()
{
return {(uint16_t)(((LTDC->BPCR & LTDC_BPCR_AHBP_Msk) >> LTDC_BPCR_AHBP_Pos) + 1),
(uint16_t)(((LTDC->BPCR & LTDC_BPCR_AVBP_Msk) >> LTDC_BPCR_AVBP_Pos) + 1)};
}
Вооот, а вы говорите, что нагляднее пины дергать на макроассеблере и присваивать V = A. Попробуйте хотябы что-то подобное, и наглядность макроассемблера быстро превратится в крутозамешанную кашу.
А на языке С/С++ вот мне пофик, какие инструкции и как там используются. Компилятор сам их подберет в соответствии с настройками компиляции и оптимизации. Это его задача и пусть он делает свою работу. А я делаю свою, более высокую работу.


