Comments 78
Могу посоветовать реализовать IrDA (только нижиний протокол естественно). Из обвязки — только светодиод.
Когда игрался с тиньками было очень удобно. Правда нужен приемник который имеет инфракрасный порт и умеет к нему обращаться на низком уровне.
Я использовал ПДА-ку HP2210. Никаких плясок с проводами и преобразованием уровней. И логи можно посмотреть в любом сарае (или в машине, когда я ODB-I диагностику пытался ковырять).
Если кому интересно могу выложить исходники.
А вообще 13 тинька была хороша лет 8 назад. Сейчас за те-же деньги есть контороллеры с кучей готовых интерфейсов.
Когда игрался с тиньками было очень удобно. Правда нужен приемник который имеет инфракрасный порт и умеет к нему обращаться на низком уровне.
Я использовал ПДА-ку HP2210. Никаких плясок с проводами и преобразованием уровней. И логи можно посмотреть в любом сарае (или в машине, когда я ODB-I диагностику пытался ковырять).
Если кому интересно могу выложить исходники.
А вообще 13 тинька была хороша лет 8 назад. Сейчас за те-же деньги есть контороллеры с кучей готовых интерфейсов.
Ну не Atmel же. А вообще, мне все равно интересно. Когда-то нужно вылезать из зоны комфорта и завязывать с Atmel. Можно названия?
Мне тоже атмел нравится, крайний раз игрался с разными вариантами atmega8 (48,88, и тп), но времени мало, давно не глядел чего у них есть нового.
По той-же причине не сильно в курсе про других производителей, но вот, например, что бытро нашлось в поиске:
www.mouser.com/ProductDetail/Freescale-Semiconductor/MC9S08QG4CFQE/?qs=ATe30Cu2%2Ft4gtg2g9GwdXQ%3D%3D
По той-же причине не сильно в курсе про других производителей, но вот, например, что бытро нашлось в поиске:
www.mouser.com/ProductDetail/Freescale-Semiconductor/MC9S08QG4CFQE/?qs=ATe30Cu2%2Ft4gtg2g9GwdXQ%3D%3D
STM8S003F3P6. 67руб в том же чипдипе от 3-х штук. Аппаратный UART, SPI, I2C, ADC, несколько таймеров, 20 ног, 8КБ памяти под код, 1КБ оперативной.
STM32F030F4P6 (TSSOP20)
Производитель: STMicroelectronics
Ядро: ARM Cortex M0
Ширина шины данных: 32 bit
Максимальная тактовая частота: 48 MHz
Размер программной памяти: 16 kB
Размер ОЗУ данных: 4 kB
Разрядность АЦП: 12 bit
Рабочее напряжение питания: 2.4 V to 3.6 V
Рабочая температура: — 40… + 85 C
Доступные аналоговые/цифровые каналы: 16
Торговая марка: STMicroelectronics
Тип ОЗУ данных: SRAM
Тип интерфейса: I2C, SPI
Количество входов/выходов: 15 I/O
Количество таймеров: 5 Timer
Тип памяти программ: Flash
66 рублей (одна штука _не_ в чипдип)
Производитель: STMicroelectronics
Ядро: ARM Cortex M0
Ширина шины данных: 32 bit
Максимальная тактовая частота: 48 MHz
Размер программной памяти: 16 kB
Размер ОЗУ данных: 4 kB
Разрядность АЦП: 12 bit
Рабочее напряжение питания: 2.4 V to 3.6 V
Рабочая температура: — 40… + 85 C
Доступные аналоговые/цифровые каналы: 16
Торговая марка: STMicroelectronics
Тип ОЗУ данных: SRAM
Тип интерфейса: I2C, SPI
Количество входов/выходов: 15 I/O
Количество таймеров: 5 Timer
Тип памяти программ: Flash
66 рублей (одна штука _не_ в чипдип)
Тем более :) Зачем за атмелы так держаться, давно не понимаю. А у упомянутого STM8S003 есть иногда удобная фича — питание от 2.8 до 5в.
Ну и брал я их примерно по 0.4$/штука. Закончатся, посмотрим что будет на тот момент интересного.
Ну и брал я их примерно по 0.4$/штука. Закончатся, посмотрим что будет на тот момент интересного.
А у STM есть чипы в DIP корпусе? А то тиньку воткнул в бредборд, обвязал проводами и вперед.
Я схемотехнике не обучен, мне так, на поиграться. Поэтому — создание платы и пайка — не ко мне. А демо-платы недешевые, да и не всегда они слеланы так, как я хочу. Ограничивают частично возможности чипа. :(
Я схемотехнике не обучен, мне так, на поиграться. Поэтому — создание платы и пайка — не ко мне. А демо-платы недешевые, да и не всегда они слеланы так, как я хочу. Ограничивают частично возможности чипа. :(
STM32 искал в dip (вдумчиво) — не нашел,
NXP — есть, тут и статья была habrahabr.ru/post/189484/
А для бредборды переходничок сделаю, благо такие готовые платки-переходнички легкодоступны
NXP — есть, тут и статья была habrahabr.ru/post/189484/
А для бредборды переходничок сделаю, благо такие готовые платки-переходнички легкодоступны
Очень хотелось стартануть с этой статьи, но меньше чем за 1к не купишь железо ((
есть стм8 в дипе, с нецензурной ценой. проще/дешевле купить у китайцев платку с распаяным чипом.
1. Для домашних самоделок 8-битных микроконтроллеров вполне достаточно. Толку от преимуществ 32-битных STM в большинстве случаев никакого.
2. 8-битные микроконтроллеры очень хорошо изучены, и на них сделано очень много проектов.
Я думаю, что этих пунктов достаточно, чтобы держаться за 8-битные атмелы.
2. 8-битные микроконтроллеры очень хорошо изучены, и на них сделано очень много проектов.
Я думаю, что этих пунктов достаточно, чтобы держаться за 8-битные атмелы.
согласен на счет достаточности ресурсов для самоделок, но у 8-ми битных атмелов нет интерфейса для пошаговой отладки — считаю жирным минусом. любые 32 бита (и атмел и стм), а также stm8 этого недостатка лишины.
Согласен, про debugWire забыл. но он только в avr studio работает, а у меня к ней личная неприязнь)).
А в симуляторе внешние устройства не всегда можно симулировать.
Если, что я холивар никакой не затеваю, я, напротив, авр очень люблю… хотя уже конечно по старой памяти, скорее. порастеряли они народную любовь, приходится признать.
А в симуляторе внешние устройства не всегда можно симулировать.
Если, что я холивар никакой не затеваю, я, напротив, авр очень люблю… хотя уже конечно по старой памяти, скорее. порастеряли они народную любовь, приходится признать.
Есть еще один минус debugWIRE. У меня usbasp самопальный на макетке
У восьми битных Атмелов куча лицензионного и открытого софта для симуляции, не чем не хуже хардверной отладки (для примера Proteus, причем старых версий. Есть ли там STM?). Не стоит забывать и о JTAG в линейке Mega.
Но если ваши профессиональные обязанности (читай, «приносящие постоянный доход») никак не связаны с выбором отдельной линейки микроконтроллеров определенного производителя, будете вы покупать новый тип от другого производителя, если вам нужно всего лишь на две недели быстро и без хлопот организовать «новогоднюю гирлядну»?
Но если ваши профессиональные обязанности (читай, «приносящие постоянный доход») никак не связаны с выбором отдельной линейки микроконтроллеров определенного производителя, будете вы покупать новый тип от другого производителя, если вам нужно всего лишь на две недели быстро и без хлопот организовать «новогоднюю гирлядну»?
1. по вполне достаточно. Статью прочтите еще раз — смысл заниматься мозголомством на восьмибитнике с эмуляцией UART, если есть МК за равную цену с аппаратным интерфейсом? Лучше заняться непосредственно логикой задачи. Для тех же стм32 посмотрите не возможности DMA — то что на восьмибитном атмеле приходится делать руками и постоянно отвлекать ресурсы МК, там выполняет ядро, только сообщая о результате (да, это и чтение термодатчиков массовых типа DS18B20, и обработка ADC, когда результат надо просто взять из памяти, и работа с дисплейчиками). Толк есть. Вопрос еще в инертности, зачем изучать что-то новое, старое работает.
2. Для кода на си это не играет роли. Он в подавляющем числе случаев отлично переносим. Лично без проблем собирал код от восьмибитника атмела на 16-бит PIC, 32-бит STM32, 8-бит STM8. Изменений минимум.
Так что это вопрос личных пристрастий — нравится, какие проблемы. Как еще ниже и написали — плюс ко всему человеческая отладка.
2. Для кода на си это не играет роли. Он в подавляющем числе случаев отлично переносим. Лично без проблем собирал код от восьмибитника атмела на 16-бит PIC, 32-бит STM32, 8-бит STM8. Изменений минимум.
Так что это вопрос личных пристрастий — нравится, какие проблемы. Как еще ниже и написали — плюс ко всему человеческая отладка.
1. Вы так говорите про инертность, будто в этом есть что-то плохое. Что-то новое надо изучать тогда, когда проблем от недостатков старого больше, чем будет проблем от перехода на новое. Вот зачем мне это DMA, если в несложных проектах (управление аквариумом, например) нет вообще никаких проблем, чтобы дёргать датчики и дисплейчики вручную в цикле?
2. Изменений минимум — это сколько? Особенно если активно используются таймеры, АЦП и т.п.? А ничего, что изменения повышают вероятность появления багов?
Вопрос очень спорный, и никак не сводится к сравнению соотношения нафаршированности и цены. Поэтому не вижу причин удивляться тому, что люди не спешат штурмовать STM.
2. Изменений минимум — это сколько? Особенно если активно используются таймеры, АЦП и т.п.? А ничего, что изменения повышают вероятность появления багов?
Вопрос очень спорный, и никак не сводится к сравнению соотношения нафаршированности и цены. Поэтому не вижу причин удивляться тому, что люди не спешат штурмовать STM.
1. Нет, инертность плохо только если из-за нее возникает много проблем, в попытке сделать что-то на хорошо известной базе, но неудобной. А так — просто как фактор, почему многие не меняют изученные средства. DMA для аквариума не обязательно. Но там ведь и МК, по большому счету, тоже не нужен? :)
2. В конкретном упомянутом случае (это был стек TCP/IP от Lifelover с easyelectronics) изменения были в инициализации таймера и SPI для каждой платформы (несколько строк кода по сути). Весь остальной код платформонезависим оказался. А, для STM32 потребовалось на структурах применить запрет выравнивания данных по адресам для компилятора, иначе портился пакет.
Вообще более-менее нормальный код портируется без проблем. Портянки логики вперемешку с использованием аппаратных ресурсов — отдельный цирк с конями, стараюсь так не писать.
На днях обратную задачу делал — код от STM32 с DMA (onewire) адаптировал для STM8S. Опять же, несколько минут… Но все это, если работа с железкой четко выделена и не смешана с логикой.
Ну и согласен, конечно — если есть в наличии набор отлаженых алгоритмов и методик под платформу и задачи укладываются на МК без извращений — особого смысла менять нет. Привычка великая сила.
2. В конкретном упомянутом случае (это был стек TCP/IP от Lifelover с easyelectronics) изменения были в инициализации таймера и SPI для каждой платформы (несколько строк кода по сути). Весь остальной код платформонезависим оказался. А, для STM32 потребовалось на структурах применить запрет выравнивания данных по адресам для компилятора, иначе портился пакет.
Вообще более-менее нормальный код портируется без проблем. Портянки логики вперемешку с использованием аппаратных ресурсов — отдельный цирк с конями, стараюсь так не писать.
На днях обратную задачу делал — код от STM32 с DMA (onewire) адаптировал для STM8S. Опять же, несколько минут… Но все это, если работа с железкой четко выделена и не смешана с логикой.
Ну и согласен, конечно — если есть в наличии набор отлаженых алгоритмов и методик под платформу и задачи укладываются на МК без извращений — особого смысла менять нет. Привычка великая сила.
А зачем такой прагматичный подход?
Любительство тем и замечательно, что в нем мозголомство является одной из целей процесса. А кайф от процесса не уступает кайфу от конечного результата.
Ну это ведь клёво, завести программный уарт, пусть даже существуют мк с аппаратным, дма и прочими плюшками — это тоже одна целей.
Любительство тем и замечательно, что в нем мозголомство является одной из целей процесса. А кайф от процесса не уступает кайфу от конечного результата.
Ну это ведь клёво, завести программный уарт, пусть даже существуют мк с аппаратным, дма и прочими плюшками — это тоже одна целей.
У атмелов от 1.8 до 5 вольт. Сейчас редкий микроконтроллер не поддерживает такие значения.
А интересного не будет ничего. Если цель «изучить ради прогресса» или уже профессиональное применение, то тогда вероятен вариант перехода на что то новое. Для «помигать светодиодом» вы остановитесь на том, подо что у вас уже имеется отлаженый тулчейн и опыт с возможностями отладки.
А интересного не будет ничего. Если цель «изучить ради прогресса» или уже профессиональное применение, то тогда вероятен вариант перехода на что то новое. Для «помигать светодиодом» вы остановитесь на том, подо что у вас уже имеется отлаженый тулчейн и опыт с возможностями отладки.
Сейчас как раз занимаюсь написанием кода под STM32L1, а STM32F0, точнее платку STM32F0 discovery использую в качестве программатора.
Мне всё дошло instagram.com/p/0JI71QSaIB/
И я хочу сказать что Жопа с документацией. Информацию, необходимую чтобы понять все чего касаешься при мигании светодиодом пришлось собирать из 3-4 разных статей и сравнивать с примером из самой библиотеки.
Вердикт по названным ранее критериям:
И я хочу сказать что Жопа с документацией. Информацию, необходимую чтобы понять все чего касаешься при мигании светодиодом пришлось собирать из 3-4 разных статей и сравнивать с примером из самой библиотеки.
Вердикт по названным ранее критериям:
- наличие возможности симуляции работы — наверно есть, я не симулирую. За то отладка — 10/10
- наличие соотвествующей документации и примеров кода — 3/10
- наличие примеров кода — 6/10
- технические требования к применению — 10/10
- ценовая доступность — 7/10
Примеры из стандартной библиотеки (в iar) это вообще жесть. У меня STM32L152 и что авторы хотели сказать в коде примере работы с GPIO загадка. Благо теперь перешел на сборку проектов на Linux и от iar отказался.
Несоглашусь. Во-первых какую библиотеку мучаем? Сейчас в «моде» HAL. И мое глубочайшее убеждение, что изучать (и уж тем более с нуля) надо именно его. А HAL естественно надлежит употреблять с STM32CubeMX. С STM32CubeMX «blinked led» получается практически в один мышиный клик.
HAL накрывает хардварную специфику и, мой следующий шаг «PWM-LED» я сделал вообще не заглядывая в datasheet'ы (не говорю, что это хорошо — просто это факт).
Вот заставить работать связку STM32CubeMX-Eclips с отладкой на чипе — было реально нелегко. Лихие ребята из STMicroelectronics не захотели делать генерацию проекта для бесплатного Eclipse, что вообще-то логично у них же есть платная trueStudio! Кстати на том Eclipse и основанная.
Но заставить все работать в Eclipse — вполне возможно! Вот здесь об этом очень правильно написано:
we.easyelectronics.ru/STM32/stm32cubemx-start-code-eclipse-bystryy-start-otladka-v-eclipse-cherez-st-link-discovery.html
HAL идет в исходниках, с докой на тех же исходниках основанных и с примерами — код вполне приличный, да чего там — хороший код!
p.s.
Мой опыт работы с STM32 конечно мизерный. Но после того как я чуть-чуть пощупал эти камушки AVR'ки кажутся сирыми и убогими какими-то.
HAL накрывает хардварную специфику и, мой следующий шаг «PWM-LED» я сделал вообще не заглядывая в datasheet'ы (не говорю, что это хорошо — просто это факт).
Вот заставить работать связку STM32CubeMX-Eclips с отладкой на чипе — было реально нелегко. Лихие ребята из STMicroelectronics не захотели делать генерацию проекта для бесплатного Eclipse, что вообще-то логично у них же есть платная trueStudio! Кстати на том Eclipse и основанная.
Но заставить все работать в Eclipse — вполне возможно! Вот здесь об этом очень правильно написано:
we.easyelectronics.ru/STM32/stm32cubemx-start-code-eclipse-bystryy-start-otladka-v-eclipse-cherez-st-link-discovery.html
HAL идет в исходниках, с докой на тех же исходниках основанных и с примерами — код вполне приличный, да чего там — хороший код!
p.s.
Мой опыт работы с STM32 конечно мизерный. Но после того как я чуть-чуть пощупал эти камушки AVR'ки кажутся сирыми и убогими какими-то.
Eclipse больно охоч до памяти — у меня его регулярно прибивает OOM. Конечно, 4Гб это уже мало, но я переехал на QtCreator с плагином BareMetal.
кажется в CooCox и есть STM32CubeMX. По крайней мере, в даташиты заглядывать не пришлось и это тоже спорный плюс ввиду отсутствия годной документации именно по фрэймфорку библиотеки. комменты в заголовочных файлах читать — это не круто
Мне так не показалось
читаешь «STM32CubeMX» — подразумеваешь «HAL», наработки в CooCox — SPL
Я пробовал CooCox — первая лампочка на нем заморгала, но как-то не глянулся он мне какой-то несерьёзный он что ли
и в IAR заглядывал (о, боже! это же Borland C!), и trueStudio фришную скачал попробовал (какой смысл? — тот же Eclipse, да еще платный)
Не сказать, что я от Eclipse в полном восторге — 100500 настроек в 1024х местах, но когда настроешь — нормально. И приятно, что все в «одном флаконе» :)
читаешь «STM32CubeMX» — подразумеваешь «HAL», наработки в CooCox — SPL
Я пробовал CooCox — первая лампочка на нем заморгала, но как-то не глянулся он мне какой-то несерьёзный он что ли
и в IAR заглядывал (о, боже! это же Borland C!), и trueStudio фришную скачал попробовал (какой смысл? — тот же Eclipse, да еще платный)
Не сказать, что я от Eclipse в полном восторге — 100500 настроек в 1024х местах, но когда настроешь — нормально. И приятно, что все в «одном флаконе» :)
попробуйте погуглить «stm32 make template» www.google.ru/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=stm32%20make%20template его можно прикрутить к любой ide. Нужен только тулчейн для ARM и в случае windows необходим еще mingw. Ну и firmware поискать если требуется.
Не пойму зачем что-то еще, если заготовку со всей необходимой инициализацией МК, а так же весь необходимый пролог для запуска и скрипт для сборки всего этого мне поставляет STM32CubeMX — программа от производителя чипа (бесплатная). Остается только смысл добавить между фигурными скобками main()
Вот и где вообще написано про это все? Что есть HAL и SPL, какие у них особенности, где их официальная документация с туториалами и какие среды для них нативны? (шаманство с Eclipse как-то не для меня — это крайний случай).
Ой, я пошучу ладно? Не обижайтесь в случае чего, просто анекдот Одесский вспомнился:
— Будьте любезны, на что мне сесть, чтоб попасть на Дерибасовскую?
— Сядьте на жопу, вы уже на Дерибасовской!
В интернетах понятное дело, и как я не люблю хабр — это не самый большой кладезь по теме stm32. Часть ссылок я уже привел. Ну и гугл — наше все. Не поверите, когда я уперся в тупик — как же заставить плагин openocd отлаживать «голый» чип — ответ нашелся в ролике на youtube где какой-то испанец (вроде) показывал как настраивать eclipse…
Да, с AVR все в точности так же!
— Будьте любезны, на что мне сесть, чтоб попасть на Дерибасовскую?
— Сядьте на жопу, вы уже на Дерибасовской!
Вот и где вообще написано про это все?
В интернетах понятное дело, и как я не люблю хабр — это не самый большой кладезь по теме stm32. Часть ссылок я уже привел. Ну и гугл — наше все. Не поверите, когда я уперся в тупик — как же заставить плагин openocd отлаживать «голый» чип — ответ нашелся в ролике на youtube где какой-то испанец (вроде) показывал как настраивать eclipse…
Да, с AVR все в точности так же!
и про «отсутствие годной документации»:
www.st.com/st-web-ui/static/active/en/resource/technical/document/user_manual/DM00122015.pdf
www.st.com/web/en/catalog/tools/FM147/CL1794/SC961/SS1743/LN1897/PF260612
по мне — так весьма годно.
Комменты в заголовочных файлах и сами исходные файлы — это вообще истина в первой инстанции
тут тебе и реализация и ключевые слова для дальнейшего поиска в даташитах.
www.st.com/st-web-ui/static/active/en/resource/technical/document/user_manual/DM00122015.pdf
www.st.com/web/en/catalog/tools/FM147/CL1794/SC961/SS1743/LN1897/PF260612
по мне — так весьма годно.
Комменты в заголовочных файлах и сами исходные файлы — это вообще истина в первой инстанции
тут тебе и реализация и ключевые слова для дальнейшего поиска в даташитах.
И чем его? www.chipdip.ru/product/st-link-v2/ — это неподъемный девайс, к сожалению…
или дискавери платы, к примеру stm8s discovery, недорогие сравнительно(программатор + чип) или китайские клоны стлинка.
вот такой st-link v2 отлично справлятся с стм8/стм32, цена на порядок почти ниже чипдиповой.
вот такой st-link v2 отлично справлятся с стм8/стм32, цена на порядок почти ниже чипдиповой.
Сhipdip! да вы с ума сошли...:) у них же цены втрое (в лучшем случае)! Это же ретейловый магазин, туда надо с приятелями ходить — «чисто над ценами поржать». И зачем вам отдельный программатор берите хотя бы вот эту отладочную платку.
www.electronshik.ru/item/stm32f0discovery-1024065
Здесь и целевой камень того же семейства и ST-Link второй версии впридачу.
www.electronshik.ru/item/stm32f0discovery-1024065
Здесь и целевой камень того же семейства и ST-Link второй версии впридачу.
У Атмел есть и ARMы дешевые простые, правда их не на каждом шагу купить можно :)
А вот кстати и Atmel тоже, как оказалось (и что сильно меня удивило). Наткнулся в начале недели на акцию по раздаче атмеловских МК Cortex M0+. 2 штучки в руки обещают подарить… в том числе и радиогубителям, если верить тексту акции. Так вот если верить этому же сайту, то они эти самые Cortex M0+ продают по $0.90 (по нынешним временам сравнимо с вышеозвученными ценами). Правда, складывается ощущение, что штучно у них покупать нельзя — типа не работают с частными лицами.
«Зона комфорта» обычно трактуется несколькими параметрами:
— наличием возможности симуляции работы;
— наличие соотвествующей документации и примеров кода;
— технические требования к применению (например по частоте, скорости обработки и пр);
— ценовая доступность.
Для Атмелов все условия на высоте для подобного класса устройств. Так что еще долго ее мало кто покинет.
— наличием возможности симуляции работы;
— наличие соотвествующей документации и примеров кода;
— технические требования к применению (например по частоте, скорости обработки и пр);
— ценовая доступность.
Для Атмелов все условия на высоте для подобного класса устройств. Так что еще долго ее мало кто покинет.
Даже инфракрасный порт не нужен, можно принимать таким же светодиодом: link.springer.com/chapter/10.1007/978-3-540-39653-6_14
Какой ужас у автора оригинала вместо кода. Причем вот это место и вовсе анекдот:
Это же банальное else. Других переходов на эту метку поиском не нашлось:
Если в коде есть хотя бы одна метка или глобальная переменная, этот код становится очень трудоемким в плане анализа, рефакторинга, объединения с другим кодом, — короче, для любой стадии жизненного цикла программы.
if (start == 0)
{
temp = 0x80;
start = 1;
count--;
goto razvet; //////////////////////ВОТ ЖЕЖ СТЫДОБА!
}
temp = data;
temp = temp >> count;
temp = temp << 7;
razvet:
Это же банальное else. Других переходов на эту метку поиском не нашлось:
if (start == 0)
{
temp = 0x80;
start = 1;
count--;
}
else
{
temp = data;
temp = temp >> count;
temp = temp << 7;
}
Если в коде есть хотя бы одна метка или глобальная переменная, этот код становится очень трудоемким в плане анализа, рефакторинга, объединения с другим кодом, — короче, для любой стадии жизненного цикла программы.
Я это место не трогал потому что неизвестно что меньше места будет занимать. вроде эта метка не драконит.
А почему else, кстати, если код за if выполняется и при истинном условии?
При истинном условии мы код за if перепрыгиваем по метке.
Блин, точняк. Ну и жесть, это реально не очевидно для меня было… Теперь я лучше понимаю почему goto =зло
Не всегда зло. Автор скорее всего понимал и экономил память программ. В контроллере с таким количеством памяти goto может занимать сильно меньше места чем if/case statemets. Однако преждевременно так оптимизировать не стоит!
GCC выдает в данном случае идентичный код что с goto, что с if/else.
GCC-это первое, что мне попалось под руку. Вы можете написать в данном случае код лучше?
Давайте без намеков — вы хотите сказать, что GCC «плохой» и приводите в качестве аргумента публикацию пятилетней давности, в которой изложено субъективное мнение некоего эксперта без каких-либо тестов и измерений.
Собственно, мнение такое — «GCC плохой, потому как по звонку мне мою проблему не решат, а мне придется гуглить и тратить время».
А какой тогда компилятор «хороший»?
Тот, который соответствует стандартам?
Тот, который выдает код, который понравился эксперту? Он там Keil нахваливает, который на стандарт откровенно полюет, в результате чего у пользователей возникает когнитивный диссонанс, потому как банальный пример из учебника внезапно развалился, хотя стандарт гарантирует в этом случае, что пример корректный.
Который компилирует быстрее всех? Так GCC в тесте с ICC и CLANG всех обогнал, правда тест староват.
Инструмент должен соответствовать задаче. Для just for fun радиогубительства, которым данная статья и является, и GCC сойдет. В «рабочее устройство» авторы просто поставят контроллер с нужной периферией и нужным запасом ресурсов, чтобы не бегать за последним байтом.
Давайте без намеков — вы хотите сказать, что GCC «плохой» и приводите в качестве аргумента публикацию пятилетней давности, в которой изложено субъективное мнение некоего эксперта без каких-либо тестов и измерений.
Собственно, мнение такое — «GCC плохой, потому как по звонку мне мою проблему не решат, а мне придется гуглить и тратить время».
А какой тогда компилятор «хороший»?
Тот, который соответствует стандартам?
Тот, который выдает код, который понравился эксперту? Он там Keil нахваливает, который на стандарт откровенно полюет, в результате чего у пользователей возникает когнитивный диссонанс, потому как банальный пример из учебника внезапно развалился, хотя стандарт гарантирует в этом случае, что пример корректный.
Который компилирует быстрее всех? Так GCC в тесте с ICC и CLANG всех обогнал, правда тест староват.
Инструмент должен соответствовать задаче. Для just for fun радиогубительства, которым данная статья и является, и GCC сойдет. В «рабочее устройство» авторы просто поставят контроллер с нужной периферией и нужным запасом ресурсов, чтобы не бегать за последним байтом.
Давайте без намеков, вы правильно подметили. По сути, я не писал, что GCC плохой, как не писал и то, что он хороший. Намек на статью был в контексте, что у разных компиляторов различное качество кодогенерации. Сейчас мы об этом качестве не говорим. Если мы обратимся к оригинальной статье с оригинальным кодом, который мы здесь обсуждаем, то можно увидеть, что статья написана в 2012 году, т.е. тоже не самая свежая. А как вы верно подметили, пять лет назад GCC, возможно, был не такой хороший (или плохой), как сейчас. Соответственно вывод о том, что генерируется идентичный код (с циклом и переходом), в то время не совсем корректно. Для текущей ситуации в настоящем времени допускаю, что итог работы будет идентичным. Ваше же заявление выглядело довольно категорично, поэтому я и привел ссылку тоже мнение, опирающееся да, на субъективную оценку, но в поле нескольких рассмотренных кодогенераторов.
Чтобы окончательно во всем убедиться, надо откопать тот самый win-avr (то есть фактически, тоже GCC) от шестой студии и посмотреть. Однако я не думаю, что трудозатраты того стоят.
Ради интереса также можно попытаться написать все на чистом ассемблере и устроить этому коду очную ставку с выхлопом GCC.
Ради интереса также можно попытаться написать все на чистом ассемблере и устроить этому коду очную ставку с выхлопом GCC.
Есть у меня смутное подозрение, что код что с меткой, что без метки странслируется в одни и те же инструкции.
P. S. А вы кстати не забыли включить -Os?
P. S. А вы кстати не забыли включить -Os?
А не смотрели в сторону SPI и какого нить конвертера? Вот уж точно простой интерфейс, нам пришлось делать дёрганье ножками на FX3, т.к. SPI в 32битном режиме шины GPIF недоступен.
Какой адский ад. 304 байта кода на примитивный программный UART, без приема данных, без ничего, еще и с использованием таймера?
Держите мой древний код простейшего UART. 146 байт, если убрать auto-baud — 108. На Tiny13 не тестировал, правда, но не вижу причин ему там не заработать после настройки:
github.com/sirgal/AVR-ASM-Software-UART/blob/master/software_uart.asm
Единственный гарантированный и вменяемый способ уменьшить размер кода на AVR — перейти на ассемблер для AVR. Он вообще не страшный, если понять некоторые его особенности, даже проще чем C. Попробуйте :)
Держите мой древний код простейшего UART. 146 байт, если убрать auto-baud — 108. На Tiny13 не тестировал, правда, но не вижу причин ему там не заработать после настройки:
github.com/sirgal/AVR-ASM-Software-UART/blob/master/software_uart.asm
Единственный гарантированный и вменяемый способ уменьшить размер кода на AVR — перейти на ассемблер для AVR. Он вообще не страшный, если понять некоторые его особенности, даже проще чем C. Попробуйте :)
А не проще обзавестись stm8s003f3p6, который стоит дешевле и умеет больше?.. На дворе 2015 год, не?
Очень удачная и компактная реализация UART'a, в скомпиленном виде занимает 62 байта:
AVR half-duplex software UART supporting single pin operation
nerdralph.blogspot.ca/2014/01/avr-half-duplex-software-uart.html
AVR half-duplex software UART supporting single pin operation
nerdralph.blogspot.ca/2014/01/avr-half-duplex-software-uart.html
Вот предлагаю ещё один пример кода:
habrahabr.ru/post/251141/
habrahabr.ru/post/251141/
Глянул, спасибо за поддержку темы. На ардуине кодить под t13 — это лучше чем на бэйсике!
Данный код должен заработать и на других средах разработки, которые переваривают Си.
Да меня просто скриншот удивил. Так то да, странно кстати что ардуино поддерживает такое низкоуровневое программирование, я думал такнельзя
Дыкть «внуте-то неонка» :) Среда транслирует скетчи в С и радостно компилит это все GCCей + предзашитый бутлоадер + usb-com конвертер с самим контроллером на платке — вот и вся Arduino'вская магия!
внутри ардуины используется avr-gcc. То есть тоже самое, что и в Avr Studio последних релизов. Отличие от cтудии в том, что компиляция производится с фреймворком на С++. Из-за этого иногда приходится подкорректировать некоторые данные из старых проектов (например структуры нуждо точно корректировать), но запускается без проблем.
Sign up to leave a comment.
UART в ATtiny13 или Как вывести данные из МК за 52р