|
|
  |
scmRTOS & MSPGCC. Ошибка компиляции примеров |
|
|
|
Aug 3 2011, 09:10
|
Участник

Группа: Участник
Сообщений: 39
Регистрация: 23-11-05
Пользователь №: 11 254

|
Цитата(AHTOXA @ Aug 3 2011, 12:53)  Вы с ключами-то разобрались? Если да, то попробуйте убрать KEEP() и откомпилируйте. Увидите сильное уменьшение размера программы (даже чересчур). ключи мои вот: Код ldflags := -mmcu=$(cpu) -Wl,-Map="$(mapfile)",--cref -W1,--gc-sections еще пробовал вот так Код ldflags := -mmcu=$(cpu) -Wl,-Map="$(mapfile)",--cref -W1,--gc-sections -Wl Не совсем понял какие именно KEEP() убрать, убрал все что стоят перед каждым initX. На размер кода это влияния не оказало  UPD Все получилось. у меня было --cref -W1 вместо --cref -Wl (L маленькая) %)
Сообщение отредактировал aliko - Aug 3 2011, 09:13
|
|
|
|
|
Aug 3 2011, 09:15
|
Участник

Группа: Участник
Сообщений: 39
Регистрация: 23-11-05
Пользователь №: 11 254

|
А каков смысл редактирования KEEP поясните пожалуйста? Размер кода уменьшается и без их добавления/убирания. Или это вы ошибку нашли в сборке mspgcc которую надо поправить?
|
|
|
|
|
Aug 3 2011, 10:09
|
Участник

Группа: Участник
Сообщений: 39
Регистрация: 23-11-05
Пользователь №: 11 254

|
Цитата(AHTOXA @ Aug 3 2011, 13:17)  Без KEEP выкидывается не только неиспользуемый код, но и часть нужного. И результат получается неработоспособный. Похоже что и с KEEP выкидывается часть нужного. В моем случае размер кода не зависит от того прописал ли я эти KEEP или нет. И да, код становится неработоспособным...  Написал в рассылку посвященную msp430.gcc Ответил некий Peter Bigot по всей видимости один из разработчиков этого компилятора. Ниже вольный перевод: Цитата Нет никаких причин использовать --gc-sections. Как вы выяснили он скорее всего уберет те вещи которые посчитает неиспользуемыми поскольку текущий скрипт линковщика говорит ему неправду.
Покрайней мере некоторые из этих "неправд" будут откорректированы в течение несольких часов когда я закончу перемещение все разработческих веток чтобы они базировались на GCC 4.6.0 и отправлю изменения которые я собрал у себя, тем не менее я не вижу никаких причин использовать этот флаг с mspgcc.
|
|
|
|
|
Aug 3 2011, 11:26
|

фанат дивана
     
Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684

|
Цитата(aliko @ Aug 3 2011, 16:09)  Похоже что и с KEEP выкидывается часть нужного. В моем случае размер кода не зависит от того прописал ли я эти KEEP или нет. И да, код становится неработоспособным...  Наверняка какой-нибудь скобочки не хватает  (У меня есть разница в размере кода с KEEP и без. Надо будет найти железку и проверить живьём...) Цитата(aliko @ Aug 3 2011, 16:09)  Написал в рассылку посвященную msp430.gcc Ответил некий Peter Bigot по всей видимости один из разработчиков этого компилятора. Собственно, это нормальная реакция разработчика на рапорт вида "почему-то не работает"  Надо же было написать, в чём причина! Тогда он скорее всего поправит. --- Хм. Странно... Я до этого редактировал копию файла msp430.x, и явно указывал её в качестве линкерного скрипта (через LD_FLAGS += -T$(LD_SCRIPT) ). Теперь попробовал исправить оригинальный файл, и ничего не вышло. Пока не понимаю почему. Короче, я так и не понял, в чём там дело. Похоже эти скрипты (20110716\msp430\lib\ldscripts\msp430.x*) лежат там чисто для справки. Даже их удаление ни на что не влияет. Единственный рабочий вариант - сделать копию скрипта, (вставить руками в неё инклюды от соответствующего контроллера), сделать в ней исправления (KEEP) и указать её в качестве скрипта линкеру. При таких условиях -gc-sections работает нормально (проверил в железе).
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Aug 3 2011, 11:29
|
Участник

Группа: Участник
Сообщений: 39
Регистрация: 23-11-05
Пользователь №: 11 254

|
Цитата(AHTOXA @ Aug 3 2011, 15:26)  Единственный рабочий вариант - сделать копию скрипта, (вставить руками в неё инклюды от соответствующего контроллера), сделать в ней исправления (KEEP) и указать её в качестве скрипта линкеру. При таких условиях -gc-sections работает нормально (проверил в железе). Я тоже могу подтвердить. Мое железо тоже заработало!  Экономия в размере прошивки составила 22% что весьма не мало...
Сообщение отредактировал aliko - Aug 3 2011, 11:29
|
|
|
|
|
Aug 5 2011, 08:27
|
Участник

Группа: Участник
Сообщений: 39
Регистрация: 23-11-05
Пользователь №: 11 254

|
Цитата(AHTOXA @ Aug 5 2011, 08:57)  Закоммитил исправления в pre-4. Для mspgcc сегодня тоже были опубликованы патчи исправляющие ошибку с gc-sections. Полезное получилось обсуждение
|
|
|
|
|
Aug 29 2011, 10:56
|
Участник

Группа: Участник
Сообщений: 39
Регистрация: 23-11-05
Пользователь №: 11 254

|
Проблемы с GCC кажется продолжаются. При компиляции проекта последними версиями компилятора получается глючная прошивка. Под отладчиком все работает первый раз нормально, но после перезагрузки начинает сыпать мусор на ЖКИ устройства. В то же время при использовании старой версии компилятора (MSPGCC4 на базе GCC 4.4) подобного не наблюдается и программа работает стабильно. Беда в том что в старом mspgcc4 есть свои глюки в частности не работает printf. Интересный момент: при открытии прошивки олимесковской программой она предупреждает : "Found data at address anavailable in the device" (Найдены данные по адресу недоступному на устройстве). При этом на прошивку полученную от компилятора mspgcc4 и которая работает нормально так не ругается. Я использую контроллер msp430f1611 Ниже я приведу дамп комманды readelf -e для бинарника который глючит. Может кто-то кто хорошо разбирается скажет есть ли в нем что-то не то из-за чего олимекс может так ругаться и программа глючить? К сожалению сам не особо силен в анализе этих данных...( Код ELF Header: Magic: 7f 45 4c 46 01 01 01 ff 00 00 00 00 00 00 00 00 Class: ELF32 Data: 2's complement, little endian Version: 1 (current) OS/ABI: Standalone App ABI Version: 0 Type: EXEC (Executable file) Machine: Texas Instruments msp430 microcontroller Version: 0x1 Entry point address: 0x4000 Start of program headers: 52 (bytes into file) Start of section headers: 288708 (bytes into file) Flags: 0x10000000 Size of this header: 52 (bytes) Size of program headers: 32 (bytes) Number of program headers: 6 Size of section headers: 40 (bytes) Number of section headers: 36 Section header string table index: 33
Section Headers: [Nr] Name Type Addr Off Size ES Flg Lk Inf Al
[ 0] NULL 00000000 000000 000000 00 0 0 0
[ 1] .text PROGBITS 00004000 000bae 007840 00 AX 0 0 2
[ 2] .data PROGBITS 00001100 0083ee 000014 00 WA 0 0 2
[ 3] .bss NOBITS 00001114 008402 000a99 00 WA 0 0 2
[ 4] .noinit NOBITS 00001bae 008402 0000c2 00 WA 0 0 2
[ 5] .vectors PROGBITS 0000ffe0 008402 000020 00 AX 0 0 1
[ 6] .debug_aranges PROGBITS 00000000 008424 00039c 00 0 0 4
[ 7] .debug_pubnames PROGBITS 00000000 0087c0 001fd8 00 0 0 1
[ 8] .debug_info PROGBITS 00000000 00a798 01fbc8 00 0 0 1
[ 9] .debug_abbrev PROGBITS 00000000 02a360 007bbf 00 0 0 1
[10] .debug_line PROGBITS 00000000 031f1f 005233 00 0 0 1
[11] .debug_frame PROGBITS 00000000 037152 001a1a 00 0 0 2
[12] .debug_str PROGBITS 00000000 038b6c 005270 01 MS 0 0 1
[13] .debug_loc PROGBITS 00000000 03dddc 006087 00 0 0 1
[14] .debug_pubtypes PROGBITS 00000000 043e63 00205f 00 0 0 1
[15] .debug_ranges PROGBITS 00000000 045ec2 000654 00 0 0 1
[16] .rodata._ZL7xfCon PROGBITS 00001c70 0000f4 000058 00 A 0 0 2
[17] .rodata._ZL10HART PROGBITS 00001cc8 00014c 00006a 00 A 0 0 2
[18] .rodata.small_fon PROGBITS 00001d32 0001b6 00000e 00 A 0 0 2
[19] .rodata._ZL16font PROGBITS 00001d40 0001c4 0003a8 00 A 0 0 1
[20] .rodata._ZL24font PROGBITS 000020e8 00056c 000100 00 A 0 0 1
[21] .rodata._ZL23font PROGBITS 000021e8 00066c 000138 00 A 0 0 2
[22] .rodata._ZL23font PROGBITS 00002320 0007a4 000138 00 A 0 0 2
[23] .rodata.big_font PROGBITS 00002458 0008dc 00000e 00 A 0 0 2
[24] .rodata._ZL19font PROGBITS 00002466 0008ea 000128 00 A 0 0 1
[25] .rodata._ZL22font PROGBITS 0000258e 000a12 000100 00 A 0 0 1
[26] .rodata._ZL20font PROGBITS 0000268e 000b12 00000d 00 A 0 0 1
[27] .rodata._ZL21font PROGBITS 0000269c 000b20 00001a 00 A 0 0 2
[28] .rodata._ZL21font PROGBITS 000026b6 000b3a 00001a 00 A 0 0 2
[29] .rodata._ZL12adc_ PROGBITS 000026d0 000b54 000005 00 A 0 0 1
[30] .rodata._ZL11cons PROGBITS 000026d5 000b59 000040 00 A 0 0 1
[31] .rodata._ZL8bits_ PROGBITS 00002715 000b99 000010 00 A 0 0 1
[32] .rodata._ZL8bits_ PROGBITS 00002725 000ba9 000005 00 A 0 0 1
[33] .shstrtab STRTAB 00000000 046516 0002ab 00 0 0 1
[34] .symtab SYMTAB 00000000 046d64 0026e0 10 35 147 4
[35] .strtab STRTAB 00000000 049444 002ae1 00 0 0 1
Key to Flags: W (write), A (alloc), X (execute), M (merge), S (strings) I (info), L (link order), G (group), T (TLS), E (exclude), x (unknown) O (extra OS processing required) o (OS specific), p (processor specific)
Program Headers: Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align LOAD 0x000000 0x00001b7c 0x00001b7c 0x00b1f 0x00b1f R 0x1 LOAD 0x000b20 0x0000269c 0x0000269c 0x0008e 0x0008e R 0x1 LOAD 0x000bae 0x00004000 0x00004000 0x07840 0x07840 R E 0x1 LOAD 0x0083ee 0x00001100 0x0000b840 0x00014 0x00aad RW 0x1 LOAD 0x008402 0x00001bae 0x0000b854 0x00000 0x000c2 RW 0x1 LOAD 0x008402 0x0000ffe0 0x0000ffe0 0x00020 0x00020 R E 0x1
Section to Segment mapping: Segment Sections... 00 .noinit .rodata._ZL7xfConfD .rodata._ZL10HART_confD .rodata.small_font .rodata._ZL16font_small_table .rodata._ZL24font_small_mapping_table .rodata._ZL 23font_small_offset_table .rodata._ZL23font_small_detail_table .rodata.big_font .rodata._ZL19font_big_char_table .rodata._ZL22font_big_mapping_table .rodata._ZL 20font_big_width_table 01 .rodata._ZL21font_big_offset_table .rodata._ZL21font_big_detail_table .rodata._ZL12adc_channels .rodata._ZL11const_types .rodata._ZL8bits_cnt .rodata. _ZL8bits_msk 02 .text 03 .data .bss 04 .noinit 05 .vectors
Сообщение отредактировал aliko - Aug 29 2011, 10:57
|
|
|
|
|
Aug 30 2011, 12:16
|
Участник

Группа: Участник
Сообщений: 39
Регистрация: 23-11-05
Пользователь №: 11 254

|
Причина ошибки во флаге -fdata-sections который неправильно как-то обрабатывается последними версиями компилятора... лучше пока воздержаться от его использования...
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|