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

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


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

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

Я хочу изучить программирование МК 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 пользователей онлайн

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

    • Как будто это что то плохое?
    • Если переносить то с питанием оптики. В этом плане ТГР проще будет-пару проводов можно кидать хоть на верх, хоть на низ  
    • повторю: у каждого свои приемы и привычки программирования. а зачем - за тем, что вывод идет СТРОГО с равными промежутками времени. и динамическая индикация - это не медленный процесс. а вот с экраном 1602 у меня нет привязки к таймеру - когда подошло время вывести на экран, тогда и вывожу. и клавиатура у меня "медленная", но обработка 3 или 4 раза в секунду и СТРОГО через равные промежутки времени по программному таймеру. я учился, как делать прибор РЕАЛЬНОГО ВРЕМЕНИ на ассемблере, на текстах профессиональных программистов. а твой хаос с отложенными обработками - когда дойдет очередь, тогда и обработаю - меня не устраивает категорически. у меня везде тоже только одно прерывание для аппаратного таймера. и я в этом прерывании делаю ровно столько, сколько мне нужно. остальное делаю по программным таймерам в основном цикле. предлагаю обсуждение своих предпочтений на этом закончить.
    • На данный период Owen вам в помощь, но ищите спеца.
    • Да походу многократный скорострел, кругом сообщение понатыкал (включая гпт чат, бард) и теперь спит в предвкушении подачи на блюдечки.  
    • Да не особо. Сименс, надо признать, такая зараза - уж если запустили нормально, то потом по 10++ лет пашет без особых проблем и вмешательств. А вот новый проект скоро нужно будет делать - вот там придётся познать неизведанные глубины отечественной промышленности. Даже немного жалко, что это всё только проектировать надо и не доведётся запускать.
    • Это одно из лучших решений требует далеко не лучший вариант радиаторов. Его практически невозможно применить для размещения в корпусах от усилителей-доноров, типа серии советских отживших свой век амфитонов, и подобных им. И даже размещая планарную плату, как у вышеназванного парафинна с одной парой в ВК размещение на радиаторе высотой около 100 мм далеко не оптимальный вариант в плане равномерного распределения тепла по нему и рассеивания его в окружающий воздух. У кого есть тепловизор может сам в этом убедиться. Более-менее равномерный прогрев радиатора и сеяние им тепла в окружающую среду происходит, если у него "подошва" толщиной более 8-10мм. А это в свою очередь и излишняя масса корпуса УНЧ.
×
×
  • Создать...