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

 
 
> scmRTOS.3.05 и mspgcc4, Не собираются примеры для MSP430
ds18s20
сообщение Feb 26 2014, 08:32
Сообщение #1





Группа: Новичок
Сообщений: 5
Регистрация: 26-02-14
Пользователь №: 80 702



Здравствуйте. У меня возникла следующая проблема. При попытке собрать примеры 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
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Сергей Борщ
сообщение Feb 26 2014, 09:04
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(ds18s20 @ Feb 26 2014, 10:32) *
Хотелось бы понять в чём дело,
Компилятор стал более строгим.

Цитата(ds18s20 @ Feb 26 2014, 10:32) *
примеры для 4-ой версии ОСи данным компилятором собираются без проблем.
Используйте четвертую версию. Если проект старый и не хочется исправлять в нем все вызовы ОС на новый стиль - есть файл совместимости scmRTOS_310_compat.h, с ним надо внести в исходник минимум исправлений. Или смотрите, как в ней реализованы проблемные функции в четвертой версии и переносите изменения в третью.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
ds18s20
сообщение Feb 27 2014, 03:09
Сообщение #3





Группа: Новичок
Сообщений: 5
Регистрация: 26-02-14
Пользователь №: 80 702



Цитата(Сергей Борщ @ Feb 26 2014, 12:04) *
Компилятор стал более строгим.


Но ведь стандарт языка остался тем же самым
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Feb 27 2014, 09:02
Сообщение #4


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

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



Цитата(ds18s20 @ Feb 27 2014, 09:09) *
Но ведь стандарт языка остался тем же самым

Просто более старый компилятор менее строго соответствовал этому стандарту. Компилятор поправили, и он стал ругаться на вещи, которые раньше пропускал.
Насколько я помню, там проблема одна: при определении шаблонной функции - члена класса нужно обрамлять её 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();
        }
    }
}


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



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

 


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


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