Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: IAR EWARM 5.40
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Операционные системы > scmRTOS
IgorKossak
Установил IAR EWARM 5.40 и ни один пример не удаётся собрать.
1. Ошибка
Код
Error[Pe135]: namespace "OS" has no member "Run" ...\scmRTOS\Common\OS_Kernel.h 401

Пришлось добавить
Код
void Run();
в namespace OS.
2. Ошибка
Код
Error[Pe020]: identifier "TBaseProcess" is undefined ...\scmRTOS\Common\OS_Kernel.h 114

Пришлось добавить
Код
class TBaseProcess;
в начале namespace OS.
3. Ошибка
Код
Error[Pe795]: specializing function "OS::process<pr, stack_size>::Exec [with pr=OS::pr0, stack_size=(word)200U]" requires "template<>" syntax ...\Src\main.cpp 74
на строку
Код
OS_PROCESS void TProc1::Exec()

изменил на
Код
template<> OS_PROCESS void TProc1::Exec()

Выдало ошибку
Код
Error[Pe793]: explicit specialization of function "OS::process<pr, stack_size>::Exec [with pr=OS::pr0, stack_size=(word)200U]" must precede its first use ...\Src\main.cpp 74

изменил на
Код
template<TPriority pr, word stack_size> OS_PROCESS void TProc1::Exec()

и добавил в начале файла
Код
using namespace OS;

Выдало ошибку
Код
Error[Pe464]: "OS::process<OS::pr0, (word)200U>" is not a class template ...\Src\main.cpp 74

Идеи закончились. Может кто-нибудь что-нибудь посоветовать?
Сергей Борщ
Аналогичное было при портировании на GCC. Видать у ИАРа в этом месте раньше было отклонение от стандарта или послабления. В GCC работает так:
По 1 и 2: В Target.h в GCC-порте есть строки
Код
namespace OS
{
    void Run();
    class TBaseProcess;
}
По п.3:
Код
namespace OS
{
    template<>
    OS_PROCESS void TProc1::Exec()
    {
         .....
    }
}
Причем эта конструкция в старых ИАРах вызывала ошибки.
IgorKossak
Цитата(Сергей Борщ @ Jul 17 2009, 17:55) *
...
По п.3:
...

Ошибка
Код
Error[Pe793]: explicit specialization of function "OS::process<pr, stack_size>::Exec [with pr=OS::pr0, stack_size=(word)200U]" must precede its first use

wacko.gif

Внимательнее вчитался в текст ошибки и поставил определения объектов процессов
Код
TProc1 Proc1;
TProc2 Proc2;
TProc3 Proc3;
после определения функций Exec() и всё собралось!
isz
Цитата(IgorKossak @ Jul 18 2009, 02:52) *
Ошибка
Код
Error[Pe793]: explicit specialization of function "OS::process<pr, stack_size>::Exec [with pr=OS::pr0, stack_size=(word)200U]" must precede its first use

wacko.gif

Внимательнее вчитался в текст ошибки и поставил определения объектов процессов
Код
TProc1 Proc1;
TProc2 Proc2;
TProc3 Proc3;
после определения функций Exec() и всё собралось!


Сделал все что написано, появилась ошибка
Код
Error[Pa002]: the type attribute "__task" is not allowed on this declaration ...\src\main.cpp 40

на строки объявления функций процессов
Код
template<> OS_PROCESS void Proc1::Exec()


Что еще можно сделать?

Кстати, еще русские коментарии в заголовочном файле конфигурации scmRTOS_CONFIG.h при компиляции ассемблерного файла фызвали кучу ошибок, пришлось их удалить
IgorKossak
Сейчас у меня IAR не установлен, проверить не могу.
alux
Аналогичная ситуация с EWAVR 5.40 .
Код
Error[Pa002]: the type attribute "__task" is not allowed on this declaration D:\...\scmRTOS\AVR\OS_Target_cpp.cpp 101
Error[Pe793]: explicit specialization of function "OS::process<pr, stack_size, rstack_size>::Exec [with pr=OS::prIDLE, stack_size=(word)50U,  D:\...\scmRTOS\AVR\OS_Target_cpp.cpp 101
rstack_size=(word)10U]" must precede its first use

второй день топчусь на месте... cranky.gif



по первой ошибке: просто закомментировал __task в
Код
#define OS_PROCESS    //__task
#define OS_INTERRUPT  __interrupt
#define DUMMY_INSTR() __no_operation()


со второй ошибкой тоже разобрался по примеру IgorKossak.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.