Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: JacOS и C++
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Операционные системы
asket
Уважаемые господа! Прошу помочь новичку, требуется написание кода на C++ с использованием JacOS для микроконтроллера MSP430 (компилятор IAR 3.42), от Salvo RTOS отказался по причине недоступности, а от scmRTOS - слишком прожорливы прерывания, что не есть вери гуд, к тому же требуется корпоративность.. Взяв пример на С Jacos, заработало сразу и без проблем, но при попытке создать тот же код в классе возникает проблема, что именно не так было сделано?

на С:

OST_TASK_T task1;

__task void T_1(void)
{
while (1) {

OS_Delay(2);

}
}


int main(void)
{
OS_Init();
OS_Task_Create(T_1, &task1);
while (1) {
OS_Scheduler();
}
}

Теперь при попытке тот же код впихнуть в класс компилер начинает ругаться

class TClass{
OST_TASK task;
public:
__task void Task(void);
TClass(){
OS_Task_Create(Task, &task);
};
};

__task void TClass::Task(void){

while(1){
OS_Delay(100);
}
}

Error[Pe167]: argument of type "void (__code __task TClass::*)()" is incompatible with parameter of type
OST_FUNC

заменив на __task void Task(void); на OST_FUNC Task; // OST_FUNC - указатель на функцию

Продолжает ругаться
Error[Pe147]: declaration is incompatible with "OST_FUNC TClass::Task" (declared at line 11)

Что не так делаю?(
MrYuran
Цитата
слишком прожорливы прерывания, что не есть вери гуд, к тому же требуется корпоративность..

Не понятно... что имеется в виду?
особенно корпоративность
asket
Цитата(MrYuran @ May 4 2008, 12:39) *
Не понятно... что имеется в виду?
особенно корпоративность


Под "корпоративностью" имеется ввиду невытесняющая многозадачность, а с использованием scmRTOS для переключения задач используется прерывание по таймеру и по приоритетам, а у меня помимо этого прерывания используются криические участки обработчиков прерывания по фронту и по таймеру для передачи и приема данных по собственной шине, в результате совместного использованием с ситемным таймером ОС прием по шине осушествляется с потерей данных за счет задержки вызова данного обработчика прерывания.. Отсюда принято решение использовать маленькую ОС, которая некритична к задержке обработчика прерывания по таймеру.. Мне надо только понять что неправильно сделал в этом вышеупомянутом примере встраивания ОС в ООП, больше ничего не требуется.)
Сергей Борщ
Цитата(asket @ May 4 2008, 11:11) *
Что не так делаю?(
Указатели на функции и указатели на функции-члены - разные указатели. При вызове функции-члена неявно передается указатель на объект (this). Поэтому такие указатели несовместимы. Обычные указатели совместимы с указателями на статические функции-члены.
asket
Цитата(Сергей Борщ @ May 4 2008, 19:24) *
Указатели на функции и указатели на функции-члены - разные указатели. При вызове функции-члена неявно передается указатель на объект (this). Поэтому такие указатели несовместимы. Обычные указатели совместимы с указателями на статические функции-члены.


Благодарю за ответ!) Решил вопросы с помошью ключевого слова static.. банально просто!

class TClass{
OST_TASK task;
public:
static __task void Task(void);
TClass(){
OS_Task_Create(Task, &task);
};
};

__task void TClass::Task(void){

while(1){
OS_Delay(100);
}
}
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.