|
Косяк GCC или мой? реализация LPC кодека под ARM7 |
|
|
|
Apr 28 2007, 06:14
|
Участник

Группа: Новичок
Сообщений: 19
Регистрация: 15-12-06
Пользователь №: 23 530

|
Есть самописный LPC кодек, написан на С (переделанный OpenLPC). Есть его конкретная реализация на ПК (моя dll + не мой GUI, C++Builder) Есть его конкретная реализация под ARM7 (Keil в качестве IDE+ поставляемый с ним GCC)
Проблема в том, что со стороны ПК работает всё, а со стороны ARM только(!!!) кодирование. Процедура декодирования на ARM не работает (точнее она не корректно работает, проверялось отсылкой результатов по rs232 при обработке 1-го фиксированного кадра). С код кодека: процедур кодирования, декодирования, инициализации - абсолютно идентичен как для ПК, так и для ARM7.
Проц: ADuC7021 Компилятор: GCC3.1.1
правильно ли моё подозрение, что это косяк GCC?
|
|
|
|
|
Apr 28 2007, 11:14
|

Дух погибшего транзистора
   
Группа: Свой
Сообщений: 877
Регистрация: 6-09-05
Из: Москва
Пользователь №: 8 288

|
Цитата(beer_warrior @ Apr 28 2007, 11:37)  А простите каким образом АРМу попадут х86 бинарники? А на самом деле бинарники не нужны. Можно вполне устроить себе хорошую жизнь например вот так Код char buffer[256]; ... void doing_somthing_with_32bitarray(int *array, int size); ... doing_somthing_with_32bitarray((int*)&buffer[43], 8); хехе
--------------------
Yes, there are two paths you can go by But in the long run Theres still time to change the road youre on.
|
|
|
|
|
Apr 28 2007, 12:01
|
Участник

Группа: Новичок
Сообщений: 19
Регистрация: 15-12-06
Пользователь №: 23 530

|
поставил я значит GNUARM 4.1.1 вместо 3.1.1, теперь Keil материтcя: ....libaduc7024.a(irq.o) uses hardware FP, whereas ....elf uses software FP когда он так матерился на startup я ему -mno-fp прописал, а тут куда чего он хочет?
|
|
|
|
|
Apr 28 2007, 12:24
|

Профессионал
    
Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380

|
Цитата А на самом деле бинарники не нужны. Можно вполне устроить себе хорошую жизнь например вот так Собсно мое первое предположение. Цитата когда он так матерился на startup я ему -mno-fp прописал, а тут куда чего он хочет? Трудно сказать. А отедова сборку брали? С Yagarto подобная ботва была, а с GNUARM все чики-пики. Но самое главное проверьте все-таки Билдерские прагмы и ключи.
--------------------
Вони шукають те, чого нема, Щоб довести, що його не існує.
|
|
|
|
|
Apr 28 2007, 13:04
|
Знающий
   
Группа: Свой
Сообщений: 601
Регистрация: 22-09-05
Из: Kharkov
Пользователь №: 8 847

|
Цитата(krofork @ Apr 28 2007, 12:01)  поставил я значит GNUARM 4.1.1 вместо 3.1.1, теперь Keil материтcя: ....libaduc7024.a(irq.o) uses hardware FP, whereas ....elf uses software FP когда он так матерился на startup я ему -mno-fp прописал, а тут куда чего он хочет? libaduc7024.a откуда? Если это не в комплекте GCC, то нужно ее пересобрать с software fp, или GCC с hardware fp.
--------------------
- А мораль отсюда такова: всякому овощу свое время. Или, хочешь, я это сформулирую попроще: никогда не думай, что ты иная, чем могла бы быть иначе, чем будучи иной в тех случаях, когда иначе нельзя не быть. © Lewis Carroll. Alice's adventures in wonderland.
|
|
|
|
|
Apr 28 2007, 14:03
|
Участник

Группа: Новичок
Сообщений: 19
Регистрация: 15-12-06
Пользователь №: 23 530

|
>libaduc7024.a откуда? это из кейла - C:\Keil\ARM\INC\ADI\ - инклюды для аналог-девайсез процов  Это же в GCC3.1.1 работало без подобных сообщений, да и не может ЭТО быть hardware FP, если это(libaduc7024.a) относится только к ADuC'ам у которых (насколько мне известно) ни одного нет этого hardware FP
|
|
|
|
|
Apr 28 2007, 14:16
|
Знающий
   
Группа: Свой
Сообщений: 601
Регистрация: 22-09-05
Из: Kharkov
Пользователь №: 8 847

|
Цитата(krofork @ Apr 28 2007, 14:03)  >libaduc7024.a откуда? это из кейла - C:\Keil\ARM\INC\ADI\ - инклюды для аналог-девайсез процов  Это же в GCC3.1.1 работало без подобных сообщений, да и не может ЭТО быть hardware FP, если это(libaduc7024.a) относится только к ADuC'ам у которых (насколько мне известно) ни одного нет этого hardware FP libaduc7024.a - это библиотека, инклюды здесь ни при чем. Скомпилирована она можеть быть с разными флагами. Отсутствие FP, еще не факт, что нельзя скомпилировать файл с HWFP. Суть в том, что объектник (как часть либы) содержит признаки HWFP (формат ELF). Возможно есть библиотека libfloat.a. Возмодно нужно ее ипользовать или наоборот, не использовать. В общем библиотеки, скомпилированые разными версиями GCC могут быть не совместимыми по признакам (флагам) ELF файлов. Как правило спасает перекомпиляци библиотеки.
--------------------
- А мораль отсюда такова: всякому овощу свое время. Или, хочешь, я это сформулирую попроще: никогда не думай, что ты иная, чем могла бы быть иначе, чем будучи иной в тех случаях, когда иначе нельзя не быть. © Lewis Carroll. Alice's adventures in wonderland.
|
|
|
|
|
Apr 28 2007, 14:27
|
Знающий
   
Группа: Свой
Сообщений: 601
Регистрация: 22-09-05
Из: Kharkov
Пользователь №: 8 847

|
Не важно, есть ли FP. Все зависит от ключей компиляции. Пример: файл x.c Код void x() { } Код arm-elf-gcc -c -msoft-float -o xs.o x.c arm-elf-gcc -c -mhard-float -o xh.o x.c Дизассемблер файлов xs.o и xh.o дает одинаковый результат. А вот Код arm-elf-objdump -x xs.o
xs.o: file format elf32-littlearm xs.o architecture: arm, flags 0x00000010: HAS_SYMS start address 0x00000000 private flags = 200: [APCS-32] [FPA float format] [software FP]
Sections: Idx Name Size VMA LMA File off Algn 0 .text 00000010 00000000 00000000 00000034 2**2 CONTENTS, ALLOC, LOAD, READONLY, CODE 1 .data 00000000 00000000 00000000 00000044 2**0 CONTENTS, ALLOC, LOAD, DATA 2 .bss 00000000 00000000 00000000 00000044 2**0 ALLOC 3 .comment 00000012 00000000 00000000 00000044 2**0 CONTENTS, READONLY SYMBOL TABLE: 00000000 l df *ABS* 00000000 x.c 00000000 l d .text 00000000 00000000 l d .data 00000000 00000000 l d .bss 00000000 00000000 l F .text 00000000 $a 00000000 l d .comment 00000000 00000000 g F .text 00000010 x Код arm-elf-objdump -x xh.o
xh.o: file format elf32-littlearm xh.o architecture: arm, flags 0x00000010: HAS_SYMS start address 0x00000000 private flags = 0: [APCS-32] [FPA float format]
Sections: Idx Name Size VMA LMA File off Algn 0 .text 00000010 00000000 00000000 00000034 2**2 CONTENTS, ALLOC, LOAD, READONLY, CODE 1 .data 00000000 00000000 00000000 00000044 2**0 CONTENTS, ALLOC, LOAD, DATA 2 .bss 00000000 00000000 00000000 00000044 2**0 ALLOC 3 .comment 00000012 00000000 00000000 00000044 2**0 CONTENTS, READONLY SYMBOL TABLE: 00000000 l df *ABS* 00000000 x.c 00000000 l d .text 00000000 00000000 l d .data 00000000 00000000 l d .bss 00000000 00000000 l F .text 00000000 $a 00000000 l d .comment 00000000 00000000 g F .text 00000010 x Обратите внимание на строчку private flags.
--------------------
- А мораль отсюда такова: всякому овощу свое время. Или, хочешь, я это сформулирую попроще: никогда не думай, что ты иная, чем могла бы быть иначе, чем будучи иной в тех случаях, когда иначе нельзя не быть. © Lewis Carroll. Alice's adventures in wonderland.
|
|
|
|
|
Apr 28 2007, 14:30
|
Участник

Группа: Новичок
Сообщений: 19
Регистрация: 15-12-06
Пользователь №: 23 530

|
в общем есть линкерный скрипт (взят из примера) в котором есть строка INPUT(-laduc7024) эта строка РАБОТАЛА с предыдущим GCC3.1.1. Не уверен, но мне кажется (да, глупая фраза для инженера  ) что она нужна чтобы потом можно было сделать IRQ = MY_IRQ_FUNC; Потому как если её удалть, то линкер матерится на нересолвенные ссылки, относящиеся к прерываниям
|
|
|
|
|
Apr 28 2007, 14:36
|
Знающий
   
Группа: Свой
Сообщений: 601
Регистрация: 22-09-05
Из: Kharkov
Пользователь №: 8 847

|
Цитата(krofork @ Apr 28 2007, 14:30)  в общем есть линкерный скрипт (взят из примера) в котором есть строка INPUT(-laduc7024) эта строка РАБОТАЛА с предыдущим GCC3.1.1. Не уверен, но мне кажется (да, глупая фраза для инженера  ) что она нужна чтобы потом можно было сделать IRQ = MY_IRQ_FUNC; Потому как если её удалть, то линкер матерится на нересолвенные ссылки, относящиеся к прерываниям А что в этой библиотеке? Вы ее используете? Или Ваш IDE? Может она в Вашем случае не нужна? Предполагаю, что там могут быть функции работы с периферией. Попобуйте указать опцию -mhard-float И покажите вывод команды arm-elf-gcc -v И желательно сравнить ее с предидущей версией. Мой вариант: Код arm-elf-gcc -v Reading specs from /usr/local/arm/lib/gcc-lib/arm-elf/3.3.6/specs Configured with: /home/amw/devel/rdtt/arm7tdmi/src/gcc-3.3.6/configure --prefix=/usr/local/arm --disable-shared --host=i686-pc-linux-gnu --build=i686-pc-linux-gnu --target=arm-elf --with-cpu=arm7tdmi --enable-multilib --enable-interwork --disable-threads --enable-targets=arm-elf,thumb-elf --enable-languages=c --disable-nls Thread model: single gcc version 3.3.6 По умолчанию получается hard-float
Сообщение отредактировал amw - Apr 28 2007, 14:39
--------------------
- А мораль отсюда такова: всякому овощу свое время. Или, хочешь, я это сформулирую попроще: никогда не думай, что ты иная, чем могла бы быть иначе, чем будучи иной в тех случаях, когда иначе нельзя не быть. © Lewis Carroll. Alice's adventures in wonderland.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|