Перенос make-файлов (Makefile) с WinAVR на AVR Toolchain
Проект 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), может, кто заморачивался?
Возникла необходимость пересобрать старый проект, 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 для уменьшения бинарника
Смысл в том, что те функции которые не вызываются, не включаются в исходный бинарник.
Добавляем в свой makefile строчки для компилятора -ffunction-sections и -fdata-sections

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

Проверка:
Читать дальше
Добавляем в свой makefile строчки для компилятора -ffunction-sections и -fdata-sections

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

Проверка:
Читать дальше
Форматный вывод для МК на Си++
В предыдущей статье я писал о форматном выводе для микроконтроллеров стандартными средствами языка Си: Форматный вывод на Си для микроконтроллеров. Теперь посмотрим что интересного можно сделать на С++.
Астарожна многабукаф!
Читать дальше
Астарожна многабукаф!
Читать дальше
Оптимизация такая оптимизация

Картинко даже пояснения не требует. Кто-нибудь знает почему так? вижу такое в первый раз за год работы с AVR. Путем выноса отдельных участков кода выяснил, что по 3 кб жрут _delay_ms(). Но раньше такого никогда не было(с такой оптимизацией). И да, Build succeeded with 0 warnings если что)
Крышеснос с 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 и ассемблера в одном проекте
Как и многие, я люблю ассемблер за скорость, а также возможность полного контроля над машинным кодом и железом. Однако, писать проект целиком на ассемблере утомительно и не всегда целесообразно, особенно в тех участках, где реализуется общая логика работы, не требующая детального контроля — тут С дает существенный выигрыш. Тем не менее, при написании кода для МК довольно часто встречаются отдельные места, где возможности ассемблера действительно необходимы.
Читать дальше
Читать дальше
Missed Optimization
Missed Optimization
Часто бывает удобно упаковать несколько логически связанных атрибутов в одну POD структуру и работать с ними, как с единым целым. К томе-же, если структура не большая и целиком помещается в регистры, то это должно быть еще и эффективно. Должно, но…Читать дальше
Как заглянуть в мозги AVR AtMega без JTAG и гемороя
Ну нету у меня JTAG! А значения переменных посмотреть хочется!
Что делать? (с) Чернышевский. «Кто виноват?», «Кому на Руси жить хорошо?» — тьфу ты не туда.
Читать дальше
Что делать? (с) Чернышевский. «Кто виноват?», «Кому на Руси жить хорошо?» — тьфу ты не туда.
Читать дальше
- -2
- 20 апреля 2011, 21:43
- KalyakaMalyaka
- 59
Минималистичная очередь задач на C.
Недавно тут появилась замечательная статья про реализацию кольцевого буфера на C++ [1]. Статья весьма ценная и полезная, но, как вполне справедливо заметили в комментариях, что бы писать на крестах под контроллеры надо весьма хорошо знать этот язык, иначе красивый и, вроде бы, элегантный плюсовый код собирается в ресурсоёмкое тормозилово. Я и сам хоть и пишу десктопные проги на плюсах, под контроллеры пока предпочитаю использовать чистый С. Так вот, по этому поводу вспомнилось мне, что я как раз недавно занимался шлифовкой очереди задач на основе кольцевого буфера на сях, и я решил поделиться своими наработками — вдруг кому пригодится. Код, разумеется, платформонезависимый (ну кроме конструкции ATOMIC_BLOCK), а вот оптимизация делалась под avr-gcc и на других платформах/компиляторах может быть излишней.
Читать дальше
Читать дальше