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

 
 
> scmRTOS & MSPGCC. Ошибка компиляции примеров
aliko
сообщение Jul 26 2011, 19:00
Сообщение #1


Участник
*

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



Под линукс в mspgcc4 (gcc-4.4.5) и 3я и 4я версии ОС при компиляции выдают следующее:
Цитата
--- assembling ../scmRTOS/MSP430/OS_Target_asm.S...
../scmRTOS/MSP430/OS_Target_asm.S: Assembler messages:
../scmRTOS/MSP430/OS_Target_asm.S:125: Error: unknown opcode `vector_(11'

Аналогично ругается mspgcc (20110716) под виндовс.

Кстати поясните пожалуйста в чем цимус существования двух версий - mspgcc и mspgcc4. Вторая вроде как заявляет что она хороша тем что базируется на 4й версии GCC, однако обычный mspgcc тоже вроде как на четвертой и даже на 4.5 против 4.4 у mspgcc4?

Сообщение отредактировал aliko - Jul 26 2011, 19:01
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
AHTOXA
сообщение Jul 27 2011, 10:47
Сообщение #2


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

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



Ух, что-то они всё поменяли... Я в отпуске, сходу не разобрался sm.gif
Как теперь объявлять обработчик прерывания в ассемблерном файле?

Цитата(aliko @ Jul 27 2011, 01:00) *
Кстати поясните пожалуйста в чем цимус существования двух версий - mspgcc и mspgcc4.


Насколько я понял, изначально разработчики mspgcc не хотели переходить на GCC 4, поэтому отпочковался проект mspgcc4. А теперь видимо передумали, вот и получились два таких проекта sm.gif


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


Участник
*

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



Цитата(AHTOXA @ Jul 27 2011, 14:47) *
Ух, что-то они всё поменяли... Я в отпуске, сходу не разобрался sm.gif
Как теперь объявлять обработчик прерывания в ассемблерном файле?

Пока что пользуюсь mspgcc4 под виндовс, только он нормально компилит 3ю версию ОС. С 4й тоже не справляется.
Почему-то не работают объявления портов вида portN.out.pinN при их изменении ничего не происходит, приходится пользоваться объявлениями вида PNOUT. Кроме того заметил что в последних mspgcc убрали кучу заголовочных файлов типа iostructures.h, adc.h в которых были удобные структурки для работы с регистрами. Кроме того последний mspgcc ругается на включения файла "io.h" который уже депрекейтед и вместо него предлагает включать msp430.h. Вобщем с компиляторами GCC зоопарк. sad.gif
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Jul 27 2011, 11:51
Сообщение #4


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

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



Цитата(aliko @ Jul 27 2011, 15:30) *
Почему-то не работают объявления портов вида portN.out.pinN при их изменении ничего не происходит

Это была примочка divil'а, видимо решили её выкинуть.
Кстати, я с ней основательно накололся, не советую использовать.
Почему-то иногда игнорирует __attribute__((packed)), с которым объявлены структуры портов, и в случае выравнивания по границе слова начинается дурдом...

Я немного доработал макросы Аскольда Волкова (ещё не совсем до конца), получается не хуже, но главное - 100% предсказуемо.
CODE

#include "_useful_gpio.h" // Макросы Аскольда Волкова

#define SYS_WDT P4,7,H
#define PWR_WDT P6,0,H

static __inline__ void WatchDogInit(void)
{
InitAsOut(PWR_WDT);

InitAsOut(SYS_WDT);
}

static __inline__ void ClearWatchDog(void)
{
toggle_pin(SYS_WDT);
}

static __inline__ void ClearPWRWatchDog(void)
{
toggle_pin(PWR_WDT);
}


Цитата(aliko @ Jul 27 2011, 15:30) *
Кроме того последний mspgcc ругается на включения файла "io.h" который уже депрекейтед и вместо него предлагает включать msp430.h. Вобщем с компиляторами GCC зоопарк. sad.gif

Видимо, добавили много новых семейств, и чтобы не запутаться между версиями, решили отсечь всё старьё.

Однако, радует, что проект вылез из подполья и продолжает развиваться.


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


Участник
*

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



Цитата(MrYuran @ Jul 27 2011, 15:51) *
Я немного доработал макросы Аскольда Волкова (ещё не совсем до конца), получается не хуже, но главное - 100% предсказуемо.


А можно поподробнее про эти макросы?

что-то типа такого?

Код
#define P_PWR   4,7,0

#define port_on(TRIPLE) xport_on(TRIPLE)
#define xport_on(PORT, PIN, ONSTATE) (ONSTATE ? P##PORT##OUT |= BIT##PIN : P##PORT##OUT &= ~BIT##PIN)

#define port_off(TRIPLE) xport_off(TRIPLE)
#define xport_off(PORT, PIN, ONSTATE) (!ONSTATE ? P##PORT##OUT |= BIT##PIN : P##PORT##OUT &= ~BIT##PIN)


использовать:
Код
port_on(P_PWR);
port_off(P_PWR);

Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Jul 27 2011, 14:30
Сообщение #6


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

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



Цитата(aliko @ Jul 27 2011, 19:02) *
А можно поподробнее про эти макросы?

Вот они: Прикрепленный файл  macros.h.zip ( 731 байт ) Кол-во скачиваний: 100

Или, если уж мы в ветке про scmRTOS, то гляньте на этот вариант.


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


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

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



Цитата(aliko @ Jul 27 2011, 01:00) *
Под линукс в mspgcc4 (gcc-4.4.5) и 3я и 4я версии ОС при компиляции выдают следующее:


Скачал mspgcc-20110716, поправил ось. Теперь всё компилируется, но при линковке не находит -lstdc++. Похоже мне достался какой-то кривоватый msp-gcc:)
Приаттачиваю исправленный вариант, попробуйте его у себя. Если заработает, я закоммичу исправления.
Прикрепленный файл  scmRTOS_4_MSP.zip ( 38.53 килобайт ) Кол-во скачиваний: 101


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


Участник
*

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



Цитата(AHTOXA @ Aug 1 2011, 08:28) *
Приаттачиваю исправленный вариант, попробуйте его у себя. Если заработает, я закоммичу исправления.
Прикрепленный файл  scmRTOS_4_MSP.zip ( 38.53 килобайт ) Кол-во скачиваний: 101

Попробовать под линукс смогу только дома, на работе стоит винда. Виндовский mingw32-make не дружит почему-то с мейкфалом для 4й версии ОС, поэтому я перенес Ваши исправления в 3ю версию и она нормально откомпилировалась с новой версией mspgcc-20110716.

Кстати, не подскажите как заставить виндовский make нормально выполнять clean? Не силен в написании мейкфалов, но он ругается по всей видимости на отсутствие rm а когда заменяю его на del то продолжает ругаться на "Missing separator". Может ему не нравятся слеши "/" вместо виндовских "\"? Только вручную их все менять во всем файле как-то муторно выходит...
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Aug 1 2011, 11:49
Сообщение #9


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

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



Цитата(aliko @ Aug 1 2011, 15:43) *
Кстати, не подскажите как заставить виндовский make нормально выполнять clean? Не силен в написании мейкфалов, но он ругается по всей видимости на отсутствие rm а когда заменяю его на del то продолжает ругаться на "Missing separator". Может ему не нравятся слеши "/" вместо виндовских "\"? Только вручную их все менять во всем файле как-то муторно выходит...

Код
# Очистка
RM = del

clean:
    - $(RM) $(obj_path)\*.o
    - $(RM) $(lst_path)\*.lst


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


Участник
*

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



Цитата(MrYuran @ Aug 1 2011, 15:49) *
Код
# Очистка
RM = del

clean:
    - $(RM) $(obj_path)\*.o
    - $(RM) $(lst_path)\*.lst

Оказалось что ошибка missing separator возникает когда строка начинаются с пробела вместо ТАБа, а мой редактор заменял табы пробелами, то вовсе не устраивало GNU-шный make.
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Aug 1 2011, 14:13
Сообщение #11


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

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



Цитата(aliko @ Aug 1 2011, 18:39) *
Оказалось что ошибка missing separator возникает когда строка начинаются с пробела вместо ТАБа, а мой редактор заменял табы пробелами, то вовсе не устраивало GNU-шный make.

А, ну тогда понятно. А то я всё не мог понять, какая разница между мейкфайлами от 4й и 3й версийsm.gif

Попробуйте всё же собрать 4ю версию, мне интересно, это у меня что-то криво установилось, или ещё что-то.


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


Участник
*

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



Цитата(AHTOXA @ Aug 1 2011, 18:13) *
Попробуйте всё же собрать 4ю версию, мне интересно, это у меня что-то криво установилось, или ещё что-то.

У меня вышла аналогичная ошибка линковщика (libstdc++) в линуксе при использовании mspgcc20110716. Однако mspgcc4 под линукс нормально собрал ваш проект. Также как я уже писал под виндовс в mspgcc20110716 проект собирается тоже отлично (правда тут я пробовал 3ю версию ОС с перенесенными туда вашими исправлениями, так как мейкфайл 4й версии много ругается и отказывается собирать проект под виндовс). Ну а что касается mspgcc4 под виндовс то она прекрасно компилирует 3ю версию ОС из репозитария, но очевидно в скором будущем тоже перестанет так как под линуксом последняя сборка mspgcc4 и mspgcc20110716 ведут себя уже одинаково, разве что последней не хватает libstdc++ при линковке. Кстати, на сайте mspgcc говорится следующее: From the GNU Compiler Collection (gcc) we have ported the C compiler (C++ without libstdc++). Однако в сборке под виндовс все работает хорошо. Также в mspgcc4 под линукс есть эта библиотека в папке lib.

Вобщем путаница пока еще та.

Я прилагаю исправленную версию ОС 3й версии, может быть имеет смысл перенести исправления из нее в ветку 3й версии. Она собирается как последней версией компилятора mspgcc20110716, так и по всей видимости более устаревшей сборкой mspgcc4(виндовс). Для этого я следующим образом изменил процедуру подключения заголовочных фалов:

Код
#if __GNUC_MINOR__ < 5
#include <io.h>
#include <signal.h>
#else
#include <legacymsp430.h>
#endif





Цитата(AHTOXA @ Aug 1 2011, 18:13) *
А, ну тогда понятно. А то я всё не мог понять, какая разница между мейкфайлами от 4й и 3й версийsm.gif

Ошибка была в мейкфайле 3й версии у меня. Мейкфайл 4й версии под виндовс ругается сильно и много и к сожалению даже не пишет какая строка иходного файла вызывет ошибку так что отлаживать его довольно проблематично.
Сообщения имеют следющий вид:
Цитата
Ошибка в синтаксисе команды.
Ошибка в синтаксисе команды.
Ошибка в синтаксисе команды.
Ошибка в синтаксисе команды.
--- compiling ./src/main.cpp...
./src/main.cpp:155:1: fatal error: opening dependency file obj/main.d: No such file or directory
compilation terminated.
make: *** [obj/main.o] Error 1


Сообщение отредактировал aliko - Aug 2 2011, 08:49
Прикрепленные файлы
Прикрепленный файл  scmRTOS_3_corrected.zip ( 26.57 килобайт ) Кол-во скачиваний: 9
 
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Aug 2 2011, 09:30
Сообщение #13


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

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



Цитата(aliko @ Aug 2 2011, 14:47) *
Кстати, на сайте mspgcc говорится следующее: From the GNU Compiler Collection (gcc) we have ported the C compiler (C++ without libstdc++). Однако в сборке под виндовс все работает хорошо.

Скорее всего вы ставили mspgcc20110716 поверх какой-то предыдущей, вот там и осталась эта библиотека. У меня её нет. (и в архиве mspgcc-20110716.zip её нет).
Победил это добавлением ключа линкера
Код
    LD_FLAGS    += -nostdlib

Только вот проверить результат сейчас не на чем.
Цитата
Я прилагаю исправленную версию ОС 3й версии, может быть имеет смысл перенести исправления из нее в ветку 3й версии.
Третью версию договорились не трогать до выхода четвёртой. Потом может быть сделаю. А может и не надо станетsm.gif
Цитата
Мейкфайл 4й версии под виндовс ругается сильно и много и к сожалению даже не пишет какая строка иходного файла вызывет ошибку так что отлаживать его довольно проблематично.

Поставьте решёточку перед строкой .SILENT - может прояснится. Скорее всего, ругается на mkdir. Попробуйте создать директории bak, obj, lst, exe вручную.


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


Участник
*

Группа: Участник
Сообщений: 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
Сообщение #15


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

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


Участник
*

Группа: Участник
Сообщений: 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
Сообщение #17


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

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


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

Группа: Свой
Сообщений: 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
aliko
сообщение Aug 3 2011, 07:24
Сообщение #19


Участник
*

Группа: Участник
Сообщений: 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
Сообщение #20


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

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


Участник
*

Группа: Участник
Сообщений: 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
Сообщение #22


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

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


Участник
*

Группа: Участник
Сообщений: 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
Сообщение #24


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

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


Участник
*

Группа: Участник
Сообщений: 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
Сообщение #26


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

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


Участник
*

Группа: Участник
Сообщений: 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
AHTOXA
сообщение Aug 3 2011, 08:53
Сообщение #28


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

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



В моей рекомендации и так все строчки initX исправлены. Там дальше идут finiX - они в принципе не нужны sm.gif
Вы с ключами-то разобрались? Если да, то попробуйте убрать KEEP() и откомпилируйте. Увидите сильное уменьшение размера программы (даже чересчур).


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- aliko   scmRTOS & MSPGCC. Ошибка компиляции примеров   Jul 26 2011, 19:00
|- - MrYuran   Цитата(AHTOXA @ Jul 27 2011, 14:47) Наско...   Jul 27 2011, 11:02
|- - MrYuran   Цитата(aliko @ Jul 27 2011, 17:02) А можн...   Jul 27 2011, 13:14
|- - MrYuran   Цитата(AHTOXA @ Aug 3 2011, 09:28) 2. Не ...   Aug 3 2011, 06:19
||- - aliko   Цитата(AHTOXA @ Aug 3 2011, 12:53) Вы с к...   Aug 3 2011, 09:10
||- - AHTOXA   Аминь ЗЫ. Раз уж вы начали писать в рассылку mspg...   Aug 3 2011, 09:14
|- - Сергей Борщ   QUOTE (AHTOXA @ Aug 3 2011, 11:34) Нашёл ...   Aug 8 2011, 08:44
|- - AHTOXA   Цитата(Сергей Борщ @ Aug 8 2011, 14:44) А...   Aug 8 2011, 09:52
- - aliko   А каков смысл редактирования KEEP поясните пожалуй...   Aug 3 2011, 09:15
|- - AHTOXA   Без KEEP выкидывается не только неиспользуемый код...   Aug 3 2011, 09:17
|- - aliko   Цитата(AHTOXA @ Aug 3 2011, 13:17) Без KE...   Aug 3 2011, 10:09
|- - AHTOXA   Цитата(aliko @ Aug 3 2011, 16:09) Похоже ...   Aug 3 2011, 11:26
|- - aliko   Цитата(AHTOXA @ Aug 3 2011, 15:26) Единст...   Aug 3 2011, 11:29
|- - AHTOXA   Закоммитил исправления в pre-4.   Aug 5 2011, 04:57
|- - aliko   Цитата(AHTOXA @ Aug 5 2011, 08:57) Закомм...   Aug 5 2011, 08:27
- - aliko   Проблемы с GCC кажется продолжаются. При компиляци...   Aug 29 2011, 10:56
- - aliko   Похоже я понял в чем проблема. Злобный компилятор ...   Aug 30 2011, 08:35
- - aliko   Причина ошибки во флаге -fdata-sections который н...   Aug 30 2011, 12:16
- - Сергей Борщ   QUOTE (aliko @ Aug 30 2011, 15:16) лучше ...   Aug 30 2011, 13:04


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

 


RSS Текстовая версия Сейчас: 27th June 2025 - 07:20
Рейтинг@Mail.ru


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