Обсуждаем контроллеры компании Atmel.
Ответить

Re: Нескольно простых вопросов о программировании AVR на Си.

Пн янв 22, 2018 13:00:19

По Сеньке и шапка.
Если задача простая, то и в поллинге (while(IsReady()) ничего плохого нет.

Семен Семеныч! Ну что же Вы так! if(IsReady()) норма. А while(IsReady()) это тупо простаивание пока интерфейс тупит.

с таймерами все просто, главное чтобы выполнение задачи укладывалось между тиками таймеров. Здесь нужен творческий подход. Если задача критическая - нужен жесткий аппаратный таймер с наивысшим приоритетом прерываний (пользуясь случаем, хочу передать привет приоритетам прерываний в 8-битных АВРках (про хмегу я в курсе)).
Если нужно время от времени что-то проверять - то сгодится и софтверный системный таймер. Вот у меня в проектах есть такой, допускающий 7 програмных таймеров (больше пока не требовалось), с приводом от одного аппаратного. На один повесил проверку буфера модбаса, на другой - считывание кнопок, третий пулит машину состояний ацп и готовит/проверяет буффер spi и т.д. В результате главный цикл - пустой.

Re: Нескольно простых вопросов о программировании AVR на Си.

Пн янв 22, 2018 13:01:32

Если задачи однопоточная, то и поллинг сойдёт.

Re: Нескольно простых вопросов о программировании AVR на Си.

Пн янв 22, 2018 13:17:24

Если задачи однопоточная, то и поллинг сойдёт.

не надо приучивать себя к плохому.

Re: Нескольно простых вопросов о программировании AVR на Си.

Пн янв 22, 2018 13:18:34

Не надо плодить сущностей без нужды.

Re: Нескольно простых вопросов о программировании AVR на Си.

Пн янв 22, 2018 13:34:58

Ярослав555 писал(а):А while(IsReady()) это тупо простаивание пока интерфейс тупит.
и что? вот как раз в прерываниях во время этого тупения и надо делать полезную работу, а не выворачивать все наизнанку, добиваясь отсутствия ожиданий. например, ЖКИ 1602 - почти все делают задержки на время, пока контроллер отработает команду, в то время как есть флаг готовности дисплея, и ждать его как раз вполне уместно в тупом цикле.

минус - если ЖКИ сдох, ожидание не кончится, ну так это вопрос другого порядка - можно в том же цикле и таймер контролировать, чтобы таймаут ожидания обработать...

Re: Нескольно простых вопросов о программировании AVR на Си.

Пн янв 22, 2018 16:36:19

Почему-то используя пару библиотек чужих, у меня для того, чтобы вывести переменную на ЖКИ, которая просто по кругу считает до 255 ушло почти 2 кБайта! ДВА!
Похоже на ассемблере у меня это заняло ну байт 700. И то это преувеличено.

Re: Нескольно простых вопросов о программировании AVR на Си.

Пн янв 22, 2018 16:46:09

ARV, нормальные разработчики минимизируют прерывания, а вы наоборот всю полезную работу в прерывания пихаете.

Re: Нескольно простых вопросов о программировании AVR на Си.

Пн янв 22, 2018 16:58:57

Почему-то используя пару библиотек чужих, у меня для того, чтобы вывести переменную на ЖКИ, которая просто по кругу считает до 255 ушло почти 2 кБайта! ДВА!

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

Re: Нескольно простых вопросов о программировании AVR на Си.

Пн янв 22, 2018 19:42:07

ARV, нормальные разработчики минимизируют прерывания, а вы наоборот всю полезную работу в прерывания пихаете.

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

Добавлено after 2 minutes 5 seconds:
Почему-то используя пару библиотек чужих, у меня для того, чтобы вывести переменную на ЖКИ, которая просто по кругу считает до 255 ушло почти 2 кБайта! ДВА!
Похоже на ассемблере у меня это заняло ну байт 700. И то это преувеличено.
что важнее: 2 килобайта или 2 дня вашей жизни?

Re: Нескольно простых вопросов о программировании AVR на Си.

Пн янв 22, 2018 21:17:15

СКАЗОЧНИК писал(а):используя пару библиотек чужих, у меня для того, чтобы вывести переменную на ЖКИ, которая просто по кругу считает до 255 ушло почти 2 кБайта! ДВА!
Похоже на ассемблере у меня это заняло ну байт 700
. Вероятно, эти библиотеки какой-нибудь sprintf() используют, вот и вышло так много. Сейчас интереса ради свою проверил библиотечку (на C) - меньше 550 байтов вышло. Правда, я там схалтурил - бит занятности не проверяю, тупая задержка в 100мкс.

Re: Нескольно простых вопросов о программировании AVR на Си.

Вт янв 23, 2018 03:19:18

ARV, если вы "неформал", так сказать, то это сугубо ваше дело. Все эти "прическа", металлические заклепки, пирсинг. Но вы свой советы даете новичкам. Они и так опрос кнопок не могут освоить, и тут вы еще со своими советами, как пирсинг прокалывать.

Re: Нескольно простых вопросов о программировании AVR на Си.

Вт янв 23, 2018 06:49:28

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

Re: Нескольно простых вопросов о программировании AVR на Си.

Вт янв 23, 2018 08:04:11

ARV, нормальные разработчики минимизируют прерывания, а вы наоборот всю полезную работу в прерывания пихаете.

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


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

Добавлено after 6 minutes 50 seconds:
Почему-то используя пару библиотек чужих, у меня для того, чтобы вывести переменную на ЖКИ, которая просто по кругу считает до 255 ушло почти 2 кБайта! ДВА!
Похоже на ассемблере у меня это заняло ну байт 700. И то это преувеличено.


Давайте разбираться если интересно.

Re: Нескольно простых вопросов о программировании AVR на Си.

Вт янв 23, 2018 08:17:53

Вообще-то интерес есть.
Две библиотеки с сайта ЧипЕнейбл.Ру. Одна для подключения ЖКИ 1602, вторая для вывода на него переменных BCD, т.е. число преобразует в символы, чтобы можно было отобразить.
Обе библиотеки написаны кроссплатформено. (GCC, IAR, CV). Написаны с условной компиляцией (препроцессор что ли называется... :oops: ), где при компиляции выбирается что нужно, то и компилится. Это я в хидерах смотрел.
Сами файлы с расширением .с смотрел частично, ибо втыкать в чужую (даже красивую) писанину еще тяжеленько мне.
Где до меня дошло, там добавил чуток к определению переменных (типа unsigned), а где-то закомментировал. Ну, чтобы Ворнинги не выдавало.
Компилируется нормально, но только один раз. Второй раз выдает ошибку, какую, понять не могу, т.к. АВРСтудия пишет эту ошибку на иероглифах... :dont_know: Только пути показывает к файлам с расширением .о
Если все эти файлы из проекта удалить, то снова компилирует, пока опять не удалишь.
Тем не менее, прошивка в реальный контроллер заливается и работает!

МК у меня АТМЕГА16 в ДИПкорпусе. Протеуса нету. :( Только что переустановил систему и не ставил его еще.
Да, АВРСтудия у меня 4.19

Вот тут взял библиотеку для Дисплея:
http://chipenable.ru/index.php/programm ... oteka.html
Вот тут взял перевод чисел:
http://chipenable.ru/index.php/programm ... 2-bcd.html



Вот архив проекта.
Вложения
KOTEL.7z
(20.38 KiB) Скачиваний: 216
Последний раз редактировалось СКАЗОЧНИК Вт янв 23, 2018 08:28:57, всего редактировалось 1 раз.

Re: Нескольно простых вопросов о программировании AVR на Си.

Вт янв 23, 2018 08:21:41

:kill: :facepalm: :evil: Уродский этот Си с его уродскими библиотеками и объявлениями. Вообще идиотский язык программирования.
Три дня уже пытаюсь дисплей запустить, все почем зря.
Переставишь пару библиотек местами - компилится. Не переставишь - кучу ошибок выдает. Но не так ни так не работает!
Да еще и чтобы что-то применить - надо знать какую библиотеку, где и когда врубить! А еще и во всех нахрен файлах ее прописать. :kill:

Зачем же мне тогда подключать библиотеку с функциями переворачивания байта, библиотеку задержек, прерываний, вводов/выводов, если можно подключить целиком библиотеку работы с дисплеем?
Уже сделал среди кода включения светодиода контрольного, чтобы видеть, где у меня код висит, так он повис у меня в месте ожидания флага готовности дисплея. Тупо. Потому что почему-то у меня этот флаг читаться начинает раньше, чем идет инициализация дисплея. Сверху вниз выполняет все функции и все тут.
А если из инициализации вызывать эти функции, то почему-то заваливает ошибками, что не там и не то объявлено.
Как же должно быть, что подключил библиотеку с дисплеем и все! Забыл! Только выводишь на него буквы и все, не заботясь, как он там этот флаг ждет... :cry:


Ну что тут сказать, учиться и учиться. Для облегчения можете выбрать платформу Arduino.

Re: Нескольно простых вопросов о программировании AVR на Си.

Вт янв 23, 2018 08:39:48

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

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

Re: Нескольно простых вопросов о программировании AVR на Си.

Вт янв 23, 2018 09:56:45

Второй раз выдает ошибку, какую, понять не могу, т.к. АВРСтудия пишет эту ошибку на иероглифах... :dont_know: Только пути показывает к файлам с расширением .о

Скриншот бы тут помог, я так подозреваю.
Вот архив проекта.

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

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

Так говорил ЗаратустраРаботодатель. :-)
Напрягаясь, чаще всего можно только устать. Принцип хорош если он позволяют иметь роскошь тратить основной личный ресурс на "своё здоровье, образование и путешествия".
С битовыми полями-то что решили в итоге?

Re: Нескольно простых вопросов о программировании AVR на Си.

Вт янв 23, 2018 10:08:16

Вот.
Изображение

Да и ассемблерщик из меня никакой. :))) Так, баловался чуток.

Вот Мар файл, и не понятно в нем ниче.
Вложения
KOTEL.7z
(2.12 KiB) Скачиваний: 206

Re: Нескольно простых вопросов о программировании AVR на Си.

Вт янв 23, 2018 10:24:00

Почему-то используя пару библиотек чужих, у меня для того, чтобы вывести переменную на ЖКИ, которая просто по кругу считает до 255 ушло почти 2 кБайта! ДВА!
Похоже на ассемблере у меня это заняло ну байт 700. И то это преувеличено.

2018й на дворе, как бы. Я вот себе прибор на stm32f103 строю. 64к ОПЕРАТИВКИ, флеша точно не помню, что-то около 382к и тактовая ядра 72МГц.
Подключил помимо стандартных HALовских библиотек и принтфы, и векторы, и string-и. Прога только инициализацию 44780 делает и тестовую строчку выводит, а занимает 30к флеша. И как-бы пофиг - флеш скачкообразно возрастает когда либа подключается, когда наращиваешь код с ее использованием - рост намного меньше (если не инлайнить, конечно). Когда будет готова программа, и мне что-то не понравится в структуре - поменять полчаса. А асму сколько надо перепиливать? А всю структуру проекта в голове держать? И сколько проектов в голове удержите? Было у нас такое на фирме, видали уже: добавить паузу в алгоритм - не! Не вазможна! Так и попрощались с гениальным кадром с многолетним опытом.

Re: Нескольно простых вопросов о программировании AVR на Си.

Вт янв 23, 2018 11:08:58

Вот.

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

"Взялся за гуж, не говори, что не груздь!" :-)
Вот Мар файл, и не понятно в нем ниче.

Ну вот, к примеру. Код функций помещается в сегмент .text, первая колонка - адреса, вторая - размер кода:
Код:
[...]
.text           0x00000000      0x7c8
[...]
 *(.text)
 .text          0x00000078        0x4 c:/atmel/bin/../lib/gcc/avr/4.5.1/../../../../avr/lib/avr5/crtm16.o
                0x00000078                __vector_1
[...]
                0x00000078                __vector_20
 .text          0x0000007c       0x70 KOTEL.o
                0x0000007c                main
 .text          0x000000ec      0x26c lcd_lib_2.o
                0x000001d2                LCD_WriteComInit
                0x00000216                LCD_WriteCom
                0x00000236                LCD_WriteData
                0x00000256                LCD_Init
                0x000002cc                LCD_SendStr
                0x000002f4                LCD_SendStrFl
                0x00000312                LCD_SetUserChar
 .text          0x00000358      0x46c bcd.o
                0x00000358                BCD_GetPointerBuf
                0x0000035e                BCD_1
                0x00000370                BCD_2
                0x0000039c                BCD_3
                0x000003e6                BCD_3Int
                0x00000436                BCD_4Int
                0x000004a8                BCD_5Int
                0x0000053c                BCD_Uchar
                0x00000586                BCD_Uint
                0x0000061a                BCD_Ulong
[...]

Итого - функция main - 112 байт, функции работы с дисплеем - 620 байт, функции BCD (работа с бинарно-кодированными десятичными?) - 1132. Т.е. добрая половина кода ушла на косметическую функцию. Причём ни BCD_Uint ни BCD_Ulong у вас не используются? А их вкомпилировало - поищите в настройках проекта опцию типа "каждая функция в свой сегмент" - чтобы линковшик смог выбрасывать не вызываемое. Да и сам мап-файл может быть и поподробнее - с cross-reference и т.п. полезной информацией - вероятно тоже настраивается где-то.
Ответить