ds18s20 0 26 февраля, 2014 Опубликовано 26 февраля, 2014 · Жалоба Здравствуйте. У меня возникла следующая проблема. При попытке собрать примеры scmRTOS.3.05 для микроконтроллеров MSP430 компилятор (msp430-gcc 4.6.3) выдаёт большое количество ошибок (листинг представлен ниже). Хотелось бы понять в чём дело, примеры для 4-ой версии ОСи данным компилятором собираются без проблем. ../scmRTOS/MSP430/OS_Target.h: В функции «void SetISRStackPointer()»: ../scmRTOS/MSP430/OS_Target.h:219:5: ошибка: некорректное преобразование из «word {aka short unsigned int}» в «void*» [-fpermissive] /usr/local/lib/gcc/msp430/4.6.3/../../../../msp430/include/intrinsics.h:82:6: ошибка: при инициализации 1 -го аргумента «void __write_stack_pointer(void*)» [-fpermissive] ../scmRTOS/MSP430/OS_Target.h: В функции «void SetStackPointer(TStackItem*)»: ../scmRTOS/MSP430/OS_Target.h:222:61: ошибка: некорректное преобразование из «word {aka short unsigned int}» в «void*» [-fpermissive] /usr/local/lib/gcc/msp430/4.6.3/../../../../msp430/include/intrinsics.h:82:6: ошибка: при инициализации 1 -го аргумента «void __write_stack_pointer(void*)» [-fpermissive] In file included from ../scmRTOS/MSP430/OS_Target.h:230:0, from ../scmRTOS/Common/scmRTOS.h:52, from ./src/main.cpp:48: ../scmRTOS/Common/OS_Kernel.h: At global scope: ../scmRTOS/Common/OS_Kernel.h:111:44: ошибка: «TBaseProcess» не был декларирован ../scmRTOS/Common/OS_Kernel.h:112:49: ошибка: «TBaseProcess» не был декларирован ../scmRTOS/Common/OS_Kernel.h:113:54: ошибка: «TBaseProcess» не является именем типа ../scmRTOS/Common/OS_Kernel.h:113:68: ошибка: ISO C++ запрещает декларации «p» без типа [-fpermissive] ../scmRTOS/Common/OS_Kernel.h:114:55: ошибка: «TBaseProcess» не является именем типа ../scmRTOS/Common/OS_Kernel.h:114:69: ошибка: ISO C++ запрещает декларации «p» без типа [-fpermissive] ../scmRTOS/Common/OS_Kernel.h:124:9: ошибка: «TBaseProcess» не является именем типа ../scmRTOS/Common/OS_Kernel.h:148:44: ошибка: «TBaseProcess» не был декларирован In file included from ../scmRTOS/MSP430/OS_Target.h:230:0, from ../scmRTOS/Common/scmRTOS.h:52, from ./src/main.cpp:48: ../scmRTOS/Common/OS_Kernel.h: В функции «bool OS::IsProcessSuspended(const OS::TBaseProcess&)»: ../scmRTOS/Common/OS_Kernel.h:123:21: ошибка: «OS::TProcessMap OS::TKernel::ReadyProcessMap» is private ../scmRTOS/Common/OS_Kernel.h:283:19: ошибка: в данном контексте ../scmRTOS/Common/OS_Kernel.h: At global scope: ../scmRTOS/Common/OS_Kernel.h:307:6: ошибка: прототип для «void OS::TKernel::RegisterProcess(OS::TBaseProcess*)» не имеет соответствия в классе «OS::TKernel» ../scmRTOS/Common/OS_Kernel.h:148:28: ошибка: претендент: void OS::TKernel::RegisterProcess(int*) ../scmRTOS/Common/OS_Kernel.h: В функции-члене «void OS::TKernel::SystemTimer()»: ../scmRTOS/Common/OS_Kernel.h:333:27: ошибка: нет декларации «ProcessTable» в этой области видимости ../scmRTOS/Common/OS_Kernel.h: В функции-члене «TStackItem* OS::TKernel::ContextSwitchHook(TStackItem*)»: ../scmRTOS/Common/OS_Kernel.h:383:5: ошибка: нет декларации «ProcessTable» в этой области видимости ../scmRTOS/Common/OS_Kernel.h: At global scope: ../scmRTOS/Common/OS_Kernel.h:398:28: ошибка: «void OS::Run()» следовало объявить внутри «OS» ../scmRTOS/Common/OS_Kernel.h: В функции «void OS::Run()»: ../scmRTOS/Common/OS_Kernel.h:400:29: ошибка: «class OS::TKernel» has no member named «ProcessTable» In file included from ../scmRTOS/Common/OS_Kernel.h:404:0, from ../scmRTOS/MSP430/OS_Target.h:230, from ../scmRTOS/Common/scmRTOS.h:52, from ./src/main.cpp:48: ../scmRTOS/Common/OS_Services.h: В функции-члене «bool OS::channel<T, size, S>::pop(T&, TTimeout)»: ../scmRTOS/Common/OS_Services.h:311:34: ошибка: «class OS::TKernel» has no member named «ProcessTable» ../scmRTOS/Common/OS_Services.h: В функции-члене «bool OS::channel<T, size, S>::pop_back(T&, TTimeout)»: ../scmRTOS/Common/OS_Services.h:353:34: ошибка: «class OS::TKernel» has no member named «ProcessTable» ../scmRTOS/Common/OS_Services.h: В функции-члене «bool OS::channel<T, size, S>::read(T*, S, TTimeout)»: ../scmRTOS/Common/OS_Services.h:412:30: ошибка: «class OS::TKernel» has no member named «ProcessTable» Сборка завершилась с ошибкой. In file included from ../scmRTOS/Common/scmRTOS.h:52:0, from ./src/main.cpp:48: ../scmRTOS/MSP430/OS_Target.h: В функции-члене «void OS::TISRW_SS::ISR_Enter()»: ../scmRTOS/MSP430/OS_Target.h:278:24: ошибка: «class OS::TKernel» has no member named «ProcessTable» ../scmRTOS/MSP430/OS_Target.h: В функции-члене «void OS::TISRW_SS::ISR_Exit()»: ../scmRTOS/MSP430/OS_Target.h:287:36: ошибка: «class OS::TKernel» has no member named «ProcessTable» ./src/main.cpp: At global scope: ./src/main.cpp:110:17: ошибка: specializing member «OS::process<(OS::TPriority)0u, 200u>::Exec» requires «template<>» syntax make: *** [obj/main.o] Ошибка 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 126 26 февраля, 2014 Опубликовано 26 февраля, 2014 · Жалоба Хотелось бы понять в чём дело,Компилятор стал более строгим. примеры для 4-ой версии ОСи данным компилятором собираются без проблем.Используйте четвертую версию. Если проект старый и не хочется исправлять в нем все вызовы ОС на новый стиль - есть файл совместимости scmRTOS_310_compat.h, с ним надо внести в исходник минимум исправлений. Или смотрите, как в ней реализованы проблемные функции в четвертой версии и переносите изменения в третью. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ds18s20 0 27 февраля, 2014 Опубликовано 27 февраля, 2014 · Жалоба Компилятор стал более строгим. Но ведь стандарт языка остался тем же самым Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 126 27 февраля, 2014 Опубликовано 27 февраля, 2014 · Жалоба Но ведь стандарт языка остался тем же самымИзменилась степень его понимания авторами компилятора :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 15 27 февраля, 2014 Опубликовано 27 февраля, 2014 · Жалоба Но ведь стандарт языка остался тем же самым Просто более старый компилятор менее строго соответствовал этому стандарту. Компилятор поправили, и он стал ругаться на вещи, которые раньше пропускал. Насколько я помню, там проблема одна: при определении шаблонной функции - члена класса нужно обрамлять её namespace-ом. То есть, было: template <> OS_PROCESS void TProc1::exec() { for(;;) { ef.wait(); BlueLED::Off(); } } стало: namespace OS { template <> OS_PROCESS void TProc1::exec() { for(;;) { ef.wait(); BlueLED::Off(); } } } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться