ATMEGA8 vs. STM32F030

Сегодня пришла убийца AVR-ок.

DSC00525

Давайте сравним.

Mega8-vs-STM32F030

Слева — классика жанра, справа — безжалостный убийца.

По топологии — корпуса одинаковые. По толщине — STM чуть толще.

  • 16 МГц против 48 МГц
  • 8 кБ флэша против 32 кБ
  • 1 кБ оперативы против 4 кБ

и много других вкусностей.

Но самое главное — цена!

Слева —  40 рублей и больше, справа — 25 рублей.

Нет, я всё ещё люблю Мегу8. Хороший аппарат. Классика. Но с другой стороны…

… в Cortex-ах единое адресное пространство, и проблема использования констант, которые, естественно, размещаются во флеш-памяти, — отсутствует как класс.

Представьте себе, что у вас имеется целый килобайт константных строк (сообщений для пользователя или названий меню). Скажите, как вы будете выводить их, например, в UART или на LCD?

Вообще, у вас есть два варианта решения задачи.

1. Вы размещаете все константы (константные строки) в оперативной памяти, которой и без того крайне мало, и используете С-шные функции из стандартной библиотеки. Метод позволяет работать быстро, но съедает память.

2. Вы используете функции динамического извлечения констант из флеш памяти и размещения их RAM для работы. Извлекаете константы по мере необходимости. Оператива расходуется разумно, но скорость работы снижается.

А вот еще одна принципиальна проблема — «зоопаркнутость» AVR-ок. Я имею ввиду, что переход от одной микросхемы к другой может  принудить вас перетряхивать весь проект целиком.

Так получилось, что я в последнее время занимался Прибором Рудного Каротажа (ПРК). ПРК — это целый комплекс. Например, в него входит модуль гамма-каротажа (МГК). Там у меня установлена Tiny13. Модуль электро-каротажа (МЭК) создан на базе Mega328. В модуле Магнитного каротажа используется Mega8. Регистратор сигналов — Mega64.

Зоопарк в названиях регистров периферийных устройств — где-то просто UART, где-то UART1. Где-то TCR0, где-то TCCR0A и TCCR0B. Тоже самое с названиями обработчиков прерываний — в зависимости от типа UART-а или типа таймера, используемых в той или иной микросхеме, название обработчика меняется. Причем иногда даже совершенно неожиданным образом!

А посмотрите на биты управления в регистрах таймеров, биты разрешения прерываний от таймеров! Да, и не только таймеров! Я понимаю, пространство регистров ограничено, ATMEL-у приходится пихать биты туда, где есть еще место.

Порой не только названия битов управления периферийных устройств имеют разное наименование (не модификаций, не-ет! Именно названия.), дак еще и сами регистры могут существенно меняться. Те, кто серьезно работает с AVR-ками, те понимают мою боль.

Я ничего не говорю — AVR хороший камень. Может быть один из самых лучших… Был таким, пока не появился «убийца». Я не осуждаю старых разработчиков, которые остановили свое развитие на уровне 51-го ядра. Я так же не осуждаю разработчиков, которые не хотят слазить с AVR. У каждого своя жизнь и свои требования.

А взять такой интересный факт, как способность не нарочно «убить» AVR-ку, установив ей неправильно фьюзы. Ну-ка, поднимите руки, кто вставал на эти грабли?

У STM32 внутри прописан в ПЗУ загрузчик. (Он прописан там навечно, его нельзя ни стереть, ни отключить.) Таким образом, если что-то пошло не так, то у разработчика всегда есть возможность установить выводы BOOT0 и BOOT1 в нужную комбинацию и привести STM32 к исходному состоянию.

К стати,  если у вас по каким-то причинам нет JTAG-программатора, то даже и в этом случае в STM32 можно залить прошивку. Делается это через последовательный порт UART (и другие порты — USB, CAN, если они присутствуют в микроконтроллере).

Да, там — в STM32 — много, много разных плюшек есть.

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

12 responses to “ATMEGA8 vs. STM32F030

  1. Да, STM32 это железный повод для прощания с AVR. Первый раз опробовал их в этом сентябре. На данный момент перевёл на них почти все свои проекты. Пока естественно переехало железо, за пол года переедет и софтина. R.I.P. AVR !

    • Да-да. У меня почти так же.

      Жизнь (заказчик) ставит свои условия — разработать нечто очень быстро. Закладывать «новую лошадку» получается рисковано, так как нет времени на освоение той её функциональности, которая требуется в проекте. Изучение и производство в период цейтнота — плохо совмещаются. Поэтому до сих пор приходится наступать на себе на горло и брать уже изученную вдоль и поперек AVR-ку. Но думаю, уже в Январе, после каникул я начну выкатывать изделия на STM32.

      На сегодняшний день у меня наиболее серьезной проблемой к использованияю Cortex-ов является не столько их неизученность их самих, сколько отсутствие четких знаний по установке тулчейна.

      Те методики, которые я описываю в блоге, быстро устаревают. Проходит полгода и уже по описанной методике тулчейн не собрать. Приходится опять ходить про «грабелному» полю и получать по лбу.

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

      На данный момент я могу только собрать binutils и с помощью его утилит собрать проект для STM32.

      По секрету скажу, у меня в планах есть такое желание — опубликовать методику сборки binutils и методику, как с помощью утилит этого binutils написать прогу.

      Реально прога для моргания светодиодом получается размером в 100-200 байт. Это прикольно осознавать — ведь не смотря на то, что это прога не для 8-разрядных AVR-ок, а для 32-разрядных Cortex-ов, она на самом деле получается крошечной.

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

  2. Странно, у меня этот этап проскочил на редкость безболезненно. Я вообще ничего никуда не устанавливал, не прописывал. Видимо сказывается привычка по максимуму использовать сторонние наработки. Я пишу программы для STM32 в IARе, взяв за основу стандартные проекты и примеры. Даже не изменяю структуру предложенных папок. Компилирую там-же. Получаю бин файл. Который на лету у меня конвертится в DFU файл и выгружается в память контроллера внешней программой. Возможности IAR в плане отладки я вообще пока игнорирую. Хватает осциллографа. Купил тут по случаю чудный но слегка хроменький БУ Тектроникс MSO 4104, ненарадуюсь. Сейчас уже закончил и проверил макеты VGA генератора на STM32F429IIT6. Развожу вот…

    • Я стараюсь разобраться в предлагаемых мне инструментах по максимуму.

      До того как я пересел на Линукс, я юзал Виндовс. Юзал краденный (крякнутый) IAR. Но после того как IAR несколько раз запрграммировал мне программатор вместо таргет-микроконтроллера, и я не смог даже выяснить где-что можно было бы «подкрутить» в IAR-е чтобы такое более неслучалось, я задумался — а что я вообще делаю? Чем я занимаюсь? В том ли направлении я топаю?

      Конечно, в Линуксе можно установить уже готовые тулчейны и не париться. Например, уже готовые тулчейны для AVR и для MSP430 имеются в репозиториях Debian и Ubuntu. Но тулчейны для ARM7/Cortex в репах не совсем те, которые мне хотелось бы иметь. Поэтому приходится готовить их самому.

      Это сродни тому, что домохозяйка будет покупать в магазине готовые пирожки и пельмени. Время сократится до минимума, но при этом что-то потеряется. В магазинских пельменяж и пирожках не будет той теплоты, за которую домочадцы любят хозяйку. Да и мужик в доме, который вызывает сантехника, чтобы тот сменил прокладку в кране — это тоже разновидность мужской импотенции. Жена любящая мужа только за то, что он зарабатывает много денег — это как-то не правильно. Это какая-то странная, извращеная семья.

      Про осциллограф — это очень правильный ход. Врач без стетоскопа — не врач, а так себе. Автомеханик без набора ключей — не автомеханик. Разработчик без осциллограыа — жалкая породия.

  3. Позволю себе с Вами не согласиться. Разработчик встроенных систем — специалист высокой квалификации, его рабочее время стоит дорого, если он не работает — он обязан отдыхать, чтобы работать потом эффективнее. Использовать эмбеддера для сантехремонта, это как забивать гвозди пирожками. Можно, но незачем. У меня конечно к примеру тоже есть, и паяльник для труб, и зачистка для штаби, и я могу по хозяйству всё, но не стану этим заниматься, а найму человека. И ничего в этом зазорного не вижу. Каждую работу должен выполнять человек, являющийся в ней специалистом. Да, в аварийной ситуации, настоящий мужик должен уметь всё, но если речь идёт о каких то плановых, небезотлагательных работах, не нужно пытаться сэкономить на них, и делать самостоятельно. Лучше в это время заработать больше на основной своей деятельности, и нанять других людей…

    • К сожалению. Степень оплаты труда специалистов определяется не высотой их квалификации, а совершенно по другим параметрам.

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

      Я тоже ничего не вижу зазорного в том, чтобы … ай, не важно в чем!

      Скорее всего мы с Вами живем в разных социальных мирах. В Вашем социальном мире соотношение зарплат разработчика программ и зарплат, например, автомеханика, отличается от соотношения зарплат в моем «мирке». Эти соотношения очень сильно зависят от географии проживания и от социальной прослойки. Так какой смысл сравнивать теплое с мягким? Каждый живет как умеет.

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

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

    • Тут еще хуже. У меня уже примерно как год появился какой-то хруст в коленях. Когда спускаюсь по лестнице — неприятный такой хруст. Вроде и нагрузку даю. Жена начала выгуливать (как собаку!) по вечерам, совершаем с ней 30-минутный моцион на 2-3 км. Но всё равно, хрустит. За компом — сидишь, за рулем — сидишь. На работу приедешь — опять сидишь. Когда двигаться? Да, собственно и времени-то особо нет подвигаться — дел дофигищща! Всё хочется сделать. А от того, что делаешь дел только больше становится. Короче — петля. Знаю, что здоровье уже пошло, но вырваться не могу.

  5. У атмеля буковки на кузове приятнее (ИМХО) 🙂

Оставьте комментарий