Обсуждаем контроллеры компании Atmel.
Ответить

Re: Нескольно простых вопросов о программировании AVR на Си.

Ср мар 15, 2017 10:41:54

Ярослав555 писал(а):Кроме того, в один прекрасный момент, Вы захотите попробовать С++, а в avr-gcc его поддержка не полная.

И чего же не хватает в avr-gcc? Я в прошлом году пробовал, это был gcc 5.3, с С++14 кодом проблем не было. В то же время на днях пришла рекламка от IAR, типа наконец наш компилятор понимает С++11&14, но это для ARM, для AVR все по-прежнему :)

Re: Нескольно простых вопросов о программировании AVR на Си.

Ср мар 15, 2017 11:01:14

Ярослав555 писал(а):... что в итоговом коде не существует массивов размерностью больше 1. Любой многомерный массив переводится в строку и хранится в таком виде в памяти. ...

Если уж совсем - то в "итоговом коде" не существует ни массивов, ни типов, ни строк, а лишь "приёмчики" по работе с памятью, сгенерированные компилятором из того кода, что мы ему скормили. :)

Re: Нескольно простых вопросов о программировании AVR на Си.

Ср мар 15, 2017 12:31:16

Reflector писал(а):И чего же не хватает в avr-gcc? Я в прошлом году пробовал, это был gcc 5.3, с С++14 кодом проблем не было. В то же время на днях пришла рекламка от IAR, типа наконец наш компилятор понимает С++11&14, но это для ARM, для AVR все по-прежнему :)

Создал я значит проект С++ в 7й студии. Портирую рабочий код из ИАРа (так надо было). И тут студия мне заявляет, мол она не понимает new. Лезу в инет и читаю - допиливай мол сам. Не знаю ребятки, для меня иар это надежная прога, где все сделано для работы. Если что-то в иаре не работает, значит виноват я сам. Проверено много раз.

Добавлено after 3 minutes 10 seconds:
Siarzhuk писал(а):Если уж совсем - то в "итоговом коде" не существует ни массивов, ни типов, ни строк, а лишь "приёмчики" по работе с памятью, сгенерированные компилятором из того кода, что мы ему скормили. :)

а ядро при этом следит чтобы один кусок кода не полез в запрещенную для него область, но это не про avr :)

Re: Нескольно простых вопросов о программировании AVR на Си.

Ср мар 15, 2017 13:26:21

Ярослав555 писал(а):К вопросу о среде. Я агитирую за IAR. Изначально привык к среде и переход на стмки был не так ужасен.

можете привести более приземленные примеры для писателя средней руки (AVR) в чем же заключается преимущество IAR над тойже 4 студией ?

Re: Нескольно простых вопросов о программировании AVR на Си.

Ср мар 15, 2017 14:04:44

FreshMan писал(а):можете привести более приземленные примеры для писателя средней руки (AVR) в чем же заключается преимущество IAR над тойже 4 студией ?

4я студия у нас без компилятора, если я не ошибаюсь. А большего не напишу, т-к 4ю студию ни разу не использовал. Вот с 7й пришлось столкнуться. Пробовал кодвижн - генерит кучу стартового кода, меня как новичка тогда это не привлекло. Пробовал микро С - он плюсы не поддерживает. С эклипсом потрахаться надо прилично. А иар вот он - готов из коробки и всё работает, и протеус с ним дружит, и самопальные джетаги. Только редактор никак улучшить не могут, но со временем я привык к отсутствию удобств. А для разбора чужого кода имеется Source Insight (подсмотрел на ютубе у одного азиата).

Re: Нескольно простых вопросов о программировании AVR на Си.

Ср мар 15, 2017 15:32:29

Ярослав555 писал(а):4я студия у нас без компилятора, если я не ошибаюсь. А большего не напишу, т-к 4ю студию ни разу не использовал. Вот с 7й пришлось столкнуться. .... Пробовал микро С - он плюсы не поддерживает. С эклипсом потрахаться надо прилично. А иар вот он - готов из коробки и всё работает, и протеус с ним дружит, и самопальные джетаги.

4-я студия подхватывает WinAVR автоматически, если надо. Но синтаксис С++ не подсвечивает, редактор убогий.
7-я студия, как и все от MS, требует непомерных ресурсов, хотя сервис на уровне.

а вот Eclipse - это наше всё :) Трахаться не надо. Работает даже с флешки - положил в карман и в любом месте можно программировать. avr-gcc подхватывает так же автоматом, если компилятор устанавливался установщиком, т.е. прописывался в PATH, в противном слчае надо 4 строчки руками прописать - пути к компилятору, binutils, avrdude и еще какой-то (не помню). в принципе, я сейчас на флешку поставил 5 версий avr-gcc и путем правки этих строчек собираю в любой из них, если приспичит. с протеусом дружит (тут не Eclipse заслуга, а avr-gcc, естественно, свежак генерит какой-то новый ELF, который уже протеус не понимает). отладчики - вот тут да, проблемка... при помощи какой-то матери можно прикрутить GDB+Simulavr, но по сравнению с отладкой в протеусе это велосипед, едущий по болоту... зато если есть AVR ICE, то при помощи GDB можно отлаживать в железе, причем, как обычно и принято в GNU, возможна удаленная отладка (подумываю как раз заказать AVR ICE в Китае).

По сравнению с IAR у описанного "комплекта" достоинство одно, но весьма веское: это все 100% бесплатно и даже у самых щепетильных никаких подозрений в чистоте и непорочности не вызывает. Ну а про редактор - и говорить нечего, IAR, как я понимаю, нервно курит...
Ну и о недостатке, как без него: avr-gcc, не смотря на все новшества, генерирует менее компактный при оптимизации по размеру, и менее быстрый при оптимизации по скорости код, чем IAR... но разница в единицах процентов.

Re: Нескольно простых вопросов о программировании AVR на Си.

Ср мар 15, 2017 16:21:22

добавлю до кучи:
Microsoft Visual Studio Community 2015 (бесплатно)
+ VisualGDB (не бесплатно €79, есть лекарство, кому не страшен серый :) )
supports AVR, STM32, Freescale Kinetis, NXP LPC, TIVA, MSP430, ESP8266 and many other devices.
Симулятор для AVR работает.
https://visualgdb.com/?features=embedded
Можно писать и под Линукс и Андроид. Естественно на всяких родных Микрософтовских C# C++ VB и пр.
Работает на 2-х ядернике с 4Гб памяти вполне шустро, лучше ставить на вин. 10 х64.

Re: Нескольно простых вопросов о программировании AVR на Си.

Ср мар 15, 2017 17:22:54

ARV писал(а):свежак генерит какой-то новый ELF, который уже протеус не понимает

Только в иаре я могу выбрать любой удобный формат отладочного файла.

Re: Нескольно простых вопросов о программировании AVR на Си.

Ср мар 15, 2017 21:35:07

Ярослав555 писал(а):Только в иаре я могу выбрать любой удобный формат отладочного файла
выбрать-то не проблема и в avr-gcc, только версии 5 и новее генерируют ELF, в котором протеус не видит ничего... а COFF протеус по определению не понимает. вот и приходится для протеуса собирать в 3-ей версии avr-gcc...

Re: Нескольно простых вопросов о программировании AVR на Си.

Чт мар 16, 2017 07:22:43

ARV писал(а):новее генерируют ELF, в котором протеус не видит ничего...
Вы пробовали ELF и исходники сложить в одну папку?

Re: Нескольно простых вопросов о программировании AVR на Си.

Чт мар 16, 2017 08:01:11

Z_h_e писал(а):Вы пробовали ELF и исходники сложить в одну папку?
там проблема в другом: протеус видит исходник и показывает его, но не видит адресов строк... т.е. как бы некуда ставить точки останова и нечего по шагам проходить :) что-то изменилось в формате ELF.
возможно, я просто не знаю каких-то параметров LD, чтобы задать нужный формат ELF-а...

Re: Нескольно простых вопросов о программировании AVR на Си.

Чт мар 16, 2017 08:17:39

ARV писал(а):а COFF протеус по определению не понимает.

А протеус то не знает...
Изображение
И более того позволяет отлаживать прошивку. Показывая все переменные с именами как на Си, регистры и порты.
И точки останова есть.
Изображение
Вложения
234.png
(46.96 KiB) Скачиваний: 852
123.png
(74.23 KiB) Скачиваний: 712

Re: Нескольно простых вопросов о программировании AVR на Си.

Чт мар 16, 2017 08:31:43

AndTer писал(а):А протеус то не знает...
виноват, это я с прямым углом перепутал :)))
протеус не понимает формат отладочной инфы, которая для avr-gcc по умолчанию считается стандртной - stabs, а когда делаешь dwarf-2 новыми версиями, тогда проблема, о которой я писал... COFF я вообще не знаю, как создать avr-gcc...

Re: Нескольно простых вопросов о программировании AVR на Си.

Чт мар 16, 2017 09:56:55

ARV писал(а):протеус видит исходник и показывает его, но не видит адресов строк... т.е. как бы некуда ставить точки останова и нечего по шагам проходить
Не знаю какой версии в AS6 компиллер (для avr в нем делаю). Протеус 7 работает с elf. Если исхдники лежат в другой папке чем elf, то показывает только переменные и исходник библиотеки delay (может еще конечно какие может). Если сложить все в одну папку, то все показывает, все шагает, точки останова работают.

Re: Нескольно простых вопросов о программировании AVR на Си.

Чт мар 16, 2017 14:24:22

Здесь https://electronix.ru/forum/index.php?showtopic=140866 выложен GCC 6.3.0, компилит по размеру лучше, на одном проекте где то 7к кода собрался на 500 байт меньше. Но с elf, беда.. Протеус 7 и 8,4 не понимают..

Re: Нескольно простых вопросов о программировании AVR на Си.

Чт мар 23, 2017 22:36:46

Товарищи коты, помогите разобраться с avr-gcc, уже запарился с бубном вокруг него плясать.
Использую avr-gcc 5.4 под линуксом (opensuse 13.1) + avr-libc 2.0.0
При попытке хоть что-то скомпилить, получаю ошибку:
Код:
as: неизвестный ключ «-mmcu=avr4»

Как я понимаю, компилятору почему-то не нравятся строки в Makefile:
Код:
MCU      = atmega8

и дальше в опциях сборки
Код:
-mmcu=$(MCU)

Вместо "atmega8" он подставляет "avr4" (название каталога с файлами под мегу8) и начинает тупить.
Что делать и как с этим бороться?

Re: Нескольно простых вопросов о программировании AVR на Си.

Пт мар 24, 2017 01:15:21

Andrew88, прикольно: все указал (версию линукса, версию gcc,версию, и даже версию libc), но версию binutils (в котором и находится тот, кто ругается - а именно ассемблер) не указал :-)
binutils для avr хоть стоит?

Andrew88 писал(а):Как я понимаю, компилятору почему-то не нравятся строки в Makefile:


Компилятор вообще ничего не знает про какой-то Makefile. Ему "по барабану", кто его вызвал make или Вы "руками" команду ввели.

======
Если хочешь, чтобы помогли - давай точно, что запускаешь , и полностью что выводится в ответ!

Re: Нескольно простых вопросов о программировании AVR на Си.

Пт мар 24, 2017 06:17:30

В Suse это немного странно организовано. Помимо собственно avr-gcc ставится пакет cross-avr-gcc (в других дистрибутивах его, по ходу, нет), без него компилятор даже не запускается, хоть и установлен. Вместо avr-binutils в репозиториях лежит (и автоматом устанавливается) cross-avr-binutils 2.28. Пакет cross-binutils тоже стоит, и тоже 2.28.

Исходники, которые пытался скомпилировать, во вложении. Взяты из статьи, с гитхаба WiseLord'а - он собирал как раз под линуксом на avr-gcc. Плюс исходники компилировались и другими пользователями, так что в этом плане проверены.

Следуя инструкциям автора, открываю терминал в папке с проектом, пишу make all. Вот, что получается:
Код:
~/Desktop2/fm7segm-master> make all
avr-gcc -g -Wall -Werror -lm -Os -mcall-prologues -fshort-enums -ffunction-sections -fdata-sections -MMD -MP -MT build/volume.o -MF build/./volume.d -mmcu=atmega8 -DF_CPU=8000000 -D_PIN1 -D_TEA5767 -D_RDA580X -D_TUX032 -c -o build/volume.o volume.c
as: неизвестный ключ «-mmcu=avr4»
make: *** [build/volume.o] Ошибка 1
Вложения
fm7segm-master.zip
(190.34 KiB) Скачиваний: 192

Re: Нескольно простых вопросов о программировании AVR на Си.

Пт мар 24, 2017 06:45:27

у меня похожая хрень в Windows: в путях прописан Delphi, и его make по умолчанию первым вызывается... если у вас разные бинутилсы установлены, то вполне может быть, что вызываются не те, которые надо для avr-gcc.

попробуйте в командной строке указать полный путь к правильной make

Re: Нескольно простых вопросов о программировании AVR на Си.

Пт мар 24, 2017 07:02:10

Ругается на отсутствующий avr4. У меня в Gentoo это /usr/avr/lib/avr4/ (тут и для atmega8 объектный файл лежит). Но принадлежит это не пакету avr-gcc, а avr-libc. Убедитесь, что эта библиотека тоже установлена.

Вообще, для полного счастья нужны:
- avr-gcc - собственно компилятор
- avr-binutils - некоторые утилиты (as, size, objdump и прочее)
- avr-libc - стандартная библиотека C для AVR (все эти "stdlib.h" и "strings.h" и всеми любимые "util/delay.h" и, главное, "avr/io.h")
- avr-gdb - отладчик (с ним я не работал, т.к. с эмуляцией мелких МК проще в proteus под wine, а "большие" МК не использовал, да и аппаратного отладчика для AVR у меня нету)
- avrdude - для прошивки всего этого добра. В моих проектах он обычно прикручен к Мakefile, и вся прошивка сводится к простому "make flash"

А make должен любой абсолютно подходить. И в linux он, как правило, из коробки есть. Ну, или ставится элементарно. Он ведь сам по себе не компилирует, а лишь выполняет инструкции из Makefile.
Ответить