Перейти к содержанию
    

свежак KGP win32/arm/avr/mips/m68k

Текущее состояние компиллера таково что без разбора сует эту секцию всегда независимо от языка с которого компиляется исходник.
А CFLAGS += -fno-exceptions не спасает?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А CFLAGS += -fno-exceptions не спасает?

при компиляции С эта опция по умолчанию должна быть выключена, так написано в описании фронтэнда GCC. C++ по умолчанию включена.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

 

А CFLAGS += -fno-exceptions не спасает?

 

Да там чисто сишный примерчик. Но всё равно попробую.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Как-то 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 */

 

Что-то их не туда понесло в более свежих версиях :(

То-то я не спешу менять...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

получилось

опции -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 начинается маразм.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

что характерно, при замене типа счетчика на char начинается маразм.

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

 

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

 

PS А что с падением? Или там совсем мрачно?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

это вроде то что нужно

 

Кстати, и к этому коду есть вопросы. 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 }

 

И тут есть куда копать...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Кстати, и к этому коду есть вопросы. IAR

какие? у ИАРа на две инструкции длинее. иар не смог сделать группировку и выполнить movw

причины почему падает не смотрел, я рабочие дни работаю, хобби только по выходным

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

иар не смог сделать группировку и выполнить movw

 

Зато GCC перестарался с циклом - лишних 3 такта на итерацию. Что суть более зло. Правда, я там видел у Вас -Os, а что будет с -O3?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

вопрос к klen : на какую папку настроена ваша сборка avr-gcc ?

при запуске avr-gcc выдает сообщение что не находит сс1.

при добавлении пути к сс1 в %PATH% ругается что не находит какой-то библиотечный .o файл.

в сборках WinAVR этого не было.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

вопрос к klen : на какую папку настроена ваша сборка avr-gcc ?

при запуске avr-gcc выдает сообщение что не находит сс1.

при добавлении пути к сс1 в %PATH% ругается что не находит какой-то библиотечный .o файл.

в сборках WinAVR этого не было.

это косяг, такого не должно быть. Как Вы его устанавливали?

1. распаковываете архив.

2. кладете содержимое в отдельную папку XXX .

3. прописываете путь к XXX\bin

 

все, из этого положения работатьдолжно сразу. двигать папки содержимого и файлы нельзя.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

так и сделал. не работает :

cc1 -quiet -v -I. -Ilib -imultilib avr5 -iprefix e:\work\tools\prg\lng\c\gcc\avr\bin\../lib/gcc/avr/4.4.0/ -MD out\obj\skss_01.d -MF E:\work\projects\outcome\delta\skss_01\src\out\.dep\skss_01.o.d -MP -MQ out\obj\skss_01.o -DF_CPU=1000000UL -include skss_01.h skss_01.c -quiet -dumpbase skss_01.c -mmcu=atmega16 -auxbase-strip out\obj\skss_01.o -gdwarf-2 -Os -Wall -Wstrict-prototypes -Wundef -std=gnu99 -version -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -ffunction-sections -o c:\windows\Temp/ccTaTY11.s

avr-gcc: CreateProcess: No such file or directory

 

WinAVR 4.1.1 из той же папки компилирует нормально.

 

и еще бинарные файлы вашей сборки намного больше чем у WinAVR : avr/bin занимает 33М против 6М.

Изменено пользователем ukpyr

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2_ukpyr

1. какой архив используете.

2. по размеру. я собираю все библиотеи с отладочной информацией. вдруг понадобится. в прошивку всервно идет только целевой код.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1. какой архив используете.

kgp_avr-bu2.19.50_20081005-gcc4.4.0_20081003-avrlibc1.6.2.7z

 

с последним WinAVR то же самое, пока не могу понять в чем причина.

 

по размеру. я собираю все библиотеи с отладочной информацией. вдруг понадобится. в прошивку всервно идет только целевой код

просто собираю флешку портабельного софта для работы на выездах, приходится экономить объем.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

kgp_avr-bu2.19.50_20081005-gcc4.4.0_20081003-avrlibc1.6.2.7z

 

с последним WinAVR то же самое, пока не могу понять в чем причина.

просто собираю флешку портабельного софта для работы на выездах, приходится экономить объем.

я себе такую тоже сделал.

для этого сделал себе MinGW с динамической конфигурацией путей в момент загрузки консоли.

в пакете всегда есть msys, и все тулсы для сборки проектов win32,AVR,ARM

с эклипсом трудно - на машине в которую воткнуто флеш должна быть еще и ява машина.

 

если хотите могу выложть - переделаете под себя.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...