|
|
  |
свежак KGP win32/arm/avr/mips/m68k, GNU tools chain |
|
|
|
May 19 2010, 08:36
|

Профессионал
    
Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634

|
Цитата(klen @ May 10 2010, 22:36)  свежак: для ARM http://klen.org/Files/DevTools/kgp_arm_eabi_20100509.7zнаконецто решена проблема с увеличением кода при использовании операции деления для типа uint64_t (в код прилазила обработка исключений, разматывание стека даже) Наконец-то в одном месте собрались Jtag-программатор, я и отлажтиваемое устройство... Получаю от линкера Код undefined reference to `__aeabi_llsl' - в коде в указанном месте сдвиг 64-х битной переменной влево. Закоментировал. Часть кода заработала. В целом проект не заработал (прпрывания не запустились, что-ли?).
|
|
|
|
|
May 19 2010, 09:21
|

бессмертным стать можно тремя способами
    
Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912

|
Цитата(Genadi Zawidowski @ May 19 2010, 12:36)  Наконец-то в одном месте собрались Jtag-программатор, я и отлажтиваемое устройство... Получаю от линкера Код undefined reference to `__aeabi_llsl' - в коде в указанном месте сдвиг 64-х битной переменной влево. Закоментировал. Часть кода заработала. В целом проект не заработал (прпрывания не запустились, что-ли?). че за процессор? кусок кода который глюк производит с неразрешенной ссыдлкой. посмотрю. я на делениях только проверял.
|
|
|
|
|
May 19 2010, 17:37
|

Профессионал
    
Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634

|
AT91SAM7S64, ARM mode, проект (tc1*.zip) я выкладывал. Объём (от yagarto) стал меньше процента на 3-4. Цитата - в коде в указанном месте сдвиг 64-х битной переменной влево. Код вот: Код void prog_dds1_ftw(const uint_least64_t * value, unsigned char freqpow, unsigned char ddsmult) { uint_least64_t val; if (freqpow != 0) { val = * value << freqpow; // собственно эта строка value = & val; }
} А что насчёт прерываний скажете? Похоже на то, что не возвращается или не входит в прерывание. Можете сказать, какие регистры надо сохранять? (у меня ассемблерный кусок обработчика такой): Код IRQHandler:
/* Save interrupt context on the stack to allow nesting */ sub lr, lr, #4 stmfd sp!, {lr} mrs lr, SPSR stmfd sp!, {r0, lr}
/* Write in the IVR to support Protect Mode */ ldr lr, =AT91C_BASE_AIC ldr r0, [r14, #AIC_IVR] str lr, [r14, #AIC_IVR]
/* Branch to interrupt handler in Supervisor mode */ msr CPSR_c, #ARM_MODE_SVC stmfd sp!, {r1-r3, r4, r12, lr} mov lr, pc bx r0 ldmia sp!, {r1-r3, r4, r12, lr} msr CPSR_c, #ARM_MODE_IRQ | I_BIT
/* Acknowledge interrupt */ ldr lr, =AT91C_BASE_AIC str lr, [r14, #AIC_EOICR]
/* Restore interrupt context and branch back to calling code */ ldmia sp!, {r0, lr} msr SPSR_cxsf, lr ldmia sp!, {pc}^
Сообщение отредактировал Genadi Zawidowski - May 19 2010, 17:42
|
|
|
|
|
May 21 2010, 09:51
|

бессмертным стать можно тремя способами
    
Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912

|
2_Genadi Zawidowski Код void prog_dds1_ftw(const uint_least64_t * value, unsigned char freqpow, unsigned char ddsmult) { uint_least64_t val; if (freqpow != 0) { val = * value << freqpow; // собственно эта строка value = & val; }
} я проверил сдвиг на lpc2103 - сдвиг работает, и __aeabi_llsl не использует, покажите ключи компиллера котрыми исходник компиляте c прерываниями разбирайтесь сами - компиллер тут не причем. смотрим в вашу функцию value = & val; вы присваиваете константному указателю адресс локальной переменной размещенной на стеке, котрая скорее всего херится при выходе из функции. по моему разумению это сразу две ошибки в одной строчеке 2_oll да пока такая перспектива не просматриватся. а нада оно вообще? нужен ли вообще stm8?
|
|
|
|
|
May 21 2010, 20:56
|

Профессионал
    
Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634

|
klen, я привёл кусок функции. Естественно, никаких возвратов указателей из функции не происходит. Ключи компилятора в том проекте, что Вы уже один раз исследовали. На всякий случай выделяю минимальный код: Код unsigned long long v; unsigned char n;
int main(void) {
v <<= n; v >>= n;
return 0; } Ключевм моментом являетмся неконстантный счётчик сдвигов. Цитата arm-kgp-eabi-gcc -x assembler-with-cpp -c -mcpu=arm7tdmi -g -gdwarf-2 crt_sam7s.s -o crt_sam7s.o arm-kgp-eabi-gcc -c -mcpu=arm7tdmi -Os -gdwarf-2 -fomit-frame-pointer -Wall -Wstrict-prototypes -DNDEBUG=1 -MD -MP -MF .dep/main.o.d -I . -I.. main.c -o main.o arm-kgp-eabi-gcc ./crt_sam7s.o ./main.o -mcpu=arm7tdmi -nostartfiles -T./sam7x64_rom.ld -Wl,-Map=tc1_rom.map,--cref,--no-warn-mismatch -lm -o tc1_rom.elf ./main.o: In function `main': C:\user\test/main.c:9: undefined reference to `__aeabi_llsl' C:\user\test/main.c:10: undefined reference to `__aeabi_llsr' collect2: ld returned 1 exit status make.EXE: *** [tc1_rom.elf] Error 1 Код вы присваиваете константному указателю Вобще-то указатель не константный, а указатель на константу... Разница вот: const char * cp; и char * const pc;
Сообщение отредактировал Genadi Zawidowski - May 21 2010, 21:28
|
|
|
|
|
May 24 2010, 10:38
|
Участник

Группа: Участник
Сообщений: 74
Регистрация: 30-03-06
Пользователь №: 15 624

|
klen, спасибо Вам за сборку для arm. А не имеется ли оной для Ubuntu?
|
|
|
|
|
May 24 2010, 17:57
|
Участник

Группа: Участник
Сообщений: 74
Регистрация: 30-03-06
Пользователь №: 15 624

|
Буду благодарен за ссылку на архив. Спасибо.
|
|
|
|
|
May 25 2010, 22:14
|

бессмертным стать можно тремя способами
    
Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912

|
свежак для arm, я полагаю окончательно решен вопрос с ликвидацие unwind кода при делении uint64_t, и вообще с uint64_t, все должно быть хорошо. http://klen.org/Files/DevTools/kgp_arm_eabi_20100525.7zсвежак для мипсов http://klen.org/Files/DevTools/kgp_mips_elf_20100525.7zсвежак для авыэров http://klen.org/Files/DevTools/kgp_avr_20100525.7zсвежак для mingw32 http://klen.org/Files/DevTools/kgp_mingw32_20100525.7zсуда помимо самого компиллера, runtime lib и win32 api lib я собрал и положил: libglew32 - пригодится для программирования трехмерной графики на OpenGL libelf - работа с ELF бинарниками libpthreads - POSIX потоки лоя масдая libftd2xx - работа с USB-моcтами FT2232/FT485/.... libexpat - работа с XML libiconv,libcharset - i18 QT-4.7 не положил - зело жирная, не влезет  2_Genadi Zawidowski косяки которые Вы обраружили повидимуму ликвидировал, Ваш примерчик собирается, я его для опыта немного модифицировал - добавил деление запускал на lpc2103 и stm32f103rbt6 - вычисления без ошибок Код volatile unsigned long long v; volatile unsigned char n;
int main(void) { v <<= n; v >>= n; v /= n; return 0; } вот выход: Код arm-kgp-eabi-gcc -x assembler-with-cpp -c -mcpu=arm7tdmi -g -gdwarf-2 crt_sam7s.s -o crt_sam7s.o arm-kgp-eabi-gcc -c -mcpu=arm7tdmi -Os -gdwarf-2 -fomit-frame-pointer -Wall -Wstrict-prototypes -DNDEBUG=1 -fdata-sections -ffunction-sections -MD -MP -MF .dep/main.o.d -I . -I.. main.c -o main.o arm-kgp-eabi-gcc ./crt_sam7s.o ./main.o -mcpu=arm7tdmi -nostartfiles -T./sam7x64_rom.ld -Wl,-Map=tc1_rom.map,--cref,--no-warn-mismatch -Wl,-gc-sections -lm -o tc1_rom.elf d:/kgp/kgp_arm_eabi/bin/../lib/gcc/arm-kgp-eabi/4.6.0/../../../../arm-kgp-eabi/bin/ld.exe: tc1_rom.elf: warning: allocated section `.data' not in segment arm-kgp-eabi-size tc1_rom.elf text data bss dec hex filename 1968 76 2224 4268 10ac tc1_rom.elf arm-kgp-eabi-objcopy -O ihex tc1_rom.elf tc1_rom.hex а в чем прикол засовывания стеков в bss? 2_Vasen сборка arm на x86_64-linux-gnu компиллер http://klen.org/Files/DevTools/ubuntu64/kg...m_eabi.tar.lzmaархив с библами котрые потребуются компиллеру http://klen.org/Files/DevTools/ubuntu64/lib.tar.lzmaэто както криво - пока я пакеты делать не собираюсь
|
|
|
|
|
May 26 2010, 16:18
|

бессмертным стать можно тремя способами
    
Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912

|
Цитата(ARV @ May 26 2010, 15:46)  я дико извиняюсь, уважаемый klen, но ваша сборка для AVR чем отличается от WinAVR-20100110 ? просто я никогда не следил за развитием версий и т.п., но раз все хвалят ваши сборки - хочется и мне попробовать  я дико извиняюсь, уважаемый ARV, но просто я никогда не следил за развитием WinAVR и т.п. если бе3 шуток то наверно не лучше и не хуже, а ИНАЯ. 1. всегда собирается из SVN транк-ветки. я называю свою сборку 'свежак' потому что свежее trunk нет ничего по определению ( в эту свежесть входять естественно и самые свежие косяки ) 2. собираю со всеми доступными фичами короые получается собрать и запустить( также если получается в проблемных случаях найти ошибки поравить/доделать). Ну например имеет ли winAVR поддержку оптимизаторов Graphite и LTO? в моих сброках они работают (ответ на вопрос о их полезности и умении ими воспользоватся для AVR неочевиден - нада пробывать, для армов видно покрайней мере что код изменяется при их применении ) 3, avr-libc тоже самая свежая + мои собственные правки, обычно добавки новых устройств. Правильнее былобы напрямую добавлять свое творчество в репозиторий avr-libc.... но все как всегда откладывается на завтра... 4, при сборке я эксперементирую с ключами компиляции libgcc libc и тд в попытке выжать максимум из текущей реализации компиллера 5. может и хвалят мои сборки для армов, но про avr это Вам представляется подтвердить. и так, я лично охарактирезовал это все так; WinAVR прочие - более стабильные, моя более интересная. Если вы дружите с асмом, хотите повыжимать из компиллера байты и проценты скорости, интересуетесь не только результатом но и процессом - моя сборка для ВАС, если вам нужен скомпилированный результат то наверно надо проверить какой подойдет. Лично мои проекты ессесено собраны моими сборками - работют в железе и не жужжат, оди такой вотовот пдымется в воздух на аппарате тежелее воздуха  железяка будет стоять в критическом месте, так что я как сапер в этом случае  . ну и последнее - найдете косяг в кодогенерации и кому взывать о помощи? будите в багзилу писать.... или Эрику, через полгода может вселенная услышит. а в нашем ыварианте будем разбиратся - на форуме людей много умных, Толик Соколов aka aesok опятже в наших рядах(правда этот паразит кудато пропал и шифруетсо  мож женился? ) ну вот примерно как то татк
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|