Пишем программы для радио-электроники-электротехники и...

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Пишем программы для радио-электроники-электротехники и..

Сообщение ARV »

Starichok51 писал(а):я давно делал себе такую программу, но потом за ненадобностью проект удалил.
у меня там было создание "надписи" сразу для 4-х разрядов.
:))) я когда-то прямо на Си для AVR писал программку, которая любой текст выводила на 7-сегментник. разумеется, только те символы, которые более-менее адекватно могли быть отображены, а вместо неотображаемых выводились пробелы.
то есть можно было прямо так и писать
printf("NULL"); и на индикаторе появлялось "nuLL"
или
printf("ПРИВЕТ!"); и на индикаторе появлялось "ПРUВЕ 1."
:)))

количество семисегментников не лимитировалось (делал бегущую строку при необходимости). при желании можно было одну букву заменять двумя или тремя символами на индикаторе, например, вместо Ж выводить "НН" или вместо М "П7"

и никакой редактор не нужен :)
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
BlackKilkennyCat
Собутыльник Кота
Сообщения: 2905
Зарегистрирован: Ср ноя 29, 2017 06:58:50

Re: Пишем программы для радио-электроники-электротехники и..

Сообщение BlackKilkennyCat »

[uquote="ARV",url="/forum/viewtopic.php?p=3827296#p3827296"]и никакой редактор не нужен :)[/uquote]
Ну это иной (хороший) метод. Однако, он иногда может напомнить историю про нехватку одного байта. И не избавляет от переделки кода, если вдруг пришлось изменить очередность битов ;)
Меня здесь больше нет
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Пишем программы для радио-электроники-электротехники и..

Сообщение ARV »

Клин клином вышибают: чтобы избавиться от одного гемора надо поиметь другой :)))
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Trully
Встал на лапы
Сообщения: 118
Зарегистрирован: Вс авг 18, 2019 13:22:01

Re: Пишем программы для радио-электроники-электротехники и..

Сообщение Trully »

Для семисегментных там несложно то, вот это то точно руками пишется, причем один единственный раз. Все остальное - это забота процедуры вывода.
to be or not to be = -1
BlackKilkennyCat
Собутыльник Кота
Сообщения: 2905
Зарегистрирован: Ср ноя 29, 2017 06:58:50

Re: Пишем программы для радио-электроники-электротехники и..

Сообщение BlackKilkennyCat »

Сегодня подключу напрямую к мк так, завтра эдак, послезавтра к двум сдвиг. регистрам, причём трассировка вынудит смешать всё в кашу, а через неделю у меня будет 20 разрядов, соответственно, немного поменяется логика дин. индикации.
У Вас есть однократно, единственный раз что-то написанное, удовлетворяющее этому, с заботливой процедурой вывода, и притом нераздутое?
Поделитесь, пожалуйста. Надеюсь, оно корректно отработает на всех компиляторах всех производителей и не сожрет ни одного байта больше необходимого.
Хотя, возможно, я чего-то не понимаю... тогда разъясните подробней, пожалуйста.
Меня здесь больше нет
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Пишем программы для радио-электроники-электротехники и..

Сообщение ARV »

BlackKilkennyCat писал(а):У Вас есть ...
так и ваша программа не решает этих проблем.
ваша программа может быть хороша именно, как редактор пользовательского знакогенератора. все остальное - это благие намерения, которым, по моему мнению, не суждено сбыться.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Trully
Встал на лапы
Сообщения: 118
Зарегистрирован: Вс авг 18, 2019 13:22:01

Re: Пишем программы для радио-электроники-электротехники и..

Сообщение Trully »

Законы программирования то как раз гласят, что смена платформы (или даже распиновки выводов) должна затрагивать как можно меньше модулей. Это называется "ортогональное программирование". То есть, когда изменения в одном модуле не влияют на целостность остальных модулей. В идеале. В жизни, конечно, не всегда. Но надо стремиться к тому, чтобы внесение изменений в одном месте как можно меньше заставляло изменять всё остальное.
Конкретно здесь - изменение распиновки выводов или числа разрядов не должно заставлять переписывать знакогенератор.
С одной стороны - производительность микроконтроллера, с другой стороны - производительность труда программиста. И чем мощнее микроконтроллер и чем сложнее программа, тем важнее становится производительность труда программиста.
А если хотите сохранить и производительность микроконтроллера, и производительность своего труда, тогда вы должны написать автогенератор кода, который исходя из заданных условий, будет генерировать готовый модуль или несколько модулей со всеми изменениями, которые вы потом подключаете к проекту.

Почитайте книжку "Программист-прагматик", авторы Э.Хант, Д.Томас. В инете найти её несложно.
В книжке много полезного можно подчерпнуть. Не всё, конечно, но если отфильтровать, приспособить к конкретному применению для эмбедда.
to be or not to be = -1
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Пишем программы для радио-электроники-электротехники и..

Сообщение ARV »

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

Мой уютный бложик... заходите!
BlackKilkennyCat
Собутыльник Кота
Сообщения: 2905
Зарегистрирован: Ср ноя 29, 2017 06:58:50

Re: Пишем программы для радио-электроники-электротехники и..

Сообщение BlackKilkennyCat »

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

Добавлено after 3 minutes 5 seconds:
[uquote="ARV",url="/forum/viewtopic.php?p=3827550#p3827550"]все остальное - это благие намерения, которым, по моему мнению, не суждено сбыться.[/uquote]
скорее всего да, к сожалению... иначе бы уже было готово )) но всё же попробую. К тому же, это всё-таки практика, а то давно безработный как программист, забываю всё.
Последний раз редактировалось BlackKilkennyCat Ср апр 15, 2020 10:43:50, всего редактировалось 2 раза.
Меня здесь больше нет
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Пишем программы для радио-электроники-электротехники и..

Сообщение ARV »

BlackKilkennyCat писал(а):но всё же попробую
хотя бы намекните, как ваша программа будет узнавать о том, что на индикатор должна выводить программа МК?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
BlackKilkennyCat
Собутыльник Кота
Сообщения: 2905
Зарегистрирован: Ср ноя 29, 2017 06:58:50

Re: Пишем программы для радио-электроники-электротехники и..

Сообщение BlackKilkennyCat »

Ну, я предполагаю создание некоего языка и среды, примерно как у ПЛК, с возможностью создания правил трансляции во что угодно в дальнейшем.
Меня здесь больше нет
Trully
Встал на лапы
Сообщения: 118
Зарегистрирован: Вс авг 18, 2019 13:22:01

Re: Пишем программы для радио-электроники-электротехники и..

Сообщение Trully »

Да, книга требует перевода на обывательский язык, хотя написана она на довольно простом жизненном языке. Я бы даже сказал, что чрезмерно жизненном,ибо слишком много "примеров из жизни". Но это особенность иностранного мышления.

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

Пример, с которым, думаю, вам сложно будет несогласиться:

Код: Выделить всё

#define COEFF   5
.....
result1 = COEFF * a + b / COEFF;
result2 = c + a * COEFF / b + result1;
Пример постулата "не повторяй себя" (не создавать дубликатов), он же пример ортогональност:

Код: Выделить всё

void Print_to_7segLED(char *str, int num)
{
/* текст функции вывода */
}
........

/* где-то в коде */
Print_to_7segLED("1234", 4);

/* где-то в другом месте кода */
Print_to_7segLED("5678", 4);
Сложно не согласиться с тем, что изменение содержания функции вывода не затрагивает остального кода. И сложно не заметить, что такой способ дает значительную экономию в размере получаемого кода. В противовес тому, если бы вместо вызова функции вписывать текст функции напямую во все места


Ортогональность - это термин из математики (геометрии). Ортогональная система координат. Когда точка перемещается вдоль одной оси, по второй ортогональной оси точка остается неподвижной.
Суть ортогонального программирования - изменение в одной функции не затрагивают другие функции. Ничего раздутого в этом нет. Даже наоборот. В вышеприведенном примере функция Print_to_7segLED написана один раз. Этим мы сэкономили размер проги. Так? Так. Мы затрачиваем некоторое время на вызов функции и передачу в нее аргументов. Но зато мы получаем гораздо больше - наша система ортогональна и компактна по размеру. И если вдруг надо чето поменять внутри функции Print_to_7segLED, мы это сделаем ОДИН РАЗ и в одном месте. Вместо того, чтобы вносить правки везде, где у нас в коде есть вывод в индикатор. Правильно? Или вы с этим НЕ согласны?
to be or not to be = -1
BlackKilkennyCat
Собутыльник Кота
Сообщения: 2905
Зарегистрирован: Ср ноя 29, 2017 06:58:50

Re: Пишем программы для радио-электроники-электротехники и..

Сообщение BlackKilkennyCat »

Утверждение, что функция написана один раз и тем самым экономит размер программы - оно неверно без уточнений количества (и способов) вызовов функции.
Приведенный пример на самом деле - пример процедурного программирования, а не ортогональности. Если же это всё-таки ортогональность, то я ортогонально программирую уже лет 30 :))) Прошу прощение за такое хвастливое заявление о стаже, но надеюсь, оно исключит дальнейшие объяснения очевидного. Например того, что с учётом сильно развитых сред разработки нет никаких проблем внесения изменения в кучу мест кода, которые могут быть как и одинаковыми, так и индивидуальными, что позволит в какой-то степени сделать подобие ООП там, где его нет и ускорить выполнение кода там, где оно необходимо, сохранив при этом видимость "ортогональности".

Но вообще, приведенный пример - это другая опера.
Я - про удобный инструментарий создания Вашей void Print_to_7segLED(char *str, int num) для любой платформы, языка, вкуса и т.д.
А Вы про что? Про то, что ее гораздо удобнее написать один раз без инструментария?
Меня здесь больше нет
Trully
Встал на лапы
Сообщения: 118
Зарегистрирован: Вс авг 18, 2019 13:22:01

Re: Пишем программы для радио-электроники-электротехники и..

Сообщение Trully »

Боюсь, что вы сильно не поняли тему. Ну а имея 30-летний опыт, можно было уже научиться мыслить "по-взрослому" и понимать даже книги для профессионалов.

[uquote="BlackKilkennyCat",url="/forum/viewtopic.php?p=3827692#p3827692"]Однократного написанного, значит, всё-так нет.
.[/uquote]
Однократно написанное? Для семисегментника? Да есть, чеж нету то. Причем, вы сами за 10 минут это можете написать:
- создайте массив байтов, по байту на каждый символ, а биты будут определять сегменты, причем в порядке возрастания, и без привязки к конкретной распиновке. segA - бит 0, segB - бит 1, и т.д.
- напишите функцию вывода в порт, которая будет брать каждый бит из массива и, сопоставляя его с текущей распиновкой, направлять на конкретный выход, зажигая или гася сегмент.
Вот это будет программирование "по-взрослому". В данном случае экономии ресурсов микроконтроллера нет. Но зато вы ускорили свою работу, как программиста. И не стоит так уж обесценивать свой труд. Никогда не обесценивайте свой труд, иначе вас перестанут ценить. Иной раз смотришь - ну что там в приборе, деталек то тьфу, на тыщщу рублей. А цена - огого.
Ну а если хотите и того, и другого - пишите автогенератор кода, который по введенным параметрам будет генерировать готовый кусок кода вместе с выводом в порт. Экономичный и быстрый. И вам легко будет менять распиновку или платформу.
to be or not to be = -1
BlackKilkennyCat
Собутыльник Кота
Сообщения: 2905
Зарегистрирован: Ср ноя 29, 2017 06:58:50

Re: Пишем программы для радио-электроники-электротехники и..

Сообщение BlackKilkennyCat »

Я всё-же снова рискну предложить не объяснять очевидного. К тому же Вы опять объяснили лишь частный случай. "Читая книги для профессионалов" ;) можно было бы прочитать, что обесценивание труда программиста нигде не упоминалось.
пишите автогенератор кода, который по введенным параметрам будет генерировать готовый кусок кода вместе с выводом в порт.
Эту мысль я пытался донести с самого начала.
Меня здесь больше нет
Trully
Встал на лапы
Сообщения: 118
Зарегистрирован: Вс авг 18, 2019 13:22:01

Re: Пишем программы для радио-электроники-электротехники и..

Сообщение Trully »

[uquote="BlackKilkennyCat",url="/forum/viewtopic.php?p=3827744#p3827744"]. Если же это всё-таки ортогональность, то я ортогонально программирую уже лет 30 :))) ?[/uquote]
Навряд ли, навряд ли. Просто не хотел приводить огромные портянки кода для более удачных примеров. Надеялся, что вы поймете и без лишних слов. Приведенный пример следовало читать в том ключе (и я это написал словами), что изменение функции вывода не затрагивает ничего другого. Ничего больше не надо переписывать.
Эту мысль я пытался донести с самого начала.
Автогенератор. А не симулятор. Вы должны написать автогенератор, генрирующий код программы для программиста, а не симулятор "чтобы показать заказчику".
to be or not to be = -1
BlackKilkennyCat
Собутыльник Кота
Сообщения: 2905
Зарегистрирован: Ср ноя 29, 2017 06:58:50

Re: Пишем программы для радио-электроники-электротехники и..

Сообщение BlackKilkennyCat »

Ну я так и предполагал, что просто не смог донести мысль. Но и "симуляция" там есть, поскольку удобно и... красиво :)) Но без лишнего извращения: симулируется лишь отображение, а не вообще логика чипа.
Отображение преследовало еще одну цель: дизайнерскую. Чтобы можно было экспортировать изображение и вставить его дизайн панели устройства.
Меня здесь больше нет
Аватара пользователя
Starichok51
Модератор
Сообщения: 19043
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Re: Пишем программы для радио-электроники-электротехники и..

Сообщение Starichok51 »

во, блин, сколько уже успели понаписать меньше, чем за сутки.

сделал я обещанную программу.
накидал файл помощи.
помощь можно вызвать из меню программы, а можно прямо почитать файл ReadMe.txt.
чтобы не было тут лишних вопросов и чтобы мне не писать долго комментарии, скопирую сюда помощь.

Помощь:

1. Переключателями "Общий анод" и "Общий катод" выбираем схему индикатора.
При изменении выбора схемы индикатора автоматически пересчитываются числа символов.

2. В выпадающих списках для каждого бита выбираем сегмент, соответствующий этому биту согласно разводки печатной платы.
При изменении любого бита автоматически пересчитываются числа символов.

3. Левой кнопкой мыши "зажигаем" нужные сегменты индикатора.
Левой же кнопкой мыши "гасим" ненужные сегменты индикатора.

4. В окне программы имеются два поля результатов.
Слева поле для ассемблера. Признаком ассемблерной записи служат символы ".db".
Справа поле для языка Си. Признаком служат фигурные скобки для инициализации массива чисел.

5. После создания всех символов просто выделяем и копируем нужный результат из поля этого результата и вставляем в исходный текст программы.

6. Порядок следования чисел в результате начинает с самого старшего (самого левого) разряда индикатора.

7. Если нужно создать меньше четырех символов, то следует их создавать, начиная со старшего разряда. Тогда будет удобно копировать результат, отбросив справа ненужные последние байты.

8. При выходе из программы программа сохраняет все сделанные настройки и созданные символы в файле Segmets.ini.
При запуске программа загружает всю информацию из файла Segmets.ini, и показывает результаты последней работы с программой.

мне думается, что предусмотрел всё, чтобы не дорабатывать программу.
но от полезных предложений я не откажусь.
Вложения
4x7-Segmets.zip
(158.64 КБ) 170 скачиваний
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
BlackKilkennyCat
Собутыльник Кота
Сообщения: 2905
Зарегистрирован: Ср ноя 29, 2017 06:58:50

Re: Пишем программы для радио-электроники-электротехники и..

Сообщение BlackKilkennyCat »

Starichok51, Спасибо!
Предложение есть расширить до 16 бит. точнее, сделать два варианта: классика с 8 бит и для извращенцев с 16 :)
Предположим, управляю и сегментами и общими через два сдвиговых регистра (у меня еще и останется несколько выходов, на какие-нить дискретные светодиодики), то удобная трассировка может не дать гарантии непрерывной последовательности битов-сегментов.
Меня здесь больше нет
Аватара пользователя
Starichok51
Модератор
Сообщения: 19043
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Re: Пишем программы для радио-электроники-электротехники и..

Сообщение Starichok51 »

и какие это 8 битов я должен добавить для 4 разрядов? шутить изволишь?
ты уже сам не в состоянии гонять единичку по кругу?
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Ответить

Вернуться в «Разные вопросы по МК»