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

 
 
18 страниц V  « < 12 13 14 15 16 > »   
Reply to this topicStart new topic
> Начало работы with scmRTOS, Несколько вопросиков
ReAl
сообщение Nov 11 2012, 22:21
Сообщение #196


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Цитата(ReAl @ Nov 11 2012, 23:53) *
Или делать переключение свободным отложенным прерыванием. Тогда из всех тех прерыываний вышли, все уровни очистили и только потом пойдёт прерывание переключения, кторое тоже за собой почистит.
Ой!
Что-то мне начинает казаться, что для AVR (порт MEGA, на XMEGA я так толком и не смотрел) как раз в переключении прерыванием могут быть неприятности, там ситуация зеркальная.

Тут reti не влияет на бит глобального разрешения EA, но приоритеты обслуживаются аппаратно и очищаются reti

Там вход в прерывание выключает, а reti включает прерывания. Но при синхронном переключении (те же .wait() или там .push()) в недрах вызова ОС могла быть критическая секция и восстановить надо бы состояние запрещённых прерываний, как выше писано. Что-то я сейчас уже сонный, а с понедельника не до того. Забил гвоздик в scmRTOS-блокнотике tomboy, но вот не забыть бы туда заглянуть.


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
a9d
сообщение Nov 12 2012, 03:01
Сообщение #197


Местный
***

Группа: Участник
Сообщений: 312
Регистрация: 9-04-10
Пользователь №: 56 532



А где спрятан SystemTimer_ISR ??? При программном прерывании должен срабатывать он, нигде нет примера как он должен выглядеть.

Все понял. Это неправильный дефайн в порте avr

Сообщение отредактировал a9d - Nov 12 2012, 03:38
Go to the top of the page
 
+Quote Post
ReAl
сообщение Nov 14 2012, 12:44
Сообщение #198


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Цитата(a9d @ Nov 12 2012, 05:01) *
Все понял. Это неправильный дефайн в порте avr
Какой именно и где?


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
a9d
сообщение Nov 14 2012, 13:45
Сообщение #199


Местный
***

Группа: Участник
Сообщений: 312
Регистрация: 9-04-10
Пользователь №: 56 532



порт AVR
scmRTOS_TARGET_CFG.h

Код
namespace OS
{
#if scmRTOS_CONTEXT_SWITCH_SCHEME == 0
    #pragma vector=SYSTEM_TIMER_VECTOR
    OS_INTERRUPT void OS_SystemTimer_ISR();
#else
    #pragma vector=SYSTEM_TIMER_VECTOR
    __interrupt void SystemTimer_ISR();
#endif // scmRTOS_CONTEXT_SWITCH_SCHEME
}


Если scmRTOS_CONTEXT_SWITCH_SCHEME =1 , то пользователю нужно в обязательном порядке писать обработчик системного таймера.

Сообщение отредактировал a9d - Nov 14 2012, 13:47
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Nov 14 2012, 14:20
Сообщение #200


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(a9d @ Nov 14 2012, 15:45) *
Если scmRTOS_CONTEXT_SWITCH_SCHEME =1 , то пользователю нужно в обязательном порядке писать обработчик системного таймера.

Почему это?

Обработчик находится в OS_Target_cpp.cpp уже готовый. Может у вас версия не последняя?
Go to the top of the page
 
+Quote Post
a9d
сообщение Nov 14 2012, 16:08
Сообщение #201


Местный
***

Группа: Участник
Сообщений: 312
Регистрация: 9-04-10
Пользователь №: 56 532



Версия новая и там находится только OS_SystemTimer_ISR
Go to the top of the page
 
+Quote Post
ReAl
сообщение Nov 14 2012, 19:10
Сообщение #202


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Цитата(a9d @ Nov 14 2012, 15:45) *
порт AVR
scmRTOS_TARGET_CFG.h
Ффухх, я уже за порт испугался.
Спасибо, подправлю как-нибудь те недочистки.
Только не «порт AVR», а «примеры к порту AVR/IAR».
В AVR/GCC вообще всё в порядке и в порту и в примерах, а в AVR/IAR порт в порядке, а в примерах недочищено.

Цитата(a9d @ Nov 14 2012, 15:45) *
Если scmRTOS_CONTEXT_SWITCH_SCHEME =1 , то пользователю нужно в обязательном порядке писать обработчик системного таймера.
Не нужно.
Посмотрите примеры 2 и 3, они в репозитории лежат с scmRTOS_CONTEXT_SWITCH_SCHEME 1 и они так прекрасно собираются. Сборка проверялась и с 0, и с 1, только для scmRTOS_CONTEXT_SWITCH_SCHEME 0 ещё нужно scmRTOS_CONTEXT_SWITCH_USER_HOOK_ENABLE 0

В OS_Target_cpp.cpp лежит самодостаточный обработчик, который подключается и работает при любых настройках scmRTOS, так как не охвачен никакими условиями.
Код
//------------------------------------------------------------------------------
#pragma vector=SYSTEM_TIMER_VECTOR
OS_INTERRUPT void OS_SystemTimer_ISR()
{
    scmRTOS_ISRW_TYPE ISR;

#if scmRTOS_SYSTIMER_HOOK_ENABLE == 1
    system_timer_user_hook();
#endif

    Kernel.system_timer();

#if scmRTOS_SYSTIMER_NEST_INTS_ENABLE == 1
    ENABLE_NESTED_INTERRUPTS();
#endif

}
и те предварительные объявления на данный момент никому не нужны и никому не мешают.
Вот только что на всякий случай проверил -- в виртуалке стоит EWB 5.51, пересобрал все примеры.


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
a9d
сообщение Nov 18 2012, 23:53
Сообщение #203


Местный
***

Группа: Участник
Сообщений: 312
Регистрация: 9-04-10
Пользователь №: 56 532



Как подключить CLIB и DLIB к проекту одновременно? Без DLIB не собирается scmRTOS, без CLIB нет printf_P

все. Заменил на printf

Сообщение отредактировал a9d - Nov 19 2012, 00:09
Go to the top of the page
 
+Quote Post
a9d
сообщение Nov 23 2012, 09:11
Сообщение #204


Местный
***

Группа: Участник
Сообщений: 312
Регистрация: 9-04-10
Пользователь №: 56 532



из документации
Цитата
адрес указателя стека текущего процесса, куда будет помещен сам указатель по окончании сохранения контекста текущего процесса.


Зачем при прямой передаче управления обновлять указатель стека? Ведь мы можем просто знать, что контекст всегда храниться в начале стека процесса.

Передача с программным прерывание лучше, потому-что при входе в прерывание компилятор не сохранит/воcстановит локальный контекс ?

Сообщение отредактировал a9d - Nov 23 2012, 15:57
Go to the top of the page
 
+Quote Post
dezna
сообщение Feb 18 2013, 07:06
Сообщение #205


Участник
*

Группа: Участник
Сообщений: 25
Регистрация: 18-03-11
Пользователь №: 63 690



всем добрый день!
подскажите пожалуйста можно ли принудительно вызвать деструктор TCritSect не дожидаясь конца блока, когда это сделает компилятор?
и если да, то как это организовать?
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Feb 18 2013, 08:18
Сообщение #206


Гуру
******

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



QUOTE (dezna @ Feb 18 2013, 09:06) *
принудительно вызвать деструктор TCritSect не дожидаясь конца блока
Извратившись - можно. Но что произойдет, когда дойдя до конца блока этот деструктор будет вызван снова? Возмжно имеет смысл чуток переписать программу, чтобы конец блока оказался в нужном месте? Возможно стоит вынести кусок кода в отдельную функцию, по return будет вызван деструктор.


--------------------
На любой вопрос даю любой ответ
"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
dezna
сообщение Feb 18 2013, 08:42
Сообщение #207


Участник
*

Группа: Участник
Сообщений: 25
Регистрация: 18-03-11
Пользователь №: 63 690



Цитата(Сергей Борщ @ Feb 18 2013, 12:18) *
Возможно стоит вынести кусок кода в отдельную функцию, по return будет вызван деструктор.

как начал, так и бросил! только граблей понавтыкаю.
я использую стм-овский драйвер SD карты. сейчас пробую руками запрещать/разрешать прерывания.
пока успеха не добился. возможно и придётся переписать их драйвер под ОС. sad.gif
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Feb 18 2013, 18:18
Сообщение #208


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Цитата(Сергей Борщ @ Feb 18 2013, 10:18) *
Возможно стоит вынести кусок кода в отдельную функцию...

Или обрамить блоком нужный кусок и в начале этого блока объявить TCritSect cs.
Go to the top of the page
 
+Quote Post
dezna
сообщение Feb 19 2013, 12:33
Сообщение #209


Участник
*

Группа: Участник
Сообщений: 25
Регистрация: 18-03-11
Пользователь №: 63 690



Цитата(IgorKossak @ Feb 18 2013, 22:18) *
Или обрамить блоком нужный кусок и в начале этого блока объявить TCritSect cs.

спасибо. как раз в тему.
Go to the top of the page
 
+Quote Post
WHALE
сообщение Mar 7 2013, 08:00
Сообщение #210


Знающий
****

Группа: Свой
Сообщений: 902
Регистрация: 2-01-06
Из: Краснодар
Пользователь №: 12 768



Господа, возник следующий вопрос - насколько падает производительность системы с РТОС по сравнению с суперлупом при прочих равных? Я понимаю, что что она должна упасть(этот момент хорошо расписано в руководстве по scmRTOS), но вот насколько?
Опишу свою ситуацию. С недавних пор решил перейти на работу с РТОС, т.к. надоело каждый раз организовывать "закат солнца в ручную". Как раз подвернулся один достаточно простой проект,хорошо подходяший для начального освоения работы с РТОС. Все достаточно быстро и без вопросов завелось(спасибо за примеры в комплекте оси) .
После этого решил перепилить на работу через РТОС старый проект на AVR+ ethernet (mac и физика на ENC28j60),компилятор IAR.И был очень удивлен удивлен увеличением времени отклика на ping c бывших 5-6ms
на суперлупе до 150ms на scmRTOS.
По моему в 20 с лишним раз замедление работы это перебор. Проект перепиливал без больших переделок.
Я понимаю.что скорее всего баг у меня, только вот в какую сторону рыть?

С уважением.


--------------------
"Hello, word!" - 17 errors 56 warnings
Go to the top of the page
 
+Quote Post

18 страниц V  « < 12 13 14 15 16 > » 
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


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


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