Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: как правильно создавать mailbox? IAR PowerPac
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > IAR
Dunduk
Копаюсь в IAR Powerpac под LPC2478.
Появилась необходимость завести mailbox для перекидывания парочки текстовых строк из одной задачи в другую.
В PowerPac есть готовый большой пример, использующей RTOS. Но они там умудрились обойтись почти без передачи информации от одной задачи к другой. А мне вот надо....
Не могу понять где именно разместить описание моего mailbox-а.
Размещаю в файле, посвященном одной задаче - он не виден в другой. Размещаю в main - не виден нигде.
Ясно что делаю что-то совсем не так, а что именно?
pdf про RTOS выучил почти наизусть sm.gif особенно параграф о mailbox.
Буду рад любому совету.
Burner
А типо External ? В стандартных RTOS я не разбираюсь, но сделать переменную, видимую для всех ПП в обычном Си, получалось.
Dunduk
Цитата(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;
}
Dunduk
Так. Продолжим.
Выкинул все лишнее, хорошо подумал и почитал help в IAR. В итоге, один черт, не работает. Ситуация такая:
В main.c объявляю:
Код
OS_MAILBOX MBKey;
char MBKeyBuffer[1];
//... и перед самым стартом ОС инициализирую:
OS_CREATEMB(&MBKey,1,sizeof(MBKeyBuffer),&MBKeyBuffer);


В задаче web server по приходу определенного параметра в Get запросе пишу байт данных в мейл бокс (и точно знаю что попадаю в эту процедуру и sValue !=0):
Код
extern OS_MAILBOX MBKey;
//....
OS_PutMailCond(&MBKey,&sValue);


И теперь в задаче отображения не дисплее извлекаю содержимое:
Код
extern OS_MAILBOX MBKey;
//...
char c=0;
OS_GetMailCond(&MBKey,&c)


но переменная c=0, либо иногда какому-то случайному значению. Но только не тому что надо.
У кого какие будут мысли?
Dunduk
все. работает. проблема была с выводом информации, а не с самим мейл боксом.
Большое спасибо за дельные советы beer.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.