реклама на сайте
подробности

 
 
4 страниц V  < 1 2 3 4 >  
Reply to this topicStart new topic
> scmRTOS & MSPGCC. Ошибка компиляции примеров
aliko
сообщение Aug 2 2011, 10:08
Сообщение #16


Участник
*

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



Цитата(AHTOXA @ Aug 2 2011, 13:30) *
Победил это добавлением ключа линкера
Код
    LD_FLAGS    += -nostdlib

Перестают работать все стандартные библиотечные функции - memcpy, printf и т.д...
Какая-то пирова выходит победа к сожалению sad.gif

Цитата(AHTOXA @ Aug 2 2011, 13:30) *
Поставьте решёточку перед строкой .SILENT - может прояснится. Скорее всего, ругается на mkdir. Попробуйте создать директории bak, obj, lst, exe вручную.

Помогло. Действительно проблема была в создании катлогов.
Однако теперь 4я версия ОС при использовании mspgcc2011... под виндовс ругается на отсутствие libstdc++ аналогично линуксовской версии этого же компилятора, в то время как mspgcc4 собирает проект под виндовс отлично.
В то же время 3я версия ОС собирается без проблем любым компилятором и в любой ОС. ПОхоже все-таки где-то в мейкфайле надо копаться
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Aug 2 2011, 11:06
Сообщение #17


фанат дивана
******

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



Цитата(aliko @ Aug 2 2011, 16:08) *
В то же время 3я версия ОС собирается без проблем любым компилятором и в любой ОС. ПОхоже все-таки где-то в мейкфайле надо копаться

Дык, просто поменяйте мейкфайл! sm.gif

ЗЫ. Кстати, у меня не собралась и третья версия. Ругается:
Цитата
ld.exe: unrecognised emulation mode: msp430x149
Supported emulations: msp430


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
aliko
сообщение Aug 2 2011, 11:44
Сообщение #18


Участник
*

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



Цитата(AHTOXA @ Aug 2 2011, 15:06) *
Дык, просто поменяйте мейкфайл! sm.gif

помогло sm.gif

единственное что я добавил в мейкфайл от 3й версии - опцию -fno-threadsafe-statics иначе не собиралось, ну и -save-temps для удобства...



Цитата(AHTOXA @ Aug 2 2011, 15:06) *
ЗЫ. Кстати, у меня не собралась и третья версия. Ругается:

странно, у меня теперь все работает с мейкфайлом от 3 версииsm.gif
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Aug 3 2011, 03:44
Сообщение #19


фанат дивана
******

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



Я разобрался, в чём отличие мейкфайлов. В мейкфайле от третьей версии в качестве линкера вызывается gcc, а в четвёртой версии - g++. Поменяв в мейкфайле от четвёртой версии
LD = $(TOOL)g++
на
LD = $(TOOL)gcc
, я смог скомпилировать четвёртую версию. Не знаю только, работоспособен ли результат, не на чем проверить сейчас.



--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Aug 3 2011, 05:28
Сообщение #20


фанат дивана
******

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



Проверил на небольшом проекте. Работает.
Расстроила пара моментов:
1. Зачем-то убрали удобные алиасы типа SSEL_ACLK, TASSEL_SMCLK, MC_CONT, и проч. Чем они мешали, непонятно.
2. Не работает с ключами компилера/линкера -ffunction-sections -fdata-sections / -gc-sections. Что-то лишнее выбрасывается. Надо разбираться со скриптами линкера, сейчас некогда.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Aug 3 2011, 06:19
Сообщение #21


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(AHTOXA @ Aug 3 2011, 09:28) *
2. Не работает с ключами компилера/линкера -ffunction-sections -fdata-sections / -gc-sections. Что-то лишнее выбрасывается. Надо разбираться со скриптами линкера, сейчас некогда.

Я попробовал свой проектик скомпилить, так у меня процентов 70 выкинуло, включая main() smile3046.gif
Системы в действиях линкера не обнаружил.


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
aliko
сообщение Aug 3 2011, 07:24
Сообщение #22


Участник
*

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



Цитата(AHTOXA @ Aug 3 2011, 09:28) *
2. Не работает с ключами компилера/линкера -ffunction-sections -fdata-sections / -gc-sections. Что-то лишнее выбрасывается. Надо разбираться со скриптами линкера, сейчас некогда.

А чем чревато отсутствие этих ключей? В мейкфале для 3й версии ОС их вроде и не было и все прекрасно без них пока что работает в моем проекте, который не так уж и мал...
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Aug 3 2011, 07:35
Сообщение #23


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(aliko @ Aug 3 2011, 11:24) *
А чем чревато отсутствие этих ключей?

Все функции и данные, которые есть в исходниках, окажутся в бинарнике, независимо от их использования/неиспользования.


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
aliko
сообщение Aug 3 2011, 07:40
Сообщение #24


Участник
*

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Aug 3 2011, 07:53
Сообщение #25


фанат дивана
******

Группа: Свой
Сообщений: 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 байта? Это не тоsm.gif Ключ линкеру надо давать вот так:
Код
-Wl,--gc-sections


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
aliko
сообщение Aug 3 2011, 07:59
Сообщение #26


Участник
*

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



Цитата(AHTOXA @ Aug 3 2011, 11:53) *
ЗЫ. Советую переключиться на четвёртую версию, раз уж она тоже заработала.

А я уже давно переключился, просто мейкфайл у меня с третьей версии а сам проект на четвертой... Точнее даже меняя ключ мейкфайла я могу скомпилировать проект и на 3й и на 4й версии ОС, чтобы если вдруг что не так пойдет была возможность преверить на др версии

Цитата(AHTOXA @ Aug 3 2011, 11:53) *
2 байта? Это не тоsm.gif Ключ линкеру надо давать вот так:
Код
-Wl,--gc-sections

вот как выглядит строка флагов линкера у меня:
Код
ldflags        := -mmcu=$(cpu) -Wl,-Map=$(mapfile),--cref --gc-sections

что-то тут не так? все собирается вроде нормально...
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Aug 3 2011, 08:04
Сообщение #27


фанат дивана
******

Группа: Свой
Сообщений: 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



--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
aliko
сообщение Aug 3 2011, 08:08
Сообщение #28


Участник
*

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



Цитата(AHTOXA @ Aug 3 2011, 12:04) *
Вместо пробела - запятая.
Код
ldflags        := -mmcu=$(cpu) -Wl,-Map=$(mapfile),--cref,--gc-sections

Теперь перстало собираться sad.gif

причем и на 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
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Aug 3 2011, 08:34
Сообщение #29


фанат дивана
******

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



Cобираться-то оно должно. Другое дело, что не работаетsm.gif
Напишите тогда
Код
-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().                          */

стало вроде всё нормально. (Проверить не смог, железку уже отдалsm.gif

Ну ладно, вроде разобралисьsm.gif На днях закоммичу изменения.


ЗЫ. Вспомнил! Возьмите map-файл в кавычки:
Код
ldflags        := -mmcu=$(cpu) -Wl,-Map="$(mapfile)",--cref,--gc-sections


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
aliko
сообщение Aug 3 2011, 08:43
Сообщение #30


Участник
*

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



Цитата(AHTOXA @ Aug 3 2011, 12:34) *
Нашёл в чём дело. В линкерном скрипте почему-то убраны KEEP от секций initX.
После исправления в файле MSPGCC\20110716\msp430\lib\ldscripts\msp430.x строчек


Исправил ВСЕ строчки initX согласно вашей рекомендации, однако это ни на байт не уменьшило размер программы...
Может надо было править только до main как в вашем примере?
Go to the top of the page
 
+Quote Post

4 страниц V  < 1 2 3 4 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 12th August 2025 - 14:46
Рейтинг@Mail.ru


Страница сгенерированна за 0.01497 секунд с 7
ELECTRONIX ©2004-2016