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

 
 
 
Reply to this topicStart new topic
> IAR EWARM 5.40
IgorKossak
сообщение Jul 17 2009, 11:29
Сообщение #1


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Установил 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

Идеи закончились. Может кто-нибудь что-нибудь посоветовать?
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jul 17 2009, 14:55
Сообщение #2


Гуру
******

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



Аналогичное было при портировании на GCC. Видать у ИАРа в этом месте раньше было отклонение от стандарта или послабления. В GCC работает так:
По 1 и 2: В Target.h в GCC-порте есть строки
Код
namespace OS
{
    void Run();
    class TBaseProcess;
}
По п.3:
Код
namespace OS
{
    template<>
    OS_PROCESS void TProc1::Exec()
    {
         .....
    }
}
Причем эта конструкция в старых ИАРах вызывала ошибки.


--------------------
На любой вопрос даю любой ответ
"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
IgorKossak
сообщение Jul 17 2009, 21:52
Сообщение #3


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Цитата(Сергей Борщ @ 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() и всё собралось!
Go to the top of the page
 
+Quote Post
isz
сообщение Jan 12 2010, 07:33
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 16
Регистрация: 2-10-09
Из: Екатеринбург
Пользователь №: 52 693



Цитата(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 при компиляции ассемблерного файла фызвали кучу ошибок, пришлось их удалить

Сообщение отредактировал isz - Jan 12 2010, 07:36
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Jan 13 2010, 08:02
Сообщение #5


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Сейчас у меня IAR не установлен, проверить не могу.
Go to the top of the page
 
+Quote Post
alux
сообщение Jan 19 2010, 21:21
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 589
Регистрация: 24-04-05
Пользователь №: 4 447



Аналогичная ситуация с 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.
Go to the top of the page
 
+Quote Post

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

 


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


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