|
Начало работы with scmRTOS, Несколько вопросиков |
|
|
|
Feb 20 2008, 14:56
|
Частый гость
 
Группа: Новичок
Сообщений: 83
Регистрация: 2-02-06
Пользователь №: 13 912

|
Хочется научиться работать с этой штукой - scmRTOS & AVR(Atmega8) & IAR 4.30A ! Почитал темы которые есть на форуме, почитал User's Manual v2. Возникло некторое количество вопросов: 1. Какая последовательность создания проекта: мои предположения - создаем в IAR новый проект, тискаем добавить файлы в проект и добавляем OS_Kernel.cpp , OS_Services.cpp , OS_Target_asm.s90 , OS_Target_cpp.cpp , usrlib.cpp. В maim.cpp пишем Код #include <scmRTOS.h> . Затем каким то образом нужно создать самому как я понял scmRTOS_TARGET_CFG.h и scmRTOS_CONFIG.h, но как не ясно или их нужно тупо скопировать из примера автора и если что нада то менять. 2. Почему в примерах автор добавляет Код void OS::SystemTimerUserHook() { } void OS::IdleProcessUserHook() { } Так нужно делать всегда ? 3. Дальше >> понятно что для AVR передачу управления можно осуществить сгенерировав прерывание например от компоратора как описано в документации, но непонятно как нужно оформить функцию обработки этого прерывания, и чем она будет отличаться от функции обработки других прерываний. О взаимодействии между потоками пока вроде понятно. Может кто нить может описать последовательность начальных действий и привести пример кода или хотя бы шапку , где есть процессы и обработчики прерываний и передача управления. Мог написать что - нибудь глупое, потому как в круг моих понятий scmRTOS пока входит очень туманно или вообще не входит.
|
|
|
|
|
 |
Ответов
|
Mar 12 2008, 10:45
|
Знающий
   
Группа: Свой
Сообщений: 589
Регистрация: 24-04-05
Пользователь №: 4 447

|
Реализация меню - это отдельная тема для разговора. Если бы я сейчас начинал свой проект, то, возможно, и применил бы ОО подход в создании меню. Правда, пока не понятно, как это усложнится в случае иерархического меню. У меня меню создается макросом MAKE_MENU (Name, Next, Previous, Parent, Sibling, SelectFunc, EnterFunc, Text). Структура меню видна, как на ладони. И главное, что это уже отлажено и работает. Цитата(dxp @ Mar 12 2008, 13:06)  вот этот код обработки пунктов меню имеет смысл поместить в один процесс (как правило, низкоприоритетный) Этот процесс должен обрабатывать не только пункты меню, но и другие функции, в частности EditTime. По совету Сергея я создал от базового абстрактного класса TKey два новых класса: TMainMenu и TEditTime , которые имеют собственные реализации виртуальных методов Up, Down, Right, Left. Теперь мне надо, чтобы процесс, который получает сообщение в виде scan_code нажатой кнопки от ISR Timer2 отрабатывался по-разному, в зависимости от того, что в данный момент нужно: навигация по пунктам меню или редактирование времени. Как это сделать? PS. Ничего лучшего, кроме как при входе в меню "Настройка -> Время" установить обычный глобальный флаг (не OS::EventFlag), по которому в процессе TKey определять какие действия необходимо делать при нажатии на кнопки, не придумал. Спрашивается. Зачем было городить виртуальные функции с абстрактными классами?
|
|
|
|
|
Mar 12 2008, 12:30
|

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

|
Цитата(alux @ Mar 12 2008, 12:45)  PS. Ничего лучшего, кроме как при входе в меню "Настройка -> Время" установить обычный глобальный флаг (не OS::EventFlag), по которому в процессе TKey определять какие действия необходимо делать при нажатии на кнопки, не придумал. Спрашивается. Зачем было городить виртуальные функции с абстрактными классами?  Мимо. Заводите объекты ваших классов-потомков, заводите указатель на абстрактный класс TKey: Код TMainMenu MainMenu; TEditTime EditTime; TKey *CurrentMode = &MainMenu; // начинаем с меню. enum TKeyCode { KEY_LEFT, KEY_RIGHT, KEY_UP, KEY_DOWN }; OS::message<TKeyCode> Keyboard; Указателю вы можете присвоить адрес любого класса-потомка этого базового класса. Т.е. надо меню - CurrentMode = &MainMenu. Надо редактировать время - CurrentMode = &EditTime; Теперь в потоке, который собственно организует управление делаете вызов виртуальных функций: Код for(;;) { if(!Keyboard.Wait(timeout)) { CurrentMode = &MainMenu; // пользователь ушел, выход в основной режим по таймауту // или CurrentMode->Timeout(); } TKeyCode Key = Keyboard; switch (Key) { case LEY_LEFT: CurrentMode->Left(); break; case LEY_RIGHT: CurrentMode->Right(); break; ..................... } } Примерно так... Потом увидете, что все пункты меню можно построить точно так же как и TMainMenu, а красивую и понятную таблицу переходов между ними можно продолжать генерить макросом.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
Сообщений в этой теме
URANst Начало работы with scmRTOS Feb 20 2008, 14:56 dxp Цитата(URANst @ Feb 20 2008, 20:56) . Зат... Feb 21 2008, 04:11 URANst Вот взял из примера , это обработчик прерывания, к... Feb 21 2008, 06:50 URANst С предыдущим вроде разобрался, все оказалось проще... Feb 21 2008, 11:55 IgorKossak ENABLE_NESTED_INTERRUPTS(); - разрешить вложенные ... Feb 21 2008, 12:14 URANst Так получается что 1 прерывание сис таймера - это ... Feb 21 2008, 12:36 spf Цитата(URANst @ Feb 21 2008, 17:36) Так п... Feb 21 2008, 14:14 alux Тоже решил попробовать эту ОС. Долго не мог решитс... Mar 2 2008, 17:02 dxp Цитата(alux @ Mar 2 2008, 23:02) Выдает п... Mar 3 2008, 04:55 alux Так что же мне делать в этом конкретном случае кро... Mar 3 2008, 06:53 IgorKossak Цитата(alux @ Mar 3 2008, 08:53) Может не... Mar 3 2008, 11:53  alux Цитата(IgorKossak @ Mar 3 2008, 15:53) Су... Mar 4 2008, 15:43   IgorKossak Цитата(alux @ Mar 4 2008, 17:43) В overvi... Mar 4 2008, 20:09 alux При включении моих исходников проекта на Си в прое... Mar 4 2008, 14:13 Сергей Борщ Цитата(alux @ Mar 4 2008, 16:13) Мой прое... Mar 4 2008, 16:02  dxp Цитата(Сергей Борщ @ Mar 4 2008, 22:02) Г... Mar 5 2008, 04:55   alux Цитата(dxp @ Mar 5 2008, 08:55) Регистра ... Mar 5 2008, 07:36    Сергей Борщ Цитата(alux @ Mar 5 2008, 09:36) Вот толь... Mar 5 2008, 10:49     Сергей С. Цитата(Сергей Борщ @ Mar 5 2008, 14:49) Н... Mar 6 2008, 06:53      Сергей Борщ Цитата(Сергей С. @ Mar 6 2008, 08:53) Как... Mar 6 2008, 13:26       Сергей С. Цитата(Сергей Борщ @ Mar 6 2008, 17:26) Е... Mar 6 2008, 20:14    dxp Цитата(alux @ Mar 5 2008, 13:36) Почему н... Mar 5 2008, 11:14    Stas633 И снова "уровень оптимизации".. / см.... Jul 30 2008, 18:42 alux Имеет ли значение уровень оптимизации компилятора ... Mar 4 2008, 16:09 alux Мне не понятно, почему для генерации программного ... Mar 9 2008, 21:15 Сергей Борщ Цитата(alux @ Mar 9 2008, 23:15) Мне не п... Mar 10 2008, 01:42  alux Цитата(Сергей Борщ @ Mar 10 2008, 05:42) ... Mar 10 2008, 04:40   ReAl Цитата(alux @ Mar 10 2008, 06:40) Почему?... Mar 10 2008, 09:08    alux Спасибо за разъяснение. Маленькое уточнение: sbi P... Mar 10 2008, 09:56     ReAl Цитата(alux @ Mar 10 2008, 11:56) Маленьк... Mar 10 2008, 15:36      alux Цитата(ReAl @ Mar 10 2008, 19:36) Глянул ... Mar 10 2008, 16:00       Сергей Борщ Цитата(alux @ Mar 10 2008, 18:00) Но это ... Mar 10 2008, 16:52 alux Возникло пару вопросов. Допустим, есть три процесс... Mar 11 2008, 12:37 dxp Цитата(alux @ Mar 11 2008, 18:37) И второ... Mar 11 2008, 14:03 Сергей Борщ Цитата(alux @ Mar 11 2008, 14:37) 3) Посл... Mar 11 2008, 16:48  alux Цитата(Сергей Борщ @ Mar 11 2008, 20:48) ... Mar 11 2008, 20:31   Сергей Борщ Цитата(alux @ Mar 11 2008, 22:31) Так изн... Mar 11 2008, 22:31    alux Цитата(Сергей Борщ @ Mar 12 2008, 02:31) ... Mar 12 2008, 06:48     Сергей Борщ Цитата(alux @ Mar 12 2008, 08:48) Как бы ... Mar 12 2008, 08:06     dxp Цитата(alux @ Mar 12 2008, 12:48) Согласе... Mar 12 2008, 09:06  alux Спасибо, Сергей. Сам бы до этого не додумался.
... Mar 12 2008, 13:24   Сергей Борщ Цитата(alux @ Mar 12 2008, 15:24) В конст... Mar 12 2008, 16:26 alux Сделал так как Сергей сказал. За исключением того,... Mar 12 2008, 16:57 alux Проблема с повтором решена. Спасибо Сергею Борщу. ... Mar 14 2008, 08:55 alux Как узнать точное использование стека процессами? ... Mar 18 2008, 07:50 dxp Цитата(alux @ Mar 18 2008, 13:50) Как узн... Mar 18 2008, 09:02  alux Цитата(dxp @ Mar 18 2008, 13:02) Сергей Б... Mar 18 2008, 09:38   dxp Цитата(alux @ Mar 18 2008, 15:38) Что так... Mar 18 2008, 13:13  alux Цитата(dxp @ Mar 18 2008, 13:02) После эт... Mar 18 2008, 15:19   dxp Цитата(alux @ Mar 18 2008, 21:19) Уж изви... Mar 19 2008, 04:32    alux Цитата(dxp @ Mar 19 2008, 08:32) В данном... Mar 19 2008, 07:26     dxp Цитата(alux @ Mar 19 2008, 13:26) Что зна... Mar 19 2008, 09:42      alux Цитата(dxp @ Mar 19 2008, 12:42) Там все ... Jun 28 2008, 08:38       Сергей Борщ Цитата(alux @ Jun 28 2008, 11:38) Можно х... Jun 28 2008, 12:29        alux Цитата(Сергей Борщ @ Jun 28 2008, 15:29) ... Jun 28 2008, 18:11        alux Как определить размеры потребления RSTACK процесса... Apr 14 2009, 03:03         dxp Цитата(alux @ Apr 14 2009, 10:03) Как опр... Apr 14 2009, 06:04          alux Цитата(dxp @ Apr 14 2009, 09:04) Иначе (е... Apr 14 2009, 11:09           dxp Цитата(alux @ Apr 14 2009, 18:09) Не рабо... Apr 15 2009, 06:41 alux Обнаружил такую проблему. Если два процесса ждут о... Mar 19 2008, 13:15 dxp Цитата(alux @ Mar 19 2008, 19:15) Обнаруж... Mar 20 2008, 07:17  alux Цитата(dxp @ Mar 20 2008, 11:17) Возможно... Mar 21 2008, 09:07   dxp Цитата(alux @ Mar 21 2008, 15:07) Заменил... Mar 21 2008, 09:27 alux Попробовал создать отдельный ef2 для TProc2 и
Код... Mar 21 2008, 10:39 dxp Цитата(alux @ Mar 21 2008, 16:39) Попробо... Mar 21 2008, 13:58 alux Отладчиком (JTAG) не пользуюсь по причине отсутств... Mar 21 2008, 14:46 dxp Цитата(alux @ Mar 21 2008, 20:46) Отладчи... Mar 22 2008, 07:38 alux Вроде нашел еще один свой прокол : Скорость поступ... Mar 22 2008, 11:28 alux Прошу прощения за невнимательность. Проблема с обн... Mar 23 2008, 15:25 IgorKossak Цитата(alux @ Mar 23 2008, 17:25) ... в р... Mar 25 2008, 09:50 sevstels Хочу поинтересоваться, это только у меня не запуск... Mar 25 2008, 09:11 sevstels Тестировал на примерах scmRTOS v3 AVR.
Изменил тол... Mar 25 2008, 10:43 IgorKossak sevstels, приложите к сообщению файл проекта (.ewp... Mar 25 2008, 11:49 sevstels Пока пытаюсь найти причину сам.
Вот нашёл вот тут:... Mar 26 2008, 05:27 IgorKossak Цитата(sevstels @ Mar 26 2008, 07:27) DEN... Mar 26 2008, 06:23 Ykidia Здравствуйте! Есть небольшой проектик под scmR... Mar 26 2008, 10:33 spf Цитата(Ykidia @ Mar 26 2008, 15:33) Что н... Mar 26 2008, 10:42 Ykidia Хорошо-хорошо, уже создал. Зачем кричать-то? Mar 26 2008, 11:38 sevstels Игорь, в общем, ничего к сожалению не получается.
... Mar 27 2008, 03:48 IgorKossak Цитата(sevstels @ Mar 27 2008, 05:48) Иго... Mar 27 2008, 06:45  sevstels Цитата(IgorKossak @ Mar 27 2008, 15:45) Е... Apr 1 2008, 04:55 Stas633 Прошу прощения за предыдущий пост! (стыдно, н... Jul 30 2008, 20:30 Copypaster При отладке демо-приложения в IAREW v 4.11b для MS... Jul 28 2009, 11:16 IgorKossak Цитата(Copypaster @ Jul 28 2009, 14:16) П... Jul 28 2009, 12:36 Embedder74 Начал разбираться с scmRTOS.3.10. Ответьте, плз. н... Mar 24 2010, 10:09 AHTOXA Цитата(Embedder74 @ Mar 24 2010, 15:09) Н... Mar 24 2010, 12:51 dxp Цитата(Embedder74 @ Mar 24 2010, 16:09) Н... Mar 24 2010, 15:04  Embedder74 Цитата(dxp @ Mar 24 2010, 18:04) Как это ... Mar 25 2010, 06:50 Embedder74 Пользуясь случаем, хочу спросить у DXP. Когда прим... Mar 25 2010, 09:03 dxp Цитата(Embedder74 @ Mar 25 2010, 15:03) П... Mar 26 2010, 07:21 jorikdima Ну и я что ли спрошу.
Почему в проекте, написанном... Mar 26 2010, 08:46 dxp Цитата(jorikdima @ Mar 26 2010, 14:46) По... Mar 26 2010, 12:54  jorikdima Цитата(dxp @ Mar 26 2010, 15:54) Потому, ... Mar 26 2010, 13:24   Сергей Борщ Цитата(jorikdima @ Mar 26 2010, 15:24) По... Mar 26 2010, 13:40   dxp Цитата(jorikdima @ Mar 26 2010, 19:24) Со... Mar 26 2010, 14:48    jorikdima Цитата(dxp @ Mar 26 2010, 17:48) Кстати, ... Mar 27 2010, 06:51     dxp Цитата(jorikdima @ Mar 27 2010, 12:51) Пр... Mar 27 2010, 13:31      jorikdima Цитата(dxp @ Mar 27 2010, 16:31) А что, у... Mar 28 2010, 10:45
3 страниц
1 2 3 >
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0
|
|
|