|
scmRTOS & MSPGCC. Ошибка компиляции примеров |
|
|
|
Jul 26 2011, 19:00
|
Участник

Группа: Участник
Сообщений: 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
|
|
|
|
|
 |
Ответов
|
Jul 27 2011, 11:30
|
Участник

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

|
Цитата(AHTOXA @ Jul 27 2011, 14:47)  Ух, что-то они всё поменяли... Я в отпуске, сходу не разобрался  Как теперь объявлять обработчик прерывания в ассемблерном файле? Пока что пользуюсь mspgcc4 под виндовс, только он нормально компилит 3ю версию ОС. С 4й тоже не справляется. Почему-то не работают объявления портов вида portN.out.pinN при их изменении ничего не происходит, приходится пользоваться объявлениями вида PNOUT. Кроме того заметил что в последних mspgcc убрали кучу заголовочных файлов типа iostructures.h, adc.h в которых были удобные структурки для работы с регистрами. Кроме того последний mspgcc ругается на включения файла "io.h" который уже депрекейтед и вместо него предлагает включать msp430.h. Вобщем с компиляторами GCC зоопарк.
|
|
|
|
|
Jul 27 2011, 11:51
|

Беспросветный оптимист
     
Группа: Свой
Сообщений: 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 зоопарк.  Видимо, добавили много новых семейств, и чтобы не запутаться между версиями, решили отсечь всё старьё. Однако, радует, что проект вылез из подполья и продолжает развиваться.
--------------------
Программирование делится на системное и бессистемное. ©Моё :) — а для кого-то БГ — это Bill Gilbert =)
|
|
|
|
|
Jul 27 2011, 13:02
|
Участник

Группа: Участник
Сообщений: 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);
|
|
|
|
|
Jul 27 2011, 14:30
|

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

|
Цитата(aliko @ Jul 27 2011, 19:02)  А можно поподробнее про эти макросы? Вот они:
macros.h.zip ( 731 байт )
Кол-во скачиваний: 100Или, если уж мы в ветке про scmRTOS, то гляньте на этот вариант.
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Aug 1 2011, 11:43
|
Участник

Группа: Участник
Сообщений: 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". Может ему не нравятся слеши "/" вместо виндовских "\"? Только вручную их все менять во всем файле как-то муторно выходит...
|
|
|
|
|
Aug 1 2011, 12:39
|
Участник

Группа: Участник
Сообщений: 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.
|
|
|
|
|
Aug 1 2011, 14:13
|

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

|
Цитата(aliko @ Aug 1 2011, 18:39)  Оказалось что ошибка missing separator возникает когда строка начинаются с пробела вместо ТАБа, а мой редактор заменял табы пробелами, то вовсе не устраивало GNU-шный make. А, ну тогда понятно. А то я всё не мог понять, какая разница между мейкфайлами от 4й и 3й версий  Попробуйте всё же собрать 4ю версию, мне интересно, это у меня что-то криво установилось, или ещё что-то.
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Aug 2 2011, 08:47
|
Участник

Группа: Участник
Сообщений: 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й версий  Ошибка была в мейкфайле 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
|
|
|
|
|
Aug 2 2011, 09:30
|

фанат дивана
     
Группа: Свой
Сообщений: 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й версии. Третью версию договорились не трогать до выхода четвёртой. Потом может быть сделаю. А может и не надо станет  Цитата Мейкфайл 4й версии под виндовс ругается сильно и много и к сожалению даже не пишет какая строка иходного файла вызывет ошибку так что отлаживать его довольно проблематично. Поставьте решёточку перед строкой .SILENT - может прояснится. Скорее всего, ругается на mkdir. Попробуйте создать директории bak, obj, lst, exe вручную.
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
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я версия ОС собирается без проблем любым компилятором и в любой ОС. ПОхоже все-таки где-то в мейкфайле надо копаться
|
|
|
|
Сообщений в этой теме
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             AHTOXA Цитата(aliko @ Aug 2 2011, 16:08) В то же... Aug 2 2011, 11:06              aliko Цитата(AHTOXA @ Aug 2 2011, 15:06) Дык, п... Aug 2 2011, 11:44               AHTOXA Я разобрался, в чём отличие мейкфайлов. В мейкфайл... Aug 3 2011, 03:44                AHTOXA Проверил на небольшом проекте. Работает.
Расстроил... Aug 3 2011, 05:28                 MrYuran Цитата(AHTOXA @ Aug 3 2011, 09:28) 2. Не ... Aug 3 2011, 06:19                 aliko Цитата(AHTOXA @ Aug 3 2011, 09:28) 2. Не ... Aug 3 2011, 07:24                  MrYuran Цитата(aliko @ Aug 3 2011, 11:24) А чем ч... Aug 3 2011, 07:35                   aliko Цитата(MrYuran @ Aug 3 2011, 11:35) Все ф... Aug 3 2011, 07:40                    AHTOXA Библиотечные будут поштучно. В принципе ничего стр... Aug 3 2011, 07:53                     aliko Цитата(AHTOXA @ Aug 3 2011, 11:53) ЗЫ. Со... Aug 3 2011, 07:59                      AHTOXA Цитата(aliko @ Aug 3 2011, 13:59) Кодldfl... Aug 3 2011, 08:04                       aliko Цитата(AHTOXA @ Aug 3 2011, 12:04) Вместо... Aug 3 2011, 08:08                        AHTOXA Cобираться-то оно должно. Другое дело, что не рабо... Aug 3 2011, 08:34                         aliko Цитата(AHTOXA @ Aug 3 2011, 12:34) Нашёл ... Aug 3 2011, 08:43                          AHTOXA В моей рекомендации и так все строчки initX исправ... Aug 3 2011, 08:53                           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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|