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

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

|
Цитата(AHTOXA @ Aug 2 2011, 13:30)  Победил это добавлением ключа линкера Код LD_FLAGS += -nostdlib Перестают работать все стандартные библиотечные функции - memcpy, printf и т.д... Какая-то пирова выходит победа к сожалению  Цитата(AHTOXA @ Aug 2 2011, 13:30)  Поставьте решёточку перед строкой .SILENT - может прояснится. Скорее всего, ругается на mkdir. Попробуйте создать директории bak, obj, lst, exe вручную. Помогло. Действительно проблема была в создании катлогов. Однако теперь 4я версия ОС при использовании mspgcc2011... под виндовс ругается на отсутствие libstdc++ аналогично линуксовской версии этого же компилятора, в то время как mspgcc4 собирает проект под виндовс отлично. В то же время 3я версия ОС собирается без проблем любым компилятором и в любой ОС. ПОхоже все-таки где-то в мейкфайле надо копаться
|
|
|
|
|
Aug 2 2011, 11:06
|

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

|
Цитата(aliko @ Aug 2 2011, 16:08)  В то же время 3я версия ОС собирается без проблем любым компилятором и в любой ОС. ПОхоже все-таки где-то в мейкфайле надо копаться Дык, просто поменяйте мейкфайл!  ЗЫ. Кстати, у меня не собралась и третья версия. Ругается: Цитата ld.exe: unrecognised emulation mode: msp430x149 Supported emulations: msp430
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Aug 2 2011, 11:44
|
Участник

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

|
Цитата(AHTOXA @ Aug 2 2011, 15:06)  Дык, просто поменяйте мейкфайл!  помогло  единственное что я добавил в мейкфайл от 3й версии - опцию -fno-threadsafe-statics иначе не собиралось, ну и -save-temps для удобства... Цитата(AHTOXA @ Aug 2 2011, 15:06)  ЗЫ. Кстати, у меня не собралась и третья версия. Ругается: странно, у меня теперь все работает с мейкфайлом от 3 версии
|
|
|
|
|
Aug 3 2011, 07:24
|
Участник

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

|
Цитата(AHTOXA @ Aug 3 2011, 09:28)  2. Не работает с ключами компилера/линкера -ffunction-sections -fdata-sections / -gc-sections. Что-то лишнее выбрасывается. Надо разбираться со скриптами линкера, сейчас некогда. А чем чревато отсутствие этих ключей? В мейкфале для 3й версии ОС их вроде и не было и все прекрасно без них пока что работает в моем проекте, который не так уж и мал...
|
|
|
|
|
Aug 3 2011, 07:40
|
Участник

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

|
Цитата(MrYuran @ Aug 3 2011, 11:35)  Все функции и данные, которые есть в исходниках, окажутся в бинарнике, независимо от их использования/неиспользования. Да уж, не весело... Что и библиотека стандартных функций целиком полезет в бинарник или хотя бы библиотечные функции будут браться поштучно? UPD попробовал включить эти флаги и все прекрасно откомпилировалось и слинковалось разница правда небольшая: mspgcc4: (GCC4.4): text data bss dec hex filename 18424 6 1972 20402 4fb2 .\exe/epp.elf mspgcc2011... (GCC 4.5): text data bss dec hex filename 16684 6 1978 18668 48ec .\exe/epp.elf mspgcc2011... (GCC4.5) c флагами -ffunction-sections -fdata-sections / -gc-sections: text data bss dec hex filename 16682 6 1968 18656 48e0 .\exe/epp.elf
Сообщение отредактировал aliko - Aug 3 2011, 07:49
|
|
|
|
|
Aug 3 2011, 07:53
|

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

|
Библиотечные будут поштучно. В принципе ничего страшного, если проект помещается в кристалл. Просто как-то это "неаккуратненько". ЗЫ. Советую переключиться на четвёртую версию, раз уж она тоже заработала. Цитата(aliko @ Aug 3 2011, 13:40)  mspgcc2011... (GCC 4.5): text data bss dec hex filename 16684 6 1978 18668 48ec .\exe/epp.elf
mspgcc2011... (GCC4.5) c флагами -ffunction-sections -fdata-sections / -gc-sections: text data bss dec hex filename 16682 6 1968 18656 48e0 .\exe/epp.elf 2 байта? Это не то  Ключ линкеру надо давать вот так: Код -Wl,--gc-sections
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Aug 3 2011, 07:59
|
Участник

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

|
Цитата(AHTOXA @ Aug 3 2011, 11:53)  ЗЫ. Советую переключиться на четвёртую версию, раз уж она тоже заработала. А я уже давно переключился, просто мейкфайл у меня с третьей версии а сам проект на четвертой... Точнее даже меняя ключ мейкфайла я могу скомпилировать проект и на 3й и на 4й версии ОС, чтобы если вдруг что не так пойдет была возможность преверить на др версии Цитата(AHTOXA @ Aug 3 2011, 11:53)  2 байта? Это не то  Ключ линкеру надо давать вот так: Код -Wl,--gc-sections вот как выглядит строка флагов линкера у меня: Код ldflags := -mmcu=$(cpu) -Wl,-Map=$(mapfile),--cref --gc-sections что-то тут не так? все собирается вроде нормально...
|
|
|
|
|
Aug 3 2011, 08:04
|

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

|
Цитата(aliko @ Aug 3 2011, 13:59)  Код ldflags := -mmcu=$(cpu) -Wl,-Map=$(mapfile),--cref --gc-sections Вместо пробела - запятая. Код ldflags := -mmcu=$(cpu) -Wl,-Map=$(mapfile),--cref,--gc-sections
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Aug 3 2011, 08:08
|
Участник

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

|
Цитата(AHTOXA @ Aug 3 2011, 12:04)  Вместо пробела - запятая. Код ldflags := -mmcu=$(cpu) -Wl,-Map=$(mapfile),--cref,--gc-sections Теперь перстало собираться  причем и на mspgcc4 (GCC4.4) Цитата msp430-ld.exe: : No such file: Invalid argument collect2: ld returned 1 exit status make: *** [.\exe/epp.elf] Error 1 и на mspgcc2011.. (GCC4.5): Цитата ld.exe : cannot find : Invalid argument collect2: ld returned 1 exit status make: *** [.\exe/epp.elf] Error 1
Сообщение отредактировал aliko - Aug 3 2011, 08:09
|
|
|
|
|
Aug 3 2011, 08:34
|

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

|
Cобираться-то оно должно. Другое дело, что не работает  Напишите тогда Код -mmcu=$(cpu) -Wl,-Map=$(mapfile),--cref -Wl,--gc-sections Или возьмите уже мейкфайл от 4й версии, просто поправьте линкер g++ на gcc, как я писал выше. Нашёл в чём дело. В линкерном скрипте почему-то убраны KEEP от секций initX. После исправления в файле MSPGCC\20110716\msp430\lib\ldscripts\msp430.x строчек Код KEEP(*(.init)) *(.init0) /* Start here after reset. */ *(.init1) /* User definable. */ *(.init2) /* Initialize stack. */ *(.init3) /* Initialize hardware, user definable. */ *(.init4) /* Copy data to .data, clear bss. */ *(.init5) /* User definable. */ *(.init6) /* C++ constructors. */ *(.init7) /* User definable. */ *(.init8) /* User definable. */ *(.init9) /* Call main(). */ на Код KEEP(*(.init)) KEEP(*(.init0)) /* Start here after reset. */ KEEP(*(.init1)) /* User definable. */ KEEP(*(.init2)) /* Initialize stack. */ KEEP(*(.init3)) /* Initialize hardware, user definable. */ KEEP(*(.init4)) /* Copy data to .data, clear bss. */ KEEP(*(.init5)) /* User definable. */ KEEP(*(.init6)) /* C++ constructors. */ KEEP(*(.init7)) /* User definable. */ KEEP(*(.init8)) /* User definable. */ KEEP(*(.init9)) /* Call main(). */ стало вроде всё нормально. (Проверить не смог, железку уже отдал  Ну ладно, вроде разобрались  На днях закоммичу изменения. ЗЫ. Вспомнил! Возьмите map-файл в кавычки: Код ldflags := -mmcu=$(cpu) -Wl,-Map="$(mapfile)",--cref,--gc-sections
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Aug 3 2011, 08:43
|
Участник

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

|
Цитата(AHTOXA @ Aug 3 2011, 12:34)  Нашёл в чём дело. В линкерном скрипте почему-то убраны KEEP от секций initX. После исправления в файле MSPGCC\20110716\msp430\lib\ldscripts\msp430.x строчек Исправил ВСЕ строчки initX согласно вашей рекомендации, однако это ни на байт не уменьшило размер программы... Может надо было править только до main как в вашем примере?
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|