|
scmRTOS. Вопросы и ответы. |
|
|
|
Oct 1 2007, 09:35
|
Бывалый
    
Группа: Свой
Сообщений: 1 584
Регистрация: 7-08-07
Пользователь №: 29 615

|
Из-за того, что мои предложения повисли в воздухе, решил открыть тему здесь. У меня вопросы по scmRTOS (извините, если они покажутся дилетанскими, я только начал мучить ОС). Раньше считал, что в uC OS лишняя заморочка, сейчас уже так не считаю. Общие вопросы для общего развития. 1. Зачем понадобилось иметь порядок приоритетов сверху вниз (насколько я понял из-за Blackfin только). a&-a немногим проигрывает. 2. Я хочу ограничиться #if scmRTOS_CONTEXT_SWITCH_SCHEME == 0, т.е. использовать всегда программное прерывание. Правильно ли это ? 3. Про OS::TChannel сказано, что этот объект оставлен для совместимости с версией 1. Рекомендуется пользоваться OS::channel. Мне же показалось, несмотря на универсальность OS::channel, применение его для байтовых каналов слишком расточительным. Я бы рассматривал бы как чистый FIFO буфер, как-то так #define TFIFO OS::Channel и изменил он нем представление как об атавизме. Или я чего-то не понял ? Платформозависимые вопросы. Я использую LPC2148 с IAR 5.10. Использовал порт Сергея Борщ с незначительными собственными доработками. 1. Интересует особенности использования векторных прерываний, кроме системного времени. На что следует обращать внимание. 2. Или их использовать нежелательно. PS. Не считайте мои вопросы наездом, scmRTOS - замечательная вещь.
|
|
|
|
|
 |
Ответов
|
Jan 18 2008, 07:07
|

Частый гость
 
Группа: Свой
Сообщений: 107
Регистрация: 6-09-06
Из: Москва
Пользователь №: 20 118

|
Цитата Посмотрел, как в OS_Target_cpp.cpp сделан обработчик прерывания - там баг, который я исправил в своем проекте, но не перенес исправление в репозиторий. В вашем коде SystemTimerUserHook(); вызывается только если прерывание пришло от таймера. Надо сделать такое изменнение: ... Может там ещё нужно где-то поправить? У меня периодически отваливаются прерывания от системного таймера при большой активности DBGU. Программа постоянно сидит в void OS::IdleProcessUserHook() {} Если не трудно, можно выложить обновление здесь?
|
|
|
|
|
Jan 18 2008, 09:19
|

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

|
Цитата(LessNik @ Jan 18 2008, 09:07)  Может там ещё нужно где-то поправить? У меня периодически отваливаются прерывания от системного таймера при большой активности DBGU. DBGU при этом продолжает работать?Стека для прерываний достаточно выделено? Цитата(LessNik @ Jan 18 2008, 09:07)  Программа постоянно сидит в void OS::IdleProcessUserHook() {} Это нормально, если ей больше нечего делать. Цитата(LessNik @ Jan 18 2008, 09:07)  Если не трудно, можно выложить обновление здесь? Да там только приведенные выше две функции OS::SystemTimer_Handler() и OS::SystemTimer_ISR() изменились. http://scmrtos.svn.sourceforge.net/viewvc/...1=71&r2=105
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Jan 18 2008, 14:36
|

Частый гость
 
Группа: Свой
Сообщений: 107
Регистрация: 6-09-06
Из: Москва
Пользователь №: 20 118

|
Цитата(Сергей Борщ @ Jan 18 2008, 12:19)  DBGU при этом продолжает работать?Стека для прерываний достаточно выделено?Это нормально, если ей больше нечего делать.Да там только приведенные выше две функции OS::SystemTimer_Handler() и OS::SystemTimer_ISR() изменились. http://scmrtos.svn.sourceforge.net/viewvc/...1=71&r2=105GBGU перестаёт работать и перестаёт вызываться системное прерывание вообще OS_INTERRUPT void OS::SystemTimer_ISR() и Программа постоянно сидит в void OS::IdleProcessUserHook() {}, периодически реагируя на прерывание от другого таймера TC0. Для верности объявил: typedef OS::process<OS::pr0, 1000> TDBGUProc; всё равно не работает.
|
|
|
|
|
Jan 19 2008, 00:47
|

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

|
Цитата(LessNik @ Jan 18 2008, 16:36)  GBGU перестаёт работать и перестаёт вызываться системное прерывание вообще OS_INTERRUPT void OS::SystemTimer_ISR() и Программа постоянно сидит в void OS::IdleProcessUserHook() {}, периодически реагируя на прерывание от другого таймера TC0. Очень похоже, что ваша программа некорректно (без записи в AIC_EOICR) завершает какое-то из прерываний. При этом перестают вызываться прерывания с таким же и более низкими приоритетами. На это косвенно указывет и то, что программа крутится в Idle,т.е. не вызывается и переключатель контекста. Возможно, в каком-то из прерываний вы забыли завести объект OS:TISRW, в деструкторе которого и выпоняется эта запись. Если какое-либо ваше прерывание не использет никакие сервисы ОС, то можно не заводить в нем объект OS:TISRW, но тогда вы должны сами в конце этого прерывания вручную прописать AIC_EOICR. Вот такая версия. Надеюсь, что ОС в данном случае не виновата. Но если вы все же найдете в ней недоработку-обязательно сообщите. И даже если не в ОС дело-все равно отпишитесь здесь, интересно же  Цитата(prottoss @ Dec 13 2007, 14:18)  кстати, в ассемблер на IAR тоже можно включать C-шные хедеры, так что я думаю, что можно побороть эту проблему. Увы, насколько я понял рассматривая заголовочные файлы компилятора, __HAS_RAMPZ__ определяется не в заголовочном файле (который подключен к OS_Target_asm.s90), а самим компилятором на основе указанного ему типа процессора. А вот в ассемблере аналогичное определение они почем-то не сделали  Выход есть - написать в начале файла свой большой #if defined (__ATMEGA128__) и определить в нем __HAS_RAMPZ__ для всех процессоров, в которых он есть. Надо занести это в трекер, чтобы не забыть сделать к ближайшему релизу
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Jan 22 2008, 06:40
|

Частый гость
 
Группа: Свой
Сообщений: 107
Регистрация: 6-09-06
Из: Москва
Пользователь №: 20 118

|
Цитата(Сергей Борщ @ Jan 19 2008, 03:47)  Очень похоже, что ваша программа некорректно (без записи в AIC_EOICR) завершает какое-то из прерываний. При этом перестают вызываться прерывания с таким же и более низкими приоритетами. На это косвенно указывет и то, что программа крутится в Idle,т.е. не вызывается и переключатель контекста. Возможно, в каком-то из прерываний вы забыли завести объект OS:TISRW, в деструкторе которого и выпоняется эта запись. Если какое-либо ваше прерывание не использет никакие сервисы ОС, то можно не заводить в нем объект OS:TISRW, но тогда вы должны сами в конце этого прерывания вручную прописать AIC_EOICR. Получается, если я завожу объект OS:TISRW, то мне не нужно прописывать AIC_EOICR? Я не нашел в деструкторе этого объекта записи в AIC_EOICR. Я обычно прописывал AT91C_BASE_AIC->AIC_EOICR = 0; И в примере тоже вручную прописывали: Код OS_INTERRUPT void Timer_ISR() { OS::TISRW ISRW; volatile dword Tmp = AT91C_BASE_TCB->TCB_TC0.TC_SR; // read to clear int flag
AT91C_BASE_PIOA->PIO_SODR = (1 << 0); Timer_Ovf.SignalISR();
AT91C_BASE_AIC->AIC_EOICR = 0; } Если не дописывать, то прерывание больше не вызывается Попробовал так: Код OS_INTERRUPT void TimerCounter0Interrupt(void) { OS::TISRW ISRW; volatile dword Tmp = AT91C_BASE_TCB->TCB_TC0.TC_SR; // read to clear int flag
// AT91C_BASE_AIC->AIC_EOICR = 0; без этой строчки не работает
}
|
|
|
|
Сообщений в этой теме
alexander55 scmRTOS. Вопросы и ответы. Oct 1 2007, 09:35 dxp Цитата(alexander55 @ Oct 1 2007, 16:35) 1... Oct 1 2007, 11:11 alexander55 Цитата(dxp @ Oct 1 2007, 15:11) Вы сравни... Oct 1 2007, 12:49  dxp Цитата(alexander55 @ Oct 1 2007, 19:49) П... Oct 1 2007, 13:10 Сергей Борщ Цитата(alexander55 @ Oct 1 2007, 12:35) И... Oct 1 2007, 11:42 alexander55 Цитата(Сергей Борщ @ Oct 1 2007, 15:42) В... Oct 1 2007, 13:36  Сергей Борщ Цитата(alexander55 @ Oct 1 2007, 16:36) Х... Oct 1 2007, 14:53   alexander55 Цитата(Сергей Борщ @ Oct 1 2007, 18:53) Н... Oct 2 2007, 04:43    Сергей Борщ Цитата(alexander55 @ Oct 2 2007, 07:43) P... Oct 2 2007, 07:57     alexander55 [quote name='Сергей Борщ' date='Oct 2 ... Oct 2 2007, 09:19      Сергей Борщ Цитата(alexander55 @ Oct 2 2007, 12:19) С... Oct 2 2007, 09:49       alexander55 Вопрос. Как в scmRTOS организовать карусель скажем... Oct 3 2007, 06:28        dxp Цитата(alexander55 @ Oct 3 2007, 13:28) В... Oct 3 2007, 07:24         alexander55 Цитата(dxp @ Oct 3 2007, 11:24) Никак. А ... Oct 3 2007, 07:40          alexander55 Цитата(alexander55 @ Oct 3 2007, 11:40) В... Oct 3 2007, 09:46           Сергей Борщ Цитата(alexander55 @ Oct 3 2007, 12:46) Х... Oct 3 2007, 10:38            alexander55 Цитата(Сергей Борщ @ Oct 3 2007, 14:38) [... Oct 3 2007, 11:01             alexander55 Правильно ли я понимаю, что
минимальный джентальм... Oct 4 2007, 07:34              Сергей Борщ Цитата(alexander55 @ Oct 4 2007, 10:34) П... Oct 4 2007, 10:00               alexander55 Цитата(Сергей Борщ @ Oct 4 2007, 14:00) Н... Oct 4 2007, 10:36                dxp Цитата(alexander55 @ Oct 4 2007, 17:36) И... Oct 4 2007, 11:53                 alexander55 Спасибо всем за ответы.
Предлагаю выкладывать в эт... Oct 8 2007, 05:44                  dxp Цитата(alexander55 @ Oct 8 2007, 12:44) С... Oct 8 2007, 06:03                   alexander55 Цитата(dxp @ Oct 8 2007, 10:03) КодOS_PRO... Oct 8 2007, 07:46                  Сергей Борщ Цитата(alexander55 @ Oct 8 2007, 08:44) К... Oct 8 2007, 08:05                   alexander55 Цитата(Сергей Борщ @ Oct 8 2007, 12:05) О... Oct 8 2007, 11:12                    Сергей Борщ Цитата(alexander55 @ Oct 8 2007, 14:12) P... Oct 8 2007, 11:27                     alexander55 Цитата(Сергей Борщ @ Oct 8 2007, 15:27) Н... Oct 8 2007, 11:58                      Сергей Борщ Цитата(alexander55 @ Oct 8 2007, 14:58) З... Oct 8 2007, 13:27                       alexander55 Цитата(Сергей Борщ @ Oct 8 2007, 17:27) К... Oct 9 2007, 04:41                        Сергей Борщ Цитата(alexander55 @ Oct 9 2007, 07:41) c... Oct 9 2007, 10:24                         dxp Цитата(Сергей Борщ @ Oct 9 2007, 17:24) В... Oct 9 2007, 12:47                          alexander55 Цитата(dxp @ Oct 9 2007, 16:47) Мущщины, ... Oct 9 2007, 13:05                           Сергей Борщ Цитата(alexander55 @ Oct 9 2007, 16:05) Я... Oct 9 2007, 14:24                            alexander55 Цитата(Сергей Борщ @ Oct 9 2007, 18:24) Н... Oct 10 2007, 04:27                             alexander55 Цитата(alexander55 @ Oct 10 2007, 08:27) ... Oct 11 2007, 05:52                           dxp Цитата(alexander55 @ Oct 9 2007, 20:05) В... Oct 10 2007, 03:57                            ReAl "UP"
Цитата(dxp @ Oct 10 2007, ... Nov 9 2007, 16:15                             alexander55 Цитата(ReAl @ Nov 9 2007, 19:15) А если з... Nov 12 2007, 07:04        spf Цитата(alexander55 @ Oct 3 2007, 12:28) В... Oct 3 2007, 07:28 prottoss Привет всем!
решил поиграться с scmRTOS. Скача... Dec 8 2007, 14:37 dxp Цитата(prottoss @ Dec 8 2007, 20:37) Это ... Dec 8 2007, 15:29  prottoss Цитата(dxp @ Dec 8 2007, 22:29) А разве о... Dec 8 2007, 15:44 prottoss Вроде бы нашел косяк:
Я использую в проекте ATmega... Dec 8 2007, 18:06 dxp Цитата(prottoss @ Dec 9 2007, 00:06) В фа... Dec 8 2007, 20:12  prottoss Цитата(dxp @ Dec 9 2007, 03:12) Макрос HA... Dec 9 2007, 09:43 ReAl В порте для avr-gcc с этим проще. Тип процессора п... Dec 13 2007, 10:07 prottoss Цитата(ReAl @ Dec 13 2007, 17:07) В порте... Dec 13 2007, 12:18 bus16 Вот тоже появилось пара вопросов по мютексам:
1 Си... Dec 27 2007, 07:28 jorikdima Цитата(bus16 @ Dec 27 2007, 10:28) Вот то... Dec 27 2007, 09:32  bus16 С 1 - понятно, хотел просто уточнить.
Цитата(jorik... Dec 27 2007, 09:45   dxp Цитата(bus16 @ Dec 27 2007, 15:45) Mutex-... Dec 27 2007, 13:24 jorikdima В том изаключается мягкость, что если ресурс уже з... Dec 27 2007, 13:27 LessNik Возник вопрос по обработке прерываний от системной... Jan 17 2008, 07:35 Сергей Борщ Цитата(LessNik @ Jan 17 2008, 09:35) Пере... Jan 17 2008, 08:59  LessNik Всё заработало. Пока ещё не смог сломать
Цитат... Jan 17 2008, 13:07     Сергей Борщ Цитата(LessNik @ Jan 22 2008, 08:40) Полу... Jan 22 2008, 08:05    LessNik Цитата(Сергей Борщ @ Jan 19 2008, 03:47) ... Jan 31 2008, 10:24     Сергей Борщ Цитата(LessNik @ Jan 31 2008, 12:24) При ... Jan 31 2008, 13:02      spf Цитата(Сергей Борщ @ Jan 31 2008, 18:02) ... Feb 2 2008, 03:25       IgorKossak Цитата(spf @ Feb 2 2008, 05:25) И туда: [... Feb 3 2008, 10:33        zltigo Цитата(IgorKossak @ Feb 3 2008, 13:33) Не... Feb 3 2008, 10:47        Сергей Борщ Цитата(IgorKossak @ Feb 3 2008, 12:33) Ош... Feb 3 2008, 11:30        spf Цитата(IgorKossak @ Feb 3 2008, 15:33) Не... Feb 4 2008, 15:21         IgorKossak Цитата(spf @ Feb 4 2008, 17:21) Все работ... Feb 5 2008, 06:11          spf Цитата(IgorKossak @ Feb 5 2008, 11:11) По... Feb 5 2008, 08:31
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|