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

 
 
> JacOS и C++
asket
сообщение May 4 2008, 08:11
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 91
Регистрация: 24-08-06
Из: Москва
Пользователь №: 19 809



Уважаемые господа! Прошу помочь новичку, требуется написание кода на 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)

Что не так делаю?(
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 4)
MrYuran
сообщение May 4 2008, 08:39
Сообщение #2


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



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

Не понятно... что имеется в виду?
особенно корпоративность


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
asket
сообщение May 4 2008, 10:13
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 91
Регистрация: 24-08-06
Из: Москва
Пользователь №: 19 809



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


Под "корпоративностью" имеется ввиду невытесняющая многозадачность, а с использованием scmRTOS для переключения задач используется прерывание по таймеру и по приоритетам, а у меня помимо этого прерывания используются криические участки обработчиков прерывания по фронту и по таймеру для передачи и приема данных по собственной шине, в результате совместного использованием с ситемным таймером ОС прием по шине осушествляется с потерей данных за счет задержки вызова данного обработчика прерывания.. Отсюда принято решение использовать маленькую ОС, которая некритична к задержке обработчика прерывания по таймеру.. Мне надо только понять что неправильно сделал в этом вышеупомянутом примере встраивания ОС в ООП, больше ничего не требуется.)
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение May 4 2008, 15:24
Сообщение #4


Гуру
******

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



Цитата(asket @ May 4 2008, 11:11) *
Что не так делаю?(
Указатели на функции и указатели на функции-члены - разные указатели. При вызове функции-члена неявно передается указатель на объект (this). Поэтому такие указатели несовместимы. Обычные указатели совместимы с указателями на статические функции-члены.


--------------------
На любой вопрос даю любой ответ
"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
asket
сообщение May 4 2008, 15:59
Сообщение #5


Частый гость
**

Группа: Участник
Сообщений: 91
Регистрация: 24-08-06
Из: Москва
Пользователь №: 19 809



Цитата(Сергей Борщ @ 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);
}
}

Сообщение отредактировал asket - May 4 2008, 16:15
Go to the top of the page
 
+Quote Post

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

 


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


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