Перенос make-файлов (Makefile) с WinAVR на AVR Toolchain

AVR
Проект WinAVR больше не поддерживается автором, вместо него Atmel предлагает AVR Toolchain (в виде отдельного пакета и в составе AVR Studio 5).

Возникла необходимость пересобрать старый проект, make-файл которого основывался на шаблоне из комплекта WinAVR, новым тулчейном. Для этого понадобились небольшие правки make-файла. Большинство из них необходимы потому, что в WinAVR был эмулятор оболочки (sh), а в AVR Toolchain его нет, поэтому команды оболочки заменены на консольные команды Windows.

Моё решение в формате diff-файла (автоматически накатить patch скорее всего не получится, номера строк могут быть разными): snippets.crisp-studio.com/view/161/perenos-make-fajlov-makefile-s-winavr-na-avr-toolchain

Ищу лучше (это по понятным причинам не будет работать на *nix), может, кто заморачивался?

Ключики компилятора avr-gcc для уменьшения бинарника

AVR
Смысл в том, что те функции которые не вызываются, не включаются в исходный бинарник.
Добавляем в свой makefile строчки для компилятора -ffunction-sections и -fdata-sections
makefile + -ffunction-sections и -fdata-sections

Добавляем -Wl,-gc-sections для линкера:
makefile + -Wl,-gc-sections

Проверка:


Читать дальше

Форматный вывод для МК на Си++

В предыдущей статье я писал о форматном выводе для микроконтроллеров стандартными средствами языка Си: Форматный вывод на Си для микроконтроллеров. Теперь посмотрим что интересного можно сделать на С++.

Астарожна многабукаф!


Читать дальше

Странности с TWI

Подключаю тут LM75A, накидал код:



Читать дальше
  • 0
  • 15 октября 2011, 23:35
  • _YS_

Оптимизация такая оптимизация


Картинко даже пояснения не требует. Кто-нибудь знает почему так? вижу такое в первый раз за год работы с AVR. Путем выноса отдельных участков кода выяснил, что по 3 кб жрут _delay_ms(). Но раньше такого никогда не было(с такой оптимизацией). И да, Build succeeded with 0 warnings если что)
  • +1
  • 09 августа 2011, 23:14
  • enq

Крышеснос с avr-gcc

Что-то у меня вообще тупняк — не понимаю, что творит GCC
Есть у меня такая вот структура:

	struct t_samples {
		int16_t  i1;
		int16_t  i2;
		int16_t  i3;
		int16_t  i4;
		int16_t  i5;
		int16_t  i6;
	};

При попытке загрузить переменную этого типа в регистры вот таким вот кодом


Читать дальше

AVR-GCC: Совмещение C и ассемблера в одном проекте

AVR
Как и многие, я люблю ассемблер за скорость, а также возможность полного контроля над машинным кодом и железом. Однако, писать проект целиком на ассемблере утомительно и не всегда целесообразно, особенно в тех участках, где реализуется общая логика работы, не требующая детального контроля — тут С дает существенный выигрыш. Тем не менее, при написании кода для МК довольно часто встречаются отдельные места, где возможности ассемблера действительно необходимы.



Читать дальше

Missed Optimization

AVR

Missed Optimization

Часто бывает удобно упаковать несколько логически связанных атрибутов в одну POD структуру и работать с ними, как с единым целым. К томе-же, если структура не большая и целиком помещается в регистры, то это должно быть еще и эффективно. Должно, но…


Читать дальше

Как заглянуть в мозги AVR AtMega без JTAG и гемороя

AVR
Ну нету у меня JTAG! А значения переменных посмотреть хочется!
Что делать? (с) Чернышевский. «Кто виноват?», «Кому на Руси жить хорошо?» — тьфу ты не туда.



Читать дальше

Минималистичная очередь задач на C.

Недавно тут появилась замечательная статья про реализацию кольцевого буфера на C++ [1]. Статья весьма ценная и полезная, но, как вполне справедливо заметили в комментариях, что бы писать на крестах под контроллеры надо весьма хорошо знать этот язык, иначе красивый и, вроде бы, элегантный плюсовый код собирается в ресурсоёмкое тормозилово. Я и сам хоть и пишу десктопные проги на плюсах, под контроллеры пока предпочитаю использовать чистый С. Так вот, по этому поводу вспомнилось мне, что я как раз недавно занимался шлифовкой очереди задач на основе кольцевого буфера на сях, и я решил поделиться своими наработками — вдруг кому пригодится. Код, разумеется, платформонезависимый (ну кроме конструкции ATOMIC_BLOCK), а вот оптимизация делалась под avr-gcc и на других платформах/компиляторах может быть излишней.


Читать дальше
  • +3
  • 01 апреля 2011, 09:48
  • Alatar