Кросс-средства разработки для AVR

8-битные микроконтроллеры AVR (AT90, ATtiny, ATmega) от Atmel (в настоящий момент принадлежит Microchip)

Moderator: Shaos

User avatar
Shaos
Admin
Posts: 24088
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

В связи с необходимостью обновиться пробую следующую конфигурацию:

1) binutils-2.14
./configure --target=avr --program-prefix="avr-"
make
make install

2) gcc-3.3.2
./configure --target=avr --program-prefix="avr-" --enable-languages=c,c++
make
make install

3) avr-libs-1.0.5 (see http://download.savannah.nongnu.org/releases/avr-libc/)
./doconf
./domake
./domake install

все автоматически устанавливается в /usr/local/avr, а бинарники с префиксом avr- в /usr/local/bin (менять PATH и вообще вручную устанавливать какие-либо переменные окружения не требуется), для нормальной сборки AVROS надо сделать символическую ссылку /usr/include/avr, направленную на /usr/local/avr/include
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
fk0
Novelist
Posts: 49
Joined: 10 Jan 2006 07:54
Location: St.Petersburg, Russian

Post by fk0 »

Shaos wrote: Чего-то я не понял как по этим ссылкам выцарапывать avr-binutils и avr-gcc???
Идёшь на homepage, там написано как к cvs подключиться.
Выгребаешь релиз и собираешь с нужными опциями. Нужно иметь
как минимум msys, лучше cygwin, лучше linux.

Для виндов можно легко нагуглить собранное.

Для линуха в каком-нибудь дебиане всё есть. В микродистрибутивах
см. выше.
User avatar
Shaos
Admin
Posts: 24088
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

fk0 wrote:
Shaos wrote: Чего-то я не понял как по этим ссылкам выцарапывать avr-binutils и avr-gcc???
Идёшь на homepage, там написано как к cvs подключиться.
Выгребаешь релиз и собираешь с нужными опциями. Нужно иметь
как минимум msys, лучше cygwin, лучше linux.

Для виндов можно легко нагуглить собранное.

Для линуха в каком-нибудь дебиане всё есть. В микродистрибутивах
см. выше.
Дык в линухе я сижу - и давно уже все собрал :)
Я тут за главного - если что шлите мыло на me собака shaos точка net
jdigreze
God
Posts: 1388
Joined: 02 Jan 2006 02:28
Location: Abakan

можно ли побороть?

Post by jdigreze »

Попробовал покомпилировать свои простенькие програмульки, и вот что заметил: объявления переменных с помощью uint8_t (без указания, что буду исползовать в качестве переменной регистр) оперируют 16бит словами, в том числе при побитовом "И" явно указанного регистра и константы... Что-то мне это совсем не нравится. :( Может я что не так делаю?
Пробовал указывать ключ -mint8, но тогда происходит "глюк" при подключении stdint.h (вроде так), и ничего не компилируется.

Ну, а в общем и целом, работать удобно. :)
Разобрался с uisp, которому, как оказалось, требуется явное указание, что проц нужно почистить. А то по началу долго парился - "вроде должно работать, но не хочет" :D

И еще один попутный вопрос: кто что может посоветовать из средств эмуляции-отладки?
SfS
Doomed
Posts: 491
Joined: 16 Apr 2005 22:35
Location: Томск

Re: можно ли побороть?

Post by SfS »

jdigreze wrote:Попробовал покомпилировать свои простенькие програмульки, и вот что заметил: объявления переменных с помощью uint8_t (без указания, что буду исползовать в качестве переменной регистр) оперируют 16бит словами, в том числе при побитовом "И" явно указанного регистра и константы... Что-то мне это совсем не нравится. :(
Как ты это заметил ?
Вообще в С любая целая константа считается типа int. Вероятно, язык С принудительно приводит всё к int ?

Попробуй поставить оптимизацию по скорости - ключик -Os.

Кстати, а если вместо uint8_t использовать signed char ? Не пробовал ?
jdigreze
God
Posts: 1388
Joined: 02 Jan 2006 02:28
Location: Abakan

Re: можно ли побороть?

Post by jdigreze »

SfS wrote:Как ты это заметил ?
avr-gcc -g -mmcu=atmega16 -c my.c - компилируем
avr-gcc -g -mmcu=atmega16 -o my.elf my.o - получаем эльфа
avr-objdump -h -S my.elf > my.lst - из эльфа получаем лист
дык вот в этом листе и просматривал, как оно компилирует...
SfS wrote:Вообще в С любая целая константа считается типа int. Вероятно, язык С принудительно приводит всё к int ?
Это мы в курсе ;) Вообще, я так подозреваю, что промежуточный код генерится gcc, и лишь потом, при оптимизации уже готового промежуточного кода, приводится к виду avr-gcc... Хотя может быть я ошибаюсь.
SfS wrote:Попробуй поставить оптимизацию по скорости - ключик -Os.
Вот-вот! Это оно самое :D
Достаточно поставить в первой строчке -O1
Как пример без ключика -Os:
DDRA = 0xFF;
получаем:
ldi r30, 0x3A
ldi r31, 0x00
ldi r24, 0xFF
st Z, r24
Теперь ставим ключик -O1, и получаем:
ldi r25, 0xFF
out 0x1a, r25
Вот это уже другой коленкор :D
SfS wrote:Кстати, а если вместо uint8_t использовать signed char ? Не пробовал ?
Неа... Да уже и не надо. Хотя может быть позже попробую.
User avatar
Shaos
Admin
Posts: 24088
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

SfS wrote:Заодно приведу распайку кабеля для программирования программой uisp (LPT порт - стандартный разъем, со стороны AVR - номера выводов указаны для NedoPC-90):

pin on AVR Pin on parallel port (LPT)
MOSI (1) D0 (2)
MISO (2) Busy (11)
SCK (3) Strobe (1)
Reset (4) Init (16)
GND(6) GND (18)
При запуске uisp чего-то в Slackware 11.0 с ядром 2.6.17.13 не срастается:

/dev/parport0: No such file or directory
Failed to open ppdev.
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24088
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Shaos wrote:При запуске uisp чего-то в Slackware 11.0 с ядром 2.6.17.13 не срастается:

/dev/parport0: No such file or directory
Failed to open ppdev.
Вспомнил:

rmmod lp
modprobe ppdev


Надо чтоли загрузочные скрипты поправить чтобы каждый раз мучительно не вспоминать чего же надо сделать, чтобы LPT поюзать...
Я тут за главного - если что шлите мыло на me собака shaos точка net