Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Ошибка
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Операционные системы > scmRTOS
_trunk_
Помогите разобраться. Пишу программу для Atmega8535. Использую при этом scmRTOS 3.10 и компилятор IAR 6.3. При компиляции получаю ошибку:

Error[Pe795]: specializing function "OS::process<pr, stack_size, rstack_size>::Exec [with pr=OS::pr0, stack_size=(word)40U, rstack_size=(word)10U]" D

Код программы:

#include <ioavr.h>
#include <scmRTOS.h>
//---------------------------------------------------------------------------
typedef OS::process<OS::pr0, 40, 10> TProc1;
typedef OS::process<OS::pr1, 40, 10> TProc2;
//---------------------------------------------------------------------------

TProc1 Proc1;
TProc2 Proc2;

//---------------------------------------------------------------------------
#define LED1 0
#define LED2 1
#define LED_DDR DDRB
#define LED_PORT PORTB

int main()
{

LED_DDR = 0xff;
LED_PORT = (1<<LED1)|(1<<LED2);


TCNT0 = 0xf0;
TCCR0 = 0x05;
TIMSK |= (1 << TOIE0);


OS::Run();
}
//---------------------------------------------------------------------------

OS_PROCESS void TProc1::Exec()
{
for(;;)
{
LED_PORT ^= (1<<LED1);
Sleep(500);
}
}
//---------------------------------------------------------------------------

OS_PROCESS void TProc2::Exec()
{
for(;;)
{
LED_PORT ^= (1<<LED2);
Sleep(120);
}
}


//---------------------------------------------------------------------------
void OS::SystemTimerUserHook()
{
TCNT0 = 0xf0;
}

Место обнаружения ошибки - на этой строке: OS_PROCESS void TProc1::Exec()
Для функции TProc2::Exec() - такая же ошибка.
Вроде как все согласно документации на scmRTOS.
Сергей Борщ
Оберните определение каждой функции Exec в namespace OS {}:
CODE
namespace OS
{
    OS_PROCESS void TProc1::Exec()
    {
      for(;;)
        {
           LED_PORT ^= (1<<LED1);
           Sleep(500);
        }
    }
}


P.S. И используйте конопку при публикации исходников.
_trunk_
К сожалению все те же ошибки. Ничего не изменилось.
Сергей Борщ
QUOTE (_trunk_ @ Oct 3 2011, 15:27) *
К сожалению все те же ошибки. Ничего не изменилось.
Да, в самом деле. Вы обрезали сообщение об ошибке, а я поторопился. Добавьте еще template<> перед каждым определением Exec.
CODE
namespace OS
{
    template <>
    OS_PROCESS void TProc1::exec()
    {
_trunk_
теперь такая ошибка:

Error[Pa002]: the type attribute "__task" is not allowed on this declaration D:\Programs\IAR AVR\FILES\scmRTOS-proj-IAR\test3\main.cpp 41
dxp
Цитата(_trunk_ @ Oct 3 2011, 19:58) *
теперь такая ошибка:

Error[Pa002]: the type attribute "__task" is not allowed on this declaration D:\Programs\IAR AVR\FILES\scmRTOS-proj-IAR\test3\main.cpp 41

Нужно template<> оставить, а OS_PROCESS тут убрать.
_trunk_
спасибо, получилось
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.