ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
28 апреля
1388924 Топик полностью
VladislavS. (01.01.2024 20:25, просмотров: 137) ответил AlexBi на Можете посоветовать, как осуществить переход от С к С++? Т.е. уже есть куча С-кода, который переписывать на С++ нет ни какого желания. Его надо поддерживать и развивать. Есть ли тут смысл перехода на С++ при добавлении чего-то нового? Про extern "C" я знаю, вопрос в целесообразности добавления ++. Например, есть lwip написанный на С, вам надо сделать http сервер, на базе этого lwip. Будете ли вы писать свою часть на С++? Если да, то сделаете какие-то обертки для функций и
Два примера работы метапрограммы из недавних проектов: 

1. Конфигурирование ножек на AVR. Тут задействовано 9 ног на трёх портах. Класс рассортировал все ножки по портам, добавил к ним те которые остаются неизменными, вычислил значения для регистров DDRx и PORTx и сделал запись только в те которые меняют своё значение относительно начального значения (PORTB он решил не трогать). Одной командой фактически 8*3 ножек задано.



Пример с AVR простенький для понимания происходящего.


Вот посложнее.

2. Конфигурирование ножек на STM32F777. Тут точно так же одной командой конфигурируется 5 портов по 16 ног (56 явно и 34 дефолтными значениями)


Логика примерно та же, но проверок и оптимизаций больше: отсортировать пины по портам, добавить незадействованные пины, вычислить значения регистров GPIO (названия даже помнить не хочу, пусть компилятор этим занимается), в зависимости от режимов определить только необходимые для записать регистры, оптимизировать 8/16/32-битный доступ к регистрам. Ну и записать всё это одним разом без всяких R-M-W. Ни один HAL такого не сделает. Можно повторить ручками, но умумукаешься считатать. А если что поменял - пересчитывай заново. Компилятор же не устаёт и делает это всё за доли секунды. К тому же ещё и ошибки проверит, например, не копипастнул ли я где одну ножку два раза. Листинг результата.