AHTOXA 18 12 ноября, 2008 Опубликовано 12 ноября, 2008 · Жалоба arm-kgp-elf-objcopy -O elf32-littlearm -S ../../out/image.elf ../../out/image.bin Так bin получается маленький, но он получается не bin а elf :( Пока выкрутился так: $(OBJCOPY) -O binary -j .text -S $(ELF) $(BIN) Светодиод моргает! :) Но это конечно не дело... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Rst7 5 13 ноября, 2008 Опубликовано 13 ноября, 2008 · Жалоба Свежак 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 13 ноября, 2008 Опубликовано 13 ноября, 2008 · Жалоба 1. чтото мне тож это не нравица, есть о чем подумать 2. -O9 всетаки нет такого уровня оптимизации, поменяйте на 0,1,2,3,s. должен пережевать исходник. 3. ветка 4.4 нестабильная, вылазит гадость, болше чем из стабильных. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Rst7 5 13 ноября, 2008 Опубликовано 13 ноября, 2008 · Жалоба -O9 всетаки нет такого уровня оптимизации, поменяйте на 0,1,2,3,s. должен пережевать исходник. -O3 тоже фаталити. То с девяткой я погорячился (пользуюсь то IAR'ом) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
klen 1 13 ноября, 2008 Опубликовано 13 ноября, 2008 · Жалоба -O3 тоже фаталити. То с девяткой я погорячился (пользуюсь то IAR'ом) кусок кода который роняет компиллер можете дать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Rst7 5 13 ноября, 2008 Опубликовано 13 ноября, 2008 · Жалоба Там почти что одна огромная функция. Набитая циклами, кейсами, goto и прочим. В личку могу дать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
klen 1 13 ноября, 2008 Опубликовано 13 ноября, 2008 · Жалоба Там почти что одна огромная функция. Набитая циклами, кейсами, goto и прочим. В личку могу дать. давайте Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 18 13 ноября, 2008 Опубликовано 13 ноября, 2008 · Жалоба А мне что-нить подскажете? :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
demiurg_spb 0 13 ноября, 2008 Опубликовано 13 ноября, 2008 · Жалоба 1. чтото мне тож это не нравица, есть о чем подуматьДа и раньше было не сахар (я тут писал об оптимизации скорости вывода на дисплей). Таким макаром циклы реализовывать это надо уметь. Самое обидное, что ничего в этом направлении не меняется уже давно... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Rst7 5 13 ноября, 2008 Опубликовано 13 ноября, 2008 · Жалоба давайте Могу, кстати, еще в досыл дать иаровский листинг, дабы было видно, куда стремиться ;) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 18 13 ноября, 2008 Опубликовано 13 ноября, 2008 · Жалоба А мне что-нить подскажете? :) В общем, сделал пока так. Сравнил elf-ы, производимые arm-kgp-elf- и arm-none-eabi-, нашёл, что в arm-kgp-elf- есть "лишняя" секция .eh_frame. И скомандовал objcopy выкинуть эту секцию при формировании bin-файла. bin стал получаться нормального размера, светодиод мигает. (Напомню, я пытаюсь работать с arm-kgp-elf- и stm32) Я правильно сделал? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Petka 0 13 ноября, 2008 Опубликовано 13 ноября, 2008 · Жалоба кто нибудь использует bigendian, если да то где и в чем. XScale IXP4xx Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
klen 1 14 ноября, 2008 Опубликовано 14 ноября, 2008 · Жалоба В общем, сделал пока так. Сравнил 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? шмешно, правдв?) и возможно используете исключения то эту секцию удалять нельзя. Я даже боюсь предположить что будет если кинуть ексепшен :) если соберется проект. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 18 14 ноября, 2008 Опубликовано 14 ноября, 2008 · Жалоба я также делаю, тока по другому .eh_frame - секция исполняемого кода, содержит код относящийся к механизму обработки исключений Теперь стало понятнее. Указал линкеру, что эту секцию надо поместить в ROM:... *(.text) /* Program code */ *(.eh_frame) /* exceptions */ *(.rodata) /* Read only data */ } >rom , всё стало нормально без выкидывания. Пусть будет, cpp я использовать собираюсь (scmRtos), правда, без exceptions наверное :) Если вы умудряетесь использовать C++ (я это делал тока для тестирования, кстата вшивалось в lpc2103? шмешно, правдв?) Тут люди в AVR-ках его используют, и ничего, нормуль:-) если соберется проект. А что, есть сомнения? Вообще, что посоветуете использовать для cortex-m3, arm-kgp-elf- или arm-none-eabi- из Sourcery G++ ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
klen 1 15 ноября, 2008 Опубликовано 15 ноября, 2008 · Жалоба >А что, есть сомнения? есть сомнения в целесообразности >Вообще, что посоветуете использовать для cortex-m3, arm-kgp-elf- или arm-none-eabi- из Sourcery G+ выбери то что меньше глючить и дает лучший код Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться