Перейти к содержанию

Минимизация кода на СИ


Рекомендуемые сообщения

Здравствуйте. 

Я хочу изучить программирование МК AVR. 

Читаю и изучаю. 

Вот набросал такой кодик, просто для самообучения. 

Смысл простой. 

К каждой из кнопок привязан светодиод. 

При нажатии кнопки загорается светодиод.  При повторном нажатии он гаснет. 

Всё просто.  Но смущает что, такая простая задача и такой огромный код. 

Подскажите какие нибудь приёмчики для минимализации кода.  Спасибо.  Не судите строго. 

Снимок экрана 2022-02-11 081519.jpg

Снимок экрана 2022-02-11 084155.png

Снимок экрана 2022-02-11 084301.png

Снимок экрана 2022-02-11 084401.png

Снимок экрана 2022-02-11 084502.png

Снимок экрана 2022-02-11 084603.png

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

Очень много лишнего, все можно в один цикл вместить, оптимизируйте повторяющиеся части, сделайте один таймер для всех. Напрягите мозг, ничего сложного.

Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

3 часа назад, LS shilov 10 сказал:

Подскажите какие нибудь приёмчики для минимализации кода

порт кнопок можно полностью за один раз опрашивать 

Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Ну, во первых, длинный листинг еще не значит "огромный код". Как раз кода там, для 32к флеша, совсем немного.

Вот читабельность - да, так себе.

Вариант 1(работает - не трогай). Вынести весь этот фрагмент в include файл и не париться. Все работает ка и раньше, код не поменялся, читабельность ++

Вариант 2(хочется помучиться). Выделить общее, обмозговать, написать процедуру для кнопки, придумать передачу параметров и прочее. Текст станет читабельнее, код - скорее всего - такой же, возможно даже увеличится(за счет передачи параметров)

Вариант 3(идти вперед). Задуматься - а что собсно может делать эта программа кроме кнопок, крутя задержки по delay()? Задуматься насчет прерывания таймера(да, в ардуине это не совсем запросто, но можно)

Ведь для чего, собсно, существует ардуина? Всунуть готовый скетч - охренеть от того что все работает - это первая часть. Вторая - научиться что-то в готовых скетчах менять. Ну и потом третья - задуматься - а почему digitalWrite работает раз в двадцать медленнее чем просто в пин записать?

Да, до третьего дойдет хорошо один из ста. А больше и не надо :)

Ссылка на комментарий
Поделиться на другие сайты

15 часов назад, LS shilov 10 сказал:

Подскажите какие нибудь приёмчики для минимализации кода. 

У вас 2 функции:    "Кнопки", и  "Лампочки".  "Кнопки" читает порт и пишет в переменную сигнал - напримр  порядковый номер нажатой кнопки. "Лампочки", используя ту переменную читает из массива маску для инвертирования нужного бита порта, после обнуляет переменную.  "Кнопки" дергать раз в 10 мСек по таймеру. 

 

Переменную объявить глобальной.

Ссылка на комментарий
Поделиться на другие сайты

14 часов назад, nml сказал:

Вариант 3(идти вперед). Задуматься - а что собсно может делать эта программа кроме кнопок, крутя задержки по delay()? Задуматься насчет прерывания таймера(да, в ардуине это не совсем запросто, но можно)

Ведь для чего, собсно, существует ардуина? Всунуть готовый скетч - охренеть от того что все работает - это первая часть. Вторая - научиться что-то в готовых скетчах менять. Ну и потом третья - задуматься - а почему digitalWrite работает раз в двадцать медленнее чем просто в пин записать?

А при чем здесь ардуина?
Человек пишет на сях (и правильно делает), напрямую работает с регистрами. Вы, простите, где ардуину тут откопали?

Ссылка на комментарий
Поделиться на другие сайты

51 минуту назад, LiVit сказал:

А при чем здесь ардуина?
 

Виноват.

Просто меня тут  весь вечер человек напрягал по ардуине, пришлось самому разбираться и ему объяснять... видать, по инерции :(

Ссылка на комментарий
Поделиться на другие сайты

Минимизировать нужно не код, а результат компиляции. А в коде - чем наглядней тем лучше, причём минимум строк кода это не цель программирования. Исходник - для человека. Вот вы в исходник добавите всего одну строчку, с умножением вещественного числа - программа пополнится всего на одну строчку, а прошивка потяжелеет на пару килобайт - вот именно об этом надо беспокоится.

Учение - изучение правил. Опыт - изучение исключений.

Ссылка на комментарий
Поделиться на другие сайты

7 часов назад, Alexeyslav сказал:

 программа пополнится всего на одну строчку, а прошивка потяжелеет на пару килобайт - вот именно об этом надо беспокоится.

Не так актуально на текущий момент.
Ну вот "кончилась память" в моём STM32F030R8, так я взял STM32F030C8 и всё.
А понятность кода очень важна, если вы пишете коммерческую прошивку, которую потом придется поддерживать.
Я видел кучу кода, который был не то что недокументирован, даже комментариев нормальных не было. И автор, собака, уже уволился.

Так что, стремление к уменьшению размера прошивки не всегда оправдано. 
И если уж стоит такая задача, то лучше писать сразу на ассемблере

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы публикуете как гость. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...