По Сеньке и шапка. Если задача простая, то и в поллинге (while(IsReady()) ничего плохого нет.
Семен Семеныч! Ну что же Вы так! if(IsReady()) норма. А while(IsReady()) это тупо простаивание пока интерфейс тупит.
с таймерами все просто, главное чтобы выполнение задачи укладывалось между тиками таймеров. Здесь нужен творческий подход. Если задача критическая - нужен жесткий аппаратный таймер с наивысшим приоритетом прерываний (пользуясь случаем, хочу передать привет приоритетам прерываний в 8-битных АВРках (про хмегу я в курсе)). Если нужно время от времени что-то проверять - то сгодится и софтверный системный таймер. Вот у меня в проектах есть такой, допускающий 7 програмных таймеров (больше пока не требовалось), с приводом от одного аппаратного. На один повесил проверку буфера модбаса, на другой - считывание кнопок, третий пулит машину состояний ацп и готовит/проверяет буффер spi и т.д. В результате главный цикл - пустой.
Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества.
А while(IsReady()) это тупо простаивание пока интерфейс тупит.
и что? вот как раз в прерываниях во время этого тупения и надо делать полезную работу, а не выворачивать все наизнанку, добиваясь отсутствия ожиданий. например, ЖКИ 1602 - почти все делают задержки на время, пока контроллер отработает команду, в то время как есть флаг готовности дисплея, и ждать его как раз вполне уместно в тупом цикле.
минус - если ЖКИ сдох, ожидание не кончится, ну так это вопрос другого порядка - можно в том же цикле и таймер контролировать, чтобы таймаут ожидания обработать...
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Почему-то используя пару библиотек чужих, у меня для того, чтобы вывести переменную на ЖКИ, которая просто по кругу считает до 255 ушло почти 2 кБайта! ДВА! Похоже на ассемблере у меня это заняло ну байт 700. И то это преувеличено.
Почему-то используя пару библиотек чужих, у меня для того, чтобы вывести переменную на ЖКИ, которая просто по кругу считает до 255 ушло почти 2 кБайта! ДВА!
Известное дело - если глянуть в map файл то вполне может оказаться, что килобайта полтора под какой-нибудь sprintf с его форматтерами захапано. Не отчаивайтесь - набьёте руку и всё будет красиво получаться.
_________________ Одновременным нажатием LIGHT и POWER, РП Sangean ATS-909X (ver 1.29) превращается в ATS-909XR!
ARV, нормальные разработчики минимизируют прерывания, а вы наоборот всю полезную работу в прерывания пихаете.
а я не нормальный разработчик. я делаю не для того, чтобы попасть в клан нормальных, а чтобы меньше напрягаться, но достигать нужного эффекта. пока что все объявляемые мною принципы меня никогда не подводили.
Почему-то используя пару библиотек чужих, у меня для того, чтобы вывести переменную на ЖКИ, которая просто по кругу считает до 255 ушло почти 2 кБайта! ДВА! Похоже на ассемблере у меня это заняло ну байт 700. И то это преувеличено.
что важнее: 2 килобайта или 2 дня вашей жизни?
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
используя пару библиотек чужих, у меня для того, чтобы вывести переменную на ЖКИ, которая просто по кругу считает до 255 ушло почти 2 кБайта! ДВА! Похоже на ассемблере у меня это заняло ну байт 700
. Вероятно, эти библиотеки какой-нибудь sprintf() используют, вот и вышло так много. Сейчас интереса ради свою проверил библиотечку (на C) - меньше 550 байтов вышло. Правда, я там схалтурил - бит занятности не проверяю, тупая задержка в 100мкс.
ARV, если вы "неформал", так сказать, то это сугубо ваше дело. Все эти "прическа", металлические заклепки, пирсинг. Но вы свой советы даете новичкам. Они и так опрос кнопок не могут освоить, и тут вы еще со своими советами, как пирсинг прокалывать.
Но вы свой советы даете новичкам. Они и так опрос кнопок не могут освоить, и тут вы еще со своими советами, как пирсинг прокалывать.
я никогда не даю вредных советов. или предупреждаю, что совет вредный, если вдруг приходится таковой давать. всегда во всем придерживаюсь принципа бритвы Оккама: если без чего-то можно обойтись, то без этого нужно обойтись. если задача решается легко и просто "на тупых задержках" - я так и делаю, и советую так делать другим. если задача решается легко "напрерываниях" - снова поступаю так же. и никогда не терзаюсь вопросом, как же "правильно" поступить в том или ином случае - именно так, как я поступаю, так и правильно.
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
ARV, нормальные разработчики минимизируют прерывания, а вы наоборот всю полезную работу в прерывания пихаете.
а я не нормальный разработчик. я делаю не для того, чтобы попасть в клан нормальных, а чтобы меньше напрягаться, но достигать нужного эффекта. пока что все объявляемые мною принципы меня никогда не подводили.
Вам нужно поменять свои принципы, так как они очень плохие и не ведут к успеху. Это иллюзия и оправдание на потраченное время в никуда. Только напрягаясь можно добиться успеха.
Почему-то используя пару библиотек чужих, у меня для того, чтобы вывести переменную на ЖКИ, которая просто по кругу считает до 255 ушло почти 2 кБайта! ДВА! Похоже на ассемблере у меня это заняло ну байт 700. И то это преувеличено.
Давайте разбираться если интересно.
_________________ Инженер R@D
Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
Вообще-то интерес есть. Две библиотеки с сайта ЧипЕнейбл.Ру. Одна для подключения ЖКИ 1602, вторая для вывода на него переменных BCD, т.е. число преобразует в символы, чтобы можно было отобразить. Обе библиотеки написаны кроссплатформено. (GCC, IAR, CV). Написаны с условной компиляцией (препроцессор что ли называется... ), где при компиляции выбирается что нужно, то и компилится. Это я в хидерах смотрел. Сами файлы с расширением .с смотрел частично, ибо втыкать в чужую (даже красивую) писанину еще тяжеленько мне. Где до меня дошло, там добавил чуток к определению переменных (типа unsigned), а где-то закомментировал. Ну, чтобы Ворнинги не выдавало. Компилируется нормально, но только один раз. Второй раз выдает ошибку, какую, понять не могу, т.к. АВРСтудия пишет эту ошибку на иероглифах... Только пути показывает к файлам с расширением .о Если все эти файлы из проекта удалить, то снова компилирует, пока опять не удалишь. Тем не менее, прошивка в реальный контроллер заливается и работает!
МК у меня АТМЕГА16 в ДИПкорпусе. Протеуса нету. Только что переустановил систему и не ставил его еще. Да, АВРСтудия у меня 4.19
:kill: Уродский этот Си с его уродскими библиотеками и объявлениями. Вообще идиотский язык программирования. Три дня уже пытаюсь дисплей запустить, все почем зря. Переставишь пару библиотек местами - компилится. Не переставишь - кучу ошибок выдает. Но не так ни так не работает! Да еще и чтобы что-то применить - надо знать какую библиотеку, где и когда врубить! А еще и во всех нахрен файлах ее прописать.
Зачем же мне тогда подключать библиотеку с функциями переворачивания байта, библиотеку задержек, прерываний, вводов/выводов, если можно подключить целиком библиотеку работы с дисплеем? Уже сделал среди кода включения светодиода контрольного, чтобы видеть, где у меня код висит, так он повис у меня в месте ожидания флага готовности дисплея. Тупо. Потому что почему-то у меня этот флаг читаться начинает раньше, чем идет инициализация дисплея. Сверху вниз выполняет все функции и все тут. А если из инициализации вызывать эти функции, то почему-то заваливает ошибками, что не там и не то объявлено. Как же должно быть, что подключил библиотеку с дисплеем и все! Забыл! Только выводишь на него буквы и все, не заботясь, как он там этот флаг ждет...
Ну что тут сказать, учиться и учиться. Для облегчения можете выбрать платформу Arduino.
_________________ Инженер R@D
Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
Вам нужно поменять свои принципы, так как они очень плохие и не ведут к успеху. Это иллюзия и оправдание на потраченное время в никуда. Только напрягаясь можно добиться успеха.
позвольте поинтересоваться - для чего мне это нужно? я считаю, что вполне себе неплохо применяю на практике свои принципы, и они ведут к вполне осязаемым "успешным" проектам категории хобби. местами и на сторону получается делать - никто не жаловался.
в чем вы видите недостатки моих принципов? возможно, я прислушаюсь к советам по существу, а голословные декларации "правильных принципов" слушать смысла нет.
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
К чёрту подробности - при всяком недовольстве лишним весом идём смотреть map-файл. Если его нету в папочке с промежуточными файлами компиляции, поищите в настройках проекта как его включить - и он появится и всё вам расскажет. Вам, как ассемблерщику, заглянув туда сразу станет понятно кто виноват и как его наказать.
Вам нужно поменять свои принципы, так как они очень плохие и не ведут к успеху. Это иллюзия и оправдание на потраченное время в никуда. Только напрягаясь можно добиться успеха.
Так говорил ЗаратустраРаботодатель. Напрягаясь, чаще всего можно только устать. Принцип хорош если он позволяют иметь роскошь тратить основной личный ресурс на "своё здоровье, образование и путешествия". С битовыми полями-то что решили в итоге?
_________________ Одновременным нажатием LIGHT и POWER, РП Sangean ATS-909X (ver 1.29) превращается в ATS-909XR!
Почему-то используя пару библиотек чужих, у меня для того, чтобы вывести переменную на ЖКИ, которая просто по кругу считает до 255 ушло почти 2 кБайта! ДВА! Похоже на ассемблере у меня это заняло ну байт 700. И то это преувеличено.
2018й на дворе, как бы. Я вот себе прибор на stm32f103 строю. 64к ОПЕРАТИВКИ, флеша точно не помню, что-то около 382к и тактовая ядра 72МГц. Подключил помимо стандартных HALовских библиотек и принтфы, и векторы, и string-и. Прога только инициализацию 44780 делает и тестовую строчку выводит, а занимает 30к флеша. И как-бы пофиг - флеш скачкообразно возрастает когда либа подключается, когда наращиваешь код с ее использованием - рост намного меньше (если не инлайнить, конечно). Когда будет готова программа, и мне что-то не понравится в структуре - поменять полчаса. А асму сколько надо перепиливать? А всю структуру проекта в голове держать? И сколько проектов в голове удержите? Было у нас такое на фирме, видали уже: добавить паузу в алгоритм - не! Не вазможна! Так и попрощались с гениальным кадром с многолетним опытом.
Локализованное (на русский) сообщение операционной системы, я бы сказал. В мейкфайле вызывается некая системная команда. Тут увы мне сказать дальше нечего - вероятно догадается тот, кто ближе общался с этой системой.
Итого - функция main - 112 байт, функции работы с дисплеем - 620 байт, функции BCD (работа с бинарно-кодированными десятичными?) - 1132. Т.е. добрая половина кода ушла на косметическую функцию. Причём ни BCD_Uint ни BCD_Ulong у вас не используются? А их вкомпилировало - поищите в настройках проекта опцию типа "каждая функция в свой сегмент" - чтобы линковшик смог выбрасывать не вызываемое. Да и сам мап-файл может быть и поподробнее - с cross-reference и т.п. полезной информацией - вероятно тоже настраивается где-то.
_________________ Одновременным нажатием LIGHT и POWER, РП Sangean ATS-909X (ver 1.29) превращается в ATS-909XR!
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения