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

 
 
> как правильно создавать mailbox? IAR PowerPac, новичку нужен совет
Dunduk
сообщение May 19 2011, 13:57
Сообщение #1


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

Группа: Участник
Сообщений: 87
Регистрация: 15-08-09
Пользователь №: 51 904



Копаюсь в IAR Powerpac под LPC2478.
Появилась необходимость завести mailbox для перекидывания парочки текстовых строк из одной задачи в другую.
В PowerPac есть готовый большой пример, использующей RTOS. Но они там умудрились обойтись почти без передачи информации от одной задачи к другой. А мне вот надо....
Не могу понять где именно разместить описание моего mailbox-а.
Размещаю в файле, посвященном одной задаче - он не виден в другой. Размещаю в main - не виден нигде.
Ясно что делаю что-то совсем не так, а что именно?
pdf про RTOS выучил почти наизусть sm.gif особенно параграф о mailbox.
Буду рад любому совету.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Burner
сообщение May 21 2011, 21:38
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 068
Регистрация: 14-01-08
Из: Винница
Пользователь №: 34 083



А типо External ? В стандартных RTOS я не разбираюсь, но сделать переменную, видимую для всех ПП в обычном Си, получалось.
Go to the top of the page
 
+Quote Post
Dunduk
сообщение May 30 2011, 13:44
Сообщение #3


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

Группа: Участник
Сообщений: 87
Регистрация: 15-08-09
Пользователь №: 51 904



Цитата(Burner @ May 22 2011, 00:38) *
А типо External ? В стандартных RTOS я не разбираюсь, но сделать переменную, видимую для всех ПП в обычном Си, получалось.

да, спасибо, примерно так и надо как я понял.
Вроде мейлбокс теперь есть, но все равно работает плохо через раз и более 1 раза им воспользоваться не удается. Что-то я делаю не так.
Я завел отдельный файл в проекте - mailbox.c (код внизу)
Далее, в main, еще до команды OS_Start(), я инициализирую мейлбокс с помощью InitKeyMan(). Потом в одной задаче я записываю в мейлбокс 1 байт с помощью KEYMAN_StoreCond() а затем в другой задаче я его читаю с помощью GetKey().
В результате переменная читается, но не всегда и только 1 раз - потом она уже не изменяется. Пробовал OS_ClearMB() - симптомы те же.
Поможите люди добрые!
CODE

#include "RTOS.H"

OS_MAILBOX MBKey;
char MBKeyBuffer[1];

// ---------- прототипы ---------------------
void InitKeyMan(void);
char KEYMAN_StoreCond(char k);
char GetKey(void);
void ClearKeyMB(void);
// ------------------------------------------

void InitKeyMan(void) {
OS_CREATEMB(&MBKey,1,sizeof(MBKeyBuffer),&MBKeyBuffer);
}

char KEYMAN_StoreCond(char k) {
return OS_PutMailCond(&MBKey, &k);
}

char GetKey(void) {
char c=0;
OS_GetMailCond(&MBKey, &c);
return c;
}
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 28th July 2025 - 23:56
Рейтинг@Mail.ru


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