Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: свежак KGP win32/arm/avr/mips/m68k
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > GNU/OpenSource средства разработки
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26
Сергей Борщ
Цитата(Andy Great @ Aug 20 2008, 10:09) *
ОФФ: вчера читал такого типа инструкцию для желающих смотреть сат ТВ на ПК. Сильно сомневаюсь в возможности удовлетворения всех "а почему у меня...". Проще (да и полезнее) делать как klen
Не соглашусь. Собирал mspgcc, ибо имевшаяся сборка устарела и надо было кое-что добавить (конструкторы, кое-что в инициализации). Набил некоторое количество шишек. Написал для себя инструкцию (где-то здесь выкладывал). Через некоторое время вышла официальная сборка с моими добавлениями. Снес все, что относилось к своей сборке. Теперь понадобилось добавить поддержку ядра MSP430X. Достал ту инструкцию, нашел в ней несколько пунктов, которые уже забыл и если бы она не сохранилась - наступил бы на те же грабли.

klen, безусловно, делает полезное дело. Но если кто-то "подсядет" на его сборки, а завтра klen решит (тьфу, тьфу, тьфу) оставить электронику (как Bill), то эти кто-то окажутся в тупике.
ukpyr
Несколько вопросов. Компилирую для Mega48.
1. неправильно настраивается начало сегмента данных - компилятор настраивает на 0x60. Это обошел указанием линковщику вручную начало данных 0x100. В старой сборке 2006го года такого не было.
2. неправильно генерируется таблица векторов прерываний. фактически присутствуют только первые 10, дальше сразу идет начало программы. Соответственно включение прерываний TX, RX приводит к сбросу/зависанию программы. В старой сборке 2006го года такого тоже не было.
3. Новая версия от klen выдает ошибку при копиляции inline-ассемблерной функции - выдает что-то типа повторное определение меток, хотя в старых версиях такого не было.

И попутно - как правильно объявлять инициализированные переменные в .h файлах подключаемых библиотек - в .h объявление переменной, а в .С такое же объявление с присвоением значения и атрибутами-модификаторами ? А регистровые переменные ?
klen
Цитата(ukpyr @ Sep 2 2008, 22:34) *
3. Новая версия от klen выдает ошибку при копиляции inline-ассемблерной функции - выдает что-то типа повторное определение меток, хотя в старых версиях такого не было.

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


код в студию.
по поводу переменных вообще не понял в чем проблема.
haker_fox
Цитата(Сергей Борщ @ Aug 20 2008, 17:09) *
оставить электронику (как Bill)

bb-offtopic.gif
Упс. А что случилось? Я-то и думаю, куда пропал этот человек?
COMA
Насколько помню, писали что ушёл в сетевой маркетинг.
goodwin
Цитата(COMA @ Sep 3 2008, 06:52) *
Насколько помню, писали что ушёл в сетевой маркетинг.


Ну это кто как склонен/предрасположен понимать...
Сергей Борщ
Цитата(haker_fox @ Sep 3 2008, 02:21) *
Упс. А что случилось? Я-то и думаю, куда пропал этот человек?
Насколько я понял - кого-то из близких с того света вытащили и это на него сильно повлияло.

P.S. Вот, нашел его прощальное письмо на телесисах.
Make_Pic
Цитата(Сергей Борщ @ Sep 3 2008, 10:28) *
Насколько я понял - кого-то из близких с того света вытащили и это на него сильно повлияло.

P.S. Вот, нашел его прощальное письмо на телесисах.


Да жаль, и SM то же видимо по тем же причинам перестал появляться на конфах. Жаль, время идет...
klen
свежак для AVR

bu cvs 20080903
gcc 4.3.2 релиз
avrlibc 1.6.2
gdb6.8 cvs 20080904 - для сильных мужчин & моих соседей по палате
make sh rm - для подержки AVRStudio

http://klen.org/Files/DevTools/kgp_avr-elf...6.8.20080904.7z

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

тем кто не вкурсе (или я ужо давно отстал) AVRS 4.14.589 AvrPluginavrgccplugin1.0.0.9 имеют косяк. Если вы используете float то разумно всегда подлинковывать libm, это позволяет ускорить скрость * операций до 144 а / до ~440 тактов для float. так вот AVRS не позволяет это сделать sad.gif как опцию -lm. точнее можно в опциях линкера но это ничего не даст, -lm должен быть к помандной строке после списка объектников приложения, таковы правила линковки LD. Я руками правлю xml файл проекта.
явно указывать libm.a некашерно потому что компиллер сам должен выбрать ее правильную версию...
если это все лечится прще - раскажите мне.
ukpyr
Цитата
код в студию

отправил на почту
kimstik
чтото проект не собиратеся под gcc 4.3.2 на at90usb162 - в либах путается
в kgp_avr-elf_bu2.18.50.20080601_gcc4.4.0.20080530_gdb6.8.20080531_avrlibc1.6.2.7z все собирается на ура

avr-gcc -mmcu=at90usb162 -I. -gdwarf-2 -DF_CPU=8000000UL -DBOARD=BOARD_USBKEY -DUSE_NONSTANDARD_DESCRIPTOR_NAMES -DUSB_DEVICE_ONLY -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED)" -Os -funsigned-char -funsigned-bitfields -ffunction-sections -fpack-struct -fshort-enums -finline-limit=20 -Wall -Wstrict-prototypes -Wundef -Wa,-adhlns=CDC.o -I../../ -std=gnu99 -Wundef -MMD -MP -MF .dep/CDC.elf.d CDC.o Descriptors.o ../../MyUSB/Scheduler/Scheduler.o ../../MyUSB/Drivers/USB/LowLevel/LowLevel.o ../../MyUSB/Drivers/USB/LowLevel/Endpoint.o ../../MyUSB/Drivers/USB/LowLevel/DevChapter9.o ../../MyUSB/Drivers/USB/HighLevel/USBTask.o ../../MyUSB/Drivers/USB/HighLevel/USBInterrupt.o ../../MyUSB/Drivers/USB/HighLevel/Events.o ../../MyUSB/Drivers/USB/HighLevel/StdDescriptors.o --outp
ut CDC.elf -Wl,-Map=CDC.map,--cref -Wl,--relax -Wl,--gc-sections -lm
e:/!cc/gcc/bin/../lib/gcc/avr/4.3.2/../../../../avr/bin/ld.exe: avr:4 architecture of input file `e:/!cc/gcc/bin/../lib/gcc/avr/4.3.2/../../../../avr/lib/avr35/crtusb162.o' is incompatible with avr:3 output
e:/!cc/gcc/bin/../lib/gcc/avr/4.3.2/../../../../avr/bin/ld.exe: avr:51 architecture of input file `CDC.o' is incompatible with avr:3 output
e:/!cc/gcc/bin/../lib/gcc/avr/4.3.2/../../../../avr/bin/ld.exe: avr:51 architecture of input file `Descriptors.o' is incompatible with avr:3 output
e:/!cc/gcc/bin/../lib/gcc/avr/4.3.2/../../../../avr/bin/ld.exe: avr:4 architecture of input file `../../MyUSB/Scheduler/Scheduler.o' is incompatible with avr:3 output
e:/!cc/gcc/bin/../lib/gcc/avr/4.3.2/../../../../avr/bin/ld.exe: avr:4 architecture of input file `../../MyUSB/Drivers/USB/LowLevel/LowLevel.o' is incompatible with avr:3 output
e:/!cc/gcc/bin/../lib/gcc/avr/4.3.2/../../../../avr/bin/ld.exe: avr:4 architecture of input file `../../MyUSB/Drivers/USB/LowLevel/Endpoint.o' is incompatible with avr:3 output
e:/!cc/gcc/bin/../lib/gcc/avr/4.3.2/../../../../avr/bin/ld.exe: avr:4 architecture of input file `../../MyUSB/Drivers/USB/LowLevel/DevChapter9.o' is incompatible with avr:3 output
e:/!cc/gcc/bin/../lib/gcc/avr/4.3.2/../../../../avr/bin/ld.exe: avr:4 architecture of input file `../../MyUSB/Drivers/USB/HighLevel/USBTask.o' is incompatible with avr:3 output
e:/!cc/gcc/bin/../lib/gcc/avr/4.3.2/../../../../avr/bin/ld.exe: avr:4 architecture of input file `../../MyUSB/Drivers/USB/HighLevel/USBInterrupt.o' is incompatible with avr:3 output
e:/!cc/gcc/bin/../lib/gcc/avr/4.3.2/../../../../avr/bin/ld.exe: avr:4 architecture of input file `../../MyUSB/Drivers/USB/HighLevel/Events.o' is incompatible with avr:3 output
e:/!cc/gcc/bin/../lib/gcc/avr/4.3.2/../../../../avr/bin/ld.exe: avr:4 architecture of input file `../../MyUSB/Drivers/USB/HighLevel/StdDescriptors.o' is incompatible with avr:3 output
make: *** [CDC.elf] Error 1
aesok
Цитата(kimstik @ Sep 26 2008, 01:55) *
чтото проект не собиратеся под gcc 4.3.2 на at90usb162 - в либах путается

Код
make clean
make


Помогло?

Анатолий.
kimstik
clean делал конечно же
не помогло
кстати и на kgp_avr-bu2.18.50.20080115_gcc4.3.0.20080111_avr-libc20080115.7z компилится на ура
aesok
AT90USB162/82 не самое удачное название для этих чипов. Хотя их название
начинается с AT90 как у AT90USB128*, AT90PWM* и по аналогии могло показаться
что в них стоит ядро ATmega, но на самом деле они не имеют инструкций
умножения, в них стоит ядро как в новых ATtiny. AT90USB82 обладает еще одним
уникальным свойством, не смотря но то что он имеет всего 8 КВ флеш, в нем
работают инструкции JMP/CALL и вектора прерываний расположены со
смещением в 4 байта, а не два как у всех других контролеров с 8 и менее флеш.

AT90USB162/82 реально поддерживаются в GCC с версии 4.3.3
(может 4.3.2). И то для binutils 2.18 требуется небольшой патч.

Для работы я бы порекомендовал вам использовать WinAVR2080610. Если Вы будете
использовать другие сборки проверьте что компилятор не генерирует инструкции
умножения для этих контроллеров.

Анатолий.

PS: более ранние версии не будут использовать инструкцю MOVW для AT90USB162/82.
kimstik
Цитата(aesok @ Sep 28 2008, 01:41) *
AT90USB162/82 не самое удачное название для этих чипов. Хотя их название
начинается с AT90 как у AT90USB128*, AT90PWM* и по аналогии могло показаться
что в них стоит ядро ATmega, но на самом деле они не имеют инструкций
умножения, в них стоит ядро как в новых ATtiny. AT90USB82 обладает еще одним
уникальным свойством, не смотря но то что он имеет всего 8 КВ флеш, в нем
работают инструкции JMP/CALL и вектора прерываний расположены со
смещением в 4 байта, а не два как у всех других контролеров с 8 и менее флеш.

AT90USB162/82 реально поддерживаются в GCC с версии 4.3.3
(может 4.3.2). И то для binutils 2.18 требуется небольшой патч.

Для работы я бы порекомендовал вам использовать WinAVR2080610. Если Вы будете
использовать другие сборки проверьте что компилятор не генерирует инструкции
умножения для этих контроллеров.

Анатолий.

PS: более ранние версии не будут использовать инструкцю MOVW для AT90USB162/82.


Все правильно написано.
Думаю это кому нибудь будет полезно.
прико в другом.
проект легко и непринужденно собирается этим:
kgp_avr-bu2.18.50.20080115_gcc4.3.0.20080111_avr-libc20080115.7z
kgp_avr-elf_bu2.18.50.20080601_gcc4.4.0.20080530_gdb6.8.20080531_avrlibc1.6.2.7z
и собранное успешно работает в железе. <---

А 4.3.2 - не желает. И не в процессе выполнения, когда надо делать собственно умножение.
Возможно патчей каких не хватает. Мне сложно судить.
Проект кстати достаточно развитый http://www.fourwalledcubicle.com/MyUSB.php
klen
всем привет, временно осутцтвовал! мы таки выпустили LockOn Черную Акулу на моей второй основной работе beer.gif теперь чуток больше времени будет для творчества yeah.gif

свежак для arm

http://www.klen.org/Files/DevTools/kgp_arm...6.0.20081005.7z
klen
свежак для avr

bu2.19.50_20081005
gcc4.4.0_20081003
avrlibc1.6.2

http://www.klen.org/Files/DevTools/kgp_avr...avrlibc1.6.2.7z
klen
ARM

http://klen.org/Files/DevTools/kgp_arm-elf...6.0.20081106.7z

кто нибудь использует bigendian, если да то где и в чем.
demiurg_spb
Цитата(klen @ Oct 13 2008, 13:32) *
свежак для avr
bu2.19.50_20081005
gcc4.4.0_20081003
avrlibc1.6.2
Есть вопрос про файл iom88p.h
Это так и задумано?
Код
#define PORTB _SFR_IO8(0x05)
#define PORTB0 0
#define PORTB1 1
#define PORTB2 2
#define PORTB3 3
#define PORTB4 4
#define PORTB5 5
#define PORTB6 6
#define PORTB7 7

Вместо того как было раньше:
Код
#define PORTB _SFR_IO8(0x05)
#define PB0 0
#define PB1 1
#define PB2 2
#define PB3 3
#define PB4 4
#define PB5 5
#define PB6 6
#define PB7 7

Я считаю что это бред...
klen
Цитата(demiurg_spb @ Nov 6 2008, 17:43) *
Есть вопрос про файл iom88p.h
Это так и задумано?
Код
#define PORTB _SFR_IO8(0x05)
#define PORTB0 0
#define PORTB1 1
#define PORTB2 2
#define PORTB3 3
#define PORTB4 4
#define PORTB5 5
#define PORTB6 6
#define PORTB7 7

Вместо того как было раньше:
Код
#define PORTB _SFR_IO8(0x05)
#define PB0 0
#define PB1 1
#define PB2 2
#define PB3 3
#define PB4 4
#define PB5 5
#define PB6 6
#define PB7 7

Я считаю что это бред...

Хехе, это не компиллер, это не комне smile.gif
позвонил другу брату и товарищу aesok, этот косяг и так быть не должно. должно быть и длинное и короткое определенее портов. Типа уже все поправлено, если все будеть нотмально то завтра получим свежак, с обновленным avrlibc1.6.3 там будет как раньше.
AHTOXA
Цитата(klen @ Nov 6 2008, 19:12) *


Респект!
А он умеет компилировать под Cortex-M3? Попытался сейчас собрать мигающий светодиод для STM32-H103 от Олимекс, и получил что-то типа
as : unknown option -mcpu=CortexM3 (не дословно).

И ещё маленькая просьба - собирать openocd с поддержкой параллельного портаsmile.gif
klen
Свежак АRM
http://klen.org/Files/DevTools/kgp_arm-elf...6.0.20081108.7z

Свежак AVR
http://klen.org/Files/DevTools/kgp_avr-bu2...avrlibc1.6.2.7z
компиллер теперь оптимизирует битовые сдвиги на предмен использования кинструкции swap, спасибо aesok

2_AHTOXA
-mcpu=CortexM3 я патсталом smile.gif
конечно умеет тока ему об этом нада сказать. рекомендую arm-kgp-elf-gcc --target-help и arm-kgp-elf-as --target-help поглядеть, там увидите опции платформо-специфичные
для GCC нада -mtumb -mcpu=cortex-m3 -mtune=cortex-m3 -march=armv7-m

вот пример исходника С:
Код
int mul (int x, int y)
{
  return x * y;
}
int div (int x, int y)
{
  return x / y;
}

выход для arm7tdmi: arm-kgp-elf-gcc -c a.c -mcpu=armv4t -S -Os
Код
    .file    "a.c"
    .text
    .align    2
    .global    mul
    .type    mul, %function
mul:
    @ args = 0, pretend = 0, frame = 0
    @ frame_needed = 0, uses_anonymous_args = 0
    @ link register save eliminated.
    mul    r0, r1, r0
    bx    lr
    .size    mul, .-mul
    .global    __divsi3
    .align    2
    .global    div
    .type    div, %function
div:
    @ args = 0, pretend = 0, frame = 0
    @ frame_needed = 0, uses_anonymous_args = 0
    str    lr, [sp, #-4]!
    bl    __divsi3
    ldr    pc, [sp], #4
    .size    div, .-div
    .ident    "GCC: (GNU) 4.4.0 20081107 (experimental)"


выход для cortex-m3: arm-kgp-elf-gcc -c a.c -mcpu=cortex-m3 -mthumb -Os -S
Код
    .syntax unified
    .thumb
    .file    "a.c"
    .text
    .align    2
    .global    mul
    .thumb
    .thumb_func
    .type    mul, %function
mul:
    @ args = 0, pretend = 0, frame = 0
    @ frame_needed = 0, uses_anonymous_args = 0
    @ link register save eliminated.
    mul    r0, r0, r1
    bx    lr
    .size    mul, .-mul
    .align    2
    .global    div
    .thumb
    .thumb_func
    .type    div, %function
div:
    @ args = 0, pretend = 0, frame = 0
    @ frame_needed = 0, uses_anonymous_args = 0
    @ link register save eliminated.
    sdiv    r0, r0, r1
    bx    lr
    .size    div, .-div
    .ident    "GCC: (GNU) 4.4.0 20081107 (experimental)"


во втором случае видно что используется аппаратный делитель целых типов
как проект соберется отпешитесь что все впорядке или не в порядке , сам хочу в терре купить олимекс
плату STM32-H103

попробывал тупо собрать проекты для этой платы с сайта олимекса, все собрались, тока нада чуток опции имя тулсов и опции objcopy поправить. зашить некуда. посмотрел исходники примеров и либ STM... у тех кто их писал видимо рак мозга, такого издевательства над языком С я даже от микрософта не видал.
AHTOXA
Цитата(klen @ Nov 12 2008, 00:28) *
2_AHTOXA
-mcpu=CortexM3 я патсталом smile.gif

Я ж написал - не дословноsmile.gif Я тупо пытался скомпилить пример с олимекса, поправив имена компилятора и проч.
Цитата
для GCC нада -mtumb -mcpu=cortex-m3

Ну вот, на это и ругалосьsmile.gif
Цитата
как проект соберется отпешитесь что все впорядке или не в порядке , сам хочу в терре купить олимекс
плату STM32-H103

У меня как раз такая. Хорошо, завтра вечерком скачаю и отпишусь.
Цитата
попробывал тупо собрать проекты для этой платы с сайта олимекса, все собрались, тока нада чуток опции имя тулсов и опции objcopy поправить.

У меня вроде до objcopy дело не доходило... Хотя я не углублялся, решил сначала спросить, возможно ли это в принципе.
Цитата
посмотрел исходники примеров и либ STM... у тех кто их писал видимо рак мозга, такого издевательства над языком С я даже от микрософта не видал.

Это да, это очень сильно:-)))
AHTOXA
Цитата(klen @ Nov 12 2008, 00:28) *
как проект соберется отпешитесь что все впорядке или не в порядке , сам хочу в терре купить олимекс
плату STM32-H103

попробывал тупо собрать проекты для этой платы с сайта олимекса, все собрались, тока нада чуток опции имя тулсов и опции objcopy поправить.


Докладываю, скомпилировалось. Но bin-файл получился за 500Мб:-) Что надо сказать objcopy?
klen
Цитата(AHTOXA @ Nov 12 2008, 19:23) *
Докладываю, скомпилировалось. Но bin-файл получился за 500Мб:-) Что надо сказать objcopy?

Код
arm-kgp-elf-objcopy -O ihex ../../out/image.elf ../../out/image.hex
arm-kgp-elf-objcopy -O elf32-littlearm -S ../../out/image.elf ../../out/image.bin
arm-kgp-elf-objdump -x --syms ../../out/image.elf > ../../out/image.dmp
arm-kgp-elf-objdump -h -S ../../out/image.elf > ../../out/image.lss
arm-kgp-elf-size -B -t -x ../../out/image.elf
AHTOXA
Цитата(klen @ Nov 13 2008, 00:13) *
Код
arm-kgp-elf-objcopy -O elf32-littlearm -S ../../out/image.elf ../../out/image.bin

Так bin получается маленький, но он получается не bin а elf sad.gif

Пока выкрутился так:
Код
$(OBJCOPY) -O binary -j .text -S $(ELF) $(BIN)


Светодиод моргает! smile.gif
Но это конечно не дело...
Rst7
Цитата(klen @ Nov 11 2008, 20:28) *
Свежак AVR
http://klen.org/Files/DevTools/kgp_avr-bu2...avrlibc1.6.2.7z
компиллер теперь оптимизирует битовые сдвиги на предмен использования кинструкции swap, спасибо aesok


Решил я опять помучать ГЦЦ. Вытащил по ссылке, начал пробовать. Появилась пара вопросов. Первый:

Код
test.c:

typedef unsigned char UREG;
typedef signed char REG;


static void _netw_memcpy(char *d, char *s, UREG l);

void netw_memcpy(void *d, void *s, UREG l)
{
  _netw_memcpy((char*)d,(char*)s,l);
}

static void _netw_memcpy(char *d, char *s, UREG l)
{
  char c;
  if (!l) return;
  do
  {
    c=*s++;
    *d++=c;
  }
  while(--l);
}


после gcc -O9 -S -mmcu=atmega168 test.c

Код
    .file    "test.c"
__SREG__ = 0x3f
__SP_H__ = 0x3e
__SP_L__ = 0x3d
__tmp_reg__ = 0
__zero_reg__ = 1
    .global __do_copy_data
    .global __do_clear_bss
    .text
.global    netw_memcpy
    .type    netw_memcpy, @function
netw_memcpy:
    push r16
    push r17
    push r28
    push r29
/* prologue: function */
/* frame size = 0 */
    tst r20
    breq .L4
    ldi r18,lo8(0)
    ldi r19,hi8(0)
    subi r20,lo8(-(-1))
    mov r16,r20
    ldi r17,lo8(0)
    movw r28,r16
    adiw r28,1
.L3:
    movw r30,r24
    add r30,r18
    adc r31,r19
    movw r26,r22
    add r26,r18
    adc r27,r19
    ld r21,X
    st Z,r21
    subi r18,lo8(-(1))
    sbci r19,hi8(-(1))
    cp r18,r28
    cpc r19,r29
    brne .L3
.L4:
/* epilogue start */
    pop r29
    pop r28
    pop r17
    pop r16
    ret
    .size    netw_memcpy, .-netw_memcpy


Как-то IAR с этим справляется на ура:
Код
        RSEG CODE:CODE:NOROOT(1)
//    8 __x_z void netw_memcpy(void *d, void *s, UREG l)
netw_memcpy:
//    9 {
//   10   _netw_memcpy((char*)d,(char*)s,l);
        REQUIRE _netw_memcpy
       ;               // Fall through to label _netw_memcpy
//   11 }
//   12

        RSEG CODE:CODE:NOROOT(1)
//   13 static __x_z void _netw_memcpy(char *d, char *s, UREG l)
_netw_memcpy:
//   14 {
//   15   char c;
//   16   if (!l) return;
        TST     R16
        BREQ    ??_netw_memcpy_0
//   17   do
//   18   {
//   19     c=*s++;
??_netw_memcpy_1:
        LD      R17, Z+
//   20     *d++=c;
        ST      X+, R17
//   21   }
//   22   while(--l);
        DEC     R16
        BRNE    ??_netw_memcpy_1
??_netw_memcpy_0:
        RET
//   23 }


Вот и вопрос, ничего там в оптимизаторе случайно не сломали? А то что-то совсем мрачно. И вроде не было такого.

Теперь вопрос номер два. Сунул ему более глобальный файл. Получил вот такое
Код
F:\GCC\kgp_avr\avr-kgp-elf\bin>gcc -O9 -S network.c -mmcu=atmega168
network.c: In function 'INT_ETH_PROCESS_PKT2':
network.c:810: error: unable to find a register to spill in class 'POINTER_REGS'
network.c:810: error: this is the insn:
(insn 3268 2214 3269 284 network.c:88 (set (mem/c:QI (plus:HI (reg/f:HI 28 r28)
                (const_int 24 [0x18])) [27 S1 A8])
        (reg:QI 30 r30)) 4 {*movqi} (nil))
network.c:810: internal compiler error: in spill_failure, at reload1.c:2093
Please submit a full bug report,
with preprocessed source if appropriate.
See <http://gcc.gnu.org/bugs.html> for instructions.

F:\GCC\kgp_avr\avr-kgp-elf\bin>


Баг-репорт отправлять прямо туда или Вам?
klen
1. чтото мне тож это не нравица, есть о чем подумать
2. -O9 всетаки нет такого уровня оптимизации, поменяйте на 0,1,2,3,s. должен пережевать исходник.
3. ветка 4.4 нестабильная, вылазит гадость, болше чем из стабильных.
Rst7
Цитата
-O9 всетаки нет такого уровня оптимизации, поменяйте на 0,1,2,3,s. должен пережевать исходник.


-O3 тоже фаталити. То с девяткой я погорячился (пользуюсь то IAR'ом)
klen
Цитата(Rst7 @ Nov 13 2008, 12:22) *
-O3 тоже фаталити. То с девяткой я погорячился (пользуюсь то IAR'ом)

кусок кода который роняет компиллер можете дать?
Rst7
Там почти что одна огромная функция. Набитая циклами, кейсами, goto и прочим. В личку могу дать.
klen
Цитата(Rst7 @ Nov 13 2008, 13:02) *
Там почти что одна огромная функция. Набитая циклами, кейсами, goto и прочим. В личку могу дать.

давайте
AHTOXA
А мне что-нить подскажете? smile.gif
demiurg_spb
Цитата(klen @ Nov 13 2008, 12:15) *
1. чтото мне тож это не нравица, есть о чем подумать
Да и раньше было не сахар (я тут писал об оптимизации скорости вывода на дисплей).
Таким макаром циклы реализовывать это надо уметь.
Самое обидное, что ничего в этом направлении не меняется уже давно...
Rst7
Цитата
давайте


Могу, кстати, еще в досыл дать иаровский листинг, дабы было видно, куда стремиться wink.gif
AHTOXA
Цитата(AHTOXA @ Nov 13 2008, 16:09) *
А мне что-нить подскажете? smile.gif


В общем, сделал пока так. Сравнил elf-ы, производимые arm-kgp-elf- и arm-none-eabi-, нашёл, что в arm-kgp-elf- есть "лишняя" секция .eh_frame. И скомандовал objcopy выкинуть эту секцию при формировании bin-файла. bin стал получаться нормального размера, светодиод мигает.
(Напомню, я пытаюсь работать с arm-kgp-elf- и stm32)
Я правильно сделал?
Petka
Цитата(klen @ Nov 6 2008, 16:12) *
кто нибудь использует bigendian, если да то где и в чем.

XScale IXP4xx
klen
Цитата(AHTOXA @ Nov 13 2008, 22:44) *
В общем, сделал пока так. Сравнил elf-ы, производимые arm-kgp-elf- и arm-none-eabi-, нашёл, что в arm-kgp-elf- есть "лишняя" секция .eh_frame. И скомандовал objcopy выкинуть эту секцию при формировании bin-файла. bin стал получаться нормального размера, светодиод мигает.
(Напомню, я пытаюсь работать с arm-kgp-elf- и stm32)
Я правильно сделал?


я также делаю, тока по другому
.eh_frame - секция исполняемого кода, содержит код относящийся к механизму обработки исключений, при компиляции языка С механизм исключения отсутствует, поэтому этот код ессесено не нужен. Текущее состояние компиллера таково что без разбора сует эту секцию всегда независимо от языка с которого компиляется исходник. Я использую С для армов, соответственно код этой мертвой секции тока бесполезна использует флеш. можно удалить ее как Вы предлагаете strip --remove-section=".eh_frame" , но проще ее просто не пропустить на выход линкера прописав в скрипте линкера :

SECTIONS
{
.......................
.......................

/DISCARD/ : /*секцию исключений ф топку*/
{
*(.eh_frame)
}

........................
........................

}

Если вы умудряетесь использовать C++ (я это делал тока для тестирования, кстата вшивалось в lpc2103? шмешно, правдв?) и возможно используете исключения то эту секцию удалять нельзя. Я даже боюсь предположить что будет если кинуть ексепшен smile.gif если соберется проект.
AHTOXA
Цитата(klen @ Nov 14 2008, 12:52) *
я также делаю, тока по другому
.eh_frame - секция исполняемого кода, содержит код относящийся к механизму обработки исключений
Теперь стало понятнее. Указал линкеру, что эту секцию надо поместить в ROM:
Код
...
    *(.text)        /* Program code */
    *(.eh_frame)    /* exceptions */
    *(.rodata)      /* Read only data */
    } >rom

, всё стало нормально без выкидывания. Пусть будет, cpp я использовать собираюсь (scmRtos), правда, без exceptions наверное smile.gif
Цитата
Если вы умудряетесь использовать C++ (я это делал тока для тестирования, кстата вшивалось в lpc2103? шмешно, правдв?)

Тут люди в AVR-ках его используют, и ничего, нормуль:-)
Цитата
если соберется проект.

А что, есть сомнения? Вообще, что посоветуете использовать для cortex-m3, arm-kgp-elf- или arm-none-eabi- из Sourcery G++ ?
klen
>А что, есть сомнения?

есть сомнения в целесообразности

>Вообще, что посоветуете использовать для cortex-m3, arm-kgp-elf- или arm-none-eabi- из Sourcery G+

выбери то что меньше глючить и дает лучший код
Сергей Борщ
Цитата(klen @ Nov 14 2008, 08:52) *
Текущее состояние компиллера таково что без разбора сует эту секцию всегда независимо от языка с которого компиляется исходник.
А CFLAGS += -fno-exceptions не спасает?
klen
Цитата(Сергей Борщ @ Nov 15 2008, 11:14) *
А CFLAGS += -fno-exceptions не спасает?

при компиляции С эта опция по умолчанию должна быть выключена, так написано в описании фронтэнда GCC. C++ по умолчанию включена.
AHTOXA
Цитата(klen @ Nov 15 2008, 14:03) *
выбери то что меньше глючить и дает лучший код


Хорошо, спрошу иначе: какие потенциальные преимущества у arm-kgp-elf- перед arm-none-eabi- ? Кроме того, что свежак? smile.gif

Цитата(Сергей Борщ @ Nov 15 2008, 14:14) *
А CFLAGS += -fno-exceptions не спасает?


Да там чисто сишный примерчик. Но всё равно попробую.
ReAl
Цитата(Rst7 @ Nov 13 2008, 08:49) *
Как-то IAR с этим справляется на ура:

бз-з-з-з...
Странно.
WinAVR-20060421 (3.4.6) -Os
Код
.global    netw_memcpy
    .type    netw_memcpy, @function
netw_memcpy:
/* prologue: frame size=0 */
/* prologue end (size=0) */
    movw r26,r24
    movw r30,r22
.L7:
    tst r20
    breq .L1
    ld r24,Z+
    st X+,r24
    subi r20,lo8(-(-1))
    rjmp .L7
.L1:
    ret
/* epilogue: frame size=0 */


WinAVR-20060421 (3.4.6) -O2 и -O3
Код
.global    netw_memcpy
    .type    netw_memcpy, @function
netw_memcpy:
/* prologue: frame size=0 */
/* prologue end (size=0) */
    movw r26,r24
    movw r30,r22
    rjmp .L7
.L9:
    ld r24,Z+
    st X+,r24
    subi r20,lo8(-(-1))
.L7:
    tst r20
    brne .L9
    ret
/* epilogue: frame size=0 */


WinAVR-20070525 (4.1.2) и WinAVR-20071221 (4.2.2) -Os, -O2 и -O3
Код
.global    netw_memcpy
    .type    netw_memcpy, @function
netw_memcpy:
/* prologue: frame size=0 */
/* prologue end (size=0) */
    tst r20
    breq .L5
    movw r26,r22
    movw r30,r24
.L4:
    ld r24,X+
    st Z+,r24
    subi r20,lo8(-(-1))
    brne .L4
.L5:
    ret
/* epilogue: frame size=0 */


Что-то их не туда понесло в более свежих версиях sad.gif
То-то я не спешу менять...
klen
получилось
опции -Os


Код
void cpy ( char* x , char* y , size_t s  )
{
  if ( !s ) return;
  size_t t = s;
  do
   {
     *(y++) = *(x++);
   }
  while( --t );
}


Код
000000DC:   01FC        MOVW      R30,R24        Copy register pair
000000DD:   01DB        MOVW      R26,R22        Copy register pair
22:         if ( !s ) return;
000000DE:   1541        CP        R20,R1         Compare
000000DF:   0551        CPC       R21,R1         Compare with carry
000000E0:   F029        BREQ      PC+0x06        Branch if equal
26:            *(y++) = *(x++);
000000E1:   9181        LD        R24,Z+         Load indirect and postincrement
000000E2:   938D        ST        X+,R24         Store indirect and postincrement
28:         while( --t );
000000E3:   5041        SUBI      R20,0x01       Subtract immediate
000000E4:   4050        SBCI      R21,0x00       Subtract immediate with carry
000000E5:   CFF8        RJMP      PC-0x0007      Relative jump
000000E6:   9508        RET                      Subroutine return


это вроде то что нужно
что характерно, при замене типа счетчика на char начинается маразм.
Rst7
Цитата(klen @ Nov 16 2008, 23:12) *
что характерно, при замене типа счетчика на char начинается маразм.

Дык надо лечить, тем более, что явно чтото сломали. Зачем мне int в счетчике, если нативный тип для AVR - unsigned char.

Вот приведенный выше результат после 4.1.2 и 4.2.2 - это то, что должно быть.

PS А что с падением? Или там совсем мрачно?
Rst7
Цитата
это вроде то что нужно


Кстати, и к этому коду есть вопросы. IAR
Код
        RSEG CODE:CODE:NOROOT(1)
//   27 __x_z void cpy ( char* x , char* y , size_t s  )
cpy:
//   28 {
        MOV     R19, R25
        MOV     R20, R24
//   29   if ( !s ) return;
        MOV     R18, R16
        OR      R18, R17
        BREQ    ??cpy_0
//   30   size_t t = s;
        MOVW    R25:R24, R17:R16
//   31   do
//   32    {
//   33      *(y++) = *(x++);
??cpy_1:
        LD      R16, X+
        ST      Z+, R16
//   34    }
//   35   while( --t );
        SBIW    R25:R24, 1
        BRNE    ??cpy_1
??cpy_0:
        MOV     R24, R20
        MOV     R25, R19
        RET
//   36 }


И тут есть куда копать...
klen
Цитата(Rst7 @ Nov 17 2008, 09:03) *
Кстати, и к этому коду есть вопросы. IAR

какие? у ИАРа на две инструкции длинее. иар не смог сделать группировку и выполнить movw
причины почему падает не смотрел, я рабочие дни работаю, хобби только по выходным
Rst7
Цитата
иар не смог сделать группировку и выполнить movw


Зато GCC перестарался с циклом - лишних 3 такта на итерацию. Что суть более зло. Правда, я там видел у Вас -Os, а что будет с -O3?
ukpyr
вопрос к klen : на какую папку настроена ваша сборка avr-gcc ?
при запуске avr-gcc выдает сообщение что не находит сс1.
при добавлении пути к сс1 в %PATH% ругается что не находит какой-то библиотечный .o файл.
в сборках WinAVR этого не было.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.