GenaSPB 11 19 мая, 2010 Опубликовано 19 мая, 2010 · Жалоба свежак: для ARM http://klen.org/Files/DevTools/kgp_arm_eabi_20100509.7z наконецто решена проблема с увеличением кода при использовании операции деления для типа uint64_t (в код прилазила обработка исключений, разматывание стека даже) Наконец-то в одном месте собрались Jtag-программатор, я и отлажтиваемое устройство... Получаю от линкера undefined reference to `__aeabi_llsl' - в коде в указанном месте сдвиг 64-х битной переменной влево. Закоментировал. Часть кода заработала. В целом проект не заработал (прпрывания не запустились, что-ли?). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
klen 1 19 мая, 2010 Опубликовано 19 мая, 2010 · Жалоба Наконец-то в одном месте собрались Jtag-программатор, я и отлажтиваемое устройство... Получаю от линкера undefined reference to `__aeabi_llsl' - в коде в указанном месте сдвиг 64-х битной переменной влево. Закоментировал. Часть кода заработала. В целом проект не заработал (прпрывания не запустились, что-ли?). че за процессор? кусок кода который глюк производит с неразрешенной ссыдлкой. посмотрю. я на делениях только проверял. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 19 мая, 2010 Опубликовано 19 мая, 2010 (изменено) · Жалоба 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}^ Изменено 19 мая, 2010 пользователем Genadi Zawidowski Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
oll 0 21 мая, 2010 Опубликовано 21 мая, 2010 · Жалоба 2 klen а GCC для STM8 планов нет? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
klen 1 21 мая, 2010 Опубликовано 21 мая, 2010 · Жалоба 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? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
oll 0 21 мая, 2010 Опубликовано 21 мая, 2010 · Жалоба да пока такая перспектива не просматриватся. а нада оно вообще? нужен ли вообще stm8? Извиняюсь что не в тему - поясню. У нас тут такая бодяга с AVR - цены, например mega48 возросли в 3 раза ~2.75$. Ищу альтернативу. Мое мнение - STM8 подходящая замена AVRам (для 5-ти вольтовых устройств). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 21 мая, 2010 Опубликовано 21 мая, 2010 (изменено) · Жалоба 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; Изменено 21 мая, 2010 пользователем Genadi Zawidowski Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
klen 1 22 мая, 2010 Опубликовано 22 мая, 2010 · Жалоба 2_Genadi Zawidowski я посмотрю в чем дело. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
klen 1 24 мая, 2010 Опубликовано 24 мая, 2010 · Жалоба 2_Genadi Zawidowski я посмотрю в чем дело. посмотрел, действительно ... наверно это я накосячил когда libgcc для ликвидации unwind. буду рыть. я троху изменил метод сборки libgcc скорее всего сдвиги копилятся но изза ошибки в скрипте они забылись прилинковатся к libgcc Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vasen 3 24 мая, 2010 Опубликовано 24 мая, 2010 · Жалоба klen, спасибо Вам за сборку для arm. А не имеется ли оной для Ubuntu? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
klen 1 24 мая, 2010 Опубликовано 24 мая, 2010 · Жалоба klen, спасибо Вам за сборку для arm. А не имеется ли оной для Ubuntu? имеется Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vasen 3 24 мая, 2010 Опубликовано 24 мая, 2010 · Жалоба Буду благодарен за ссылку на архив. Спасибо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
klen 1 25 мая, 2010 Опубликовано 25 мая, 2010 · Жалоба свежак для 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 это както криво - пока я пакеты делать не собираюсь Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ARV 1 26 мая, 2010 Опубликовано 26 мая, 2010 · Жалоба я дико извиняюсь, уважаемый klen, но ваша сборка для AVR чем отличается от WinAVR-20100110 ? просто я никогда не следил за развитием версий и т.п., но раз все хвалят ваши сборки - хочется и мне попробовать :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
klen 1 26 мая, 2010 Опубликовано 26 мая, 2010 · Жалоба я дико извиняюсь, уважаемый 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 опятже в наших рядах(правда этот паразит кудато пропал и шифруетсо;) мож женился? ) ну вот примерно как то татк Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться