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

 
 
> Вопросы по scmRTOS
koluna
сообщение May 15 2009, 12:59
Сообщение #1


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

Группа: Участник
Сообщений: 1 040
Регистрация: 3-01-07
Пользователь №: 24 061



Здравствуйте!

scmRTOS v3 AVR/GCC.
Компилятор - WinAVR 20080610.
IDE - Code::Blocks 8.02.
Простую тестовую программу буду пробовать на ATmega88.

Приступил к изучению.
Читаю scmRTOS_v2.pdf, смотрю исходники примеров релиза.

Возникло несколько вопросов. Прошу помочь разобраться.
Буду очень благодарен за какие-нибудь шаблоны программ (без лишнего кода), практические рекомендации и ссылки!

Первые два вопроса - функции main примеров.
1. В примерах T0 - системный таймер. Почему инициализация и запуск системного таймера производится не средствами ОС (допустим, в Run), а пользователем ОС вручную?
2. Почему при использовании передачи управления на основе программного прерывания инициализация компаратора производится не средствами ОС, а пользователем ОС вручную?
3. Один тик системного таймера - одно его переполнение?
4. Рекомендуемое значение системного тика 1-10 мс. Т. е., мы должны настраивать системный таймер, на переполнение его в пределах этого времени?
5. Каковы будут дополнительные опции компилятора для моей связки ОС + компилятор + IDE?

Благодарю заранее!


--------------------
Благодарю заранее!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
koluna
сообщение May 15 2009, 18:37
Сообщение #2


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

Группа: Участник
Сообщений: 1 040
Регистрация: 3-01-07
Пользователь №: 24 061



Вот и ещё вопросы подоспели smile.gif

8. Для чего функция процесса Exec() - статическая?
9. Почему функции WakeUpProcess() и ForceWakeUpProcess() следует использовать с осторожностью? В каких случаях?
10. Какую оптимизацию задавать при компиляции?

Цитата(sergeeff @ May 15 2009, 22:29) *
У нас на форуме уже рассказывалось, как можно ввести контроль за объемом стека в scmRTOS. Методика простая. Выделяем поболее, смотрим за реальной работой процессора, анализируем сколько было использовано. Есть возможность - ужимаем, оставив еще немного про запас.


Я читал smile.gif
Но мне как новичку пока сложновато это...

Цитата(ReAl @ May 15 2009, 18:47) *
TOGGLE(LED_R);


Что это?


--------------------
Благодарю заранее!
Go to the top of the page
 
+Quote Post
dxp
сообщение May 16 2009, 05:54
Сообщение #3


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



Цитата(n_bogoyavlensky @ May 16 2009, 01:37) *
8. Для чего функция процесса Exec() - статическая?


А как иначе? Эта функция должна быть в единственном экземпляре всегда. Кроме того, хотя эта функция и объявлена, как функция процесса, на самом деле к ресурсам процесса она отношения не имеет и служит исключительно для нужд пользовательского кода. Поэтому делать ее нестатической - это передача ненужного this, а учитывая, что эта фукнция нормально не вызывается, то и this нее передать невозможно. Вот такие логические и технические посылы.

Цитата(n_bogoyavlensky @ May 16 2009, 01:37) *
9. Почему функции WakeUpProcess() и ForceWakeUpProcess() следует использовать с осторожностью? В каких случаях?

Потому, что их использование нарушает обычную логику работы программы. Например, какой-то процесс ожидает события, а тут его в другом месте выдергивают - это как бы нештатная ситуация. Поэтому тут надо действовать внимательно. К слову сказать, функции эти сделаны там скорее на всякий случай, лично я уже и не помню, когда их применял (и применял ли вообще). При правильно организованной программе необходимость в их использовании стемится к нулю. Это как с оператором goto.


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
koluna
сообщение May 16 2009, 09:35
Сообщение #4


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

Группа: Участник
Сообщений: 1 040
Регистрация: 3-01-07
Пользователь №: 24 061



Цитата(dxp @ May 16 2009, 09:54) *
А как иначе? Эта функция должна быть в единственном экземпляре всегда.


Каждый процесс - объект типа полученного с помощью шаблона process, наследник TBaseProcess.
Каждый процесс существует в единственном экземпляре.
Значит функция будет и так в единственном экземпляре...
Или я не понимаю что такое статическая функция sad.gif

Цитата
Потому, что их использование нарушает обычную логику работы программы. Например, какой-то процесс ожидает события, а тут его в другом месте выдергивают - это как бы нештатная ситуация. Поэтому тут надо действовать внимательно. К слову сказать, функции эти сделаны там скорее на всякий случай, лично я уже и не помню, когда их применял (и применял ли вообще). При правильно организованной программе необходимость в их использовании стемится к нулю. Это как с оператором goto.


А что может произойти? Система "упадёт"?


--------------------
Благодарю заранее!
Go to the top of the page
 
+Quote Post
dxp
сообщение May 16 2009, 10:57
Сообщение #5


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



Цитата(n_bogoyavlensky @ May 16 2009, 16:35) *
Каждый процесс - объект типа полученного с помощью шаблона process, наследник TBaseProcess.
Каждый процесс существует в единственном экземпляре.
Значит функция будет и так в единственном экземпляре...
Или я не понимаю что такое статическая функция sad.gif


Никто не мешает завести больше одного объекта-процесса. Хотя это, конечно, неправильно. Я же ясно, вроде, пояснил, что:
  1. хотя эта функция и объявлена, как функция процесса, на самом деле к ресурсам процесса она отношения не имеет и служит исключительно для нужд пользовательского кода. Это логический довод.
  2. делать ее нестатической - это передача ненужного this, а учитывая, что эта фукнция нормально не вызывается, то и this нее передать невозможно. Это технический довод.
Как бы вы передали в нее указатель this? А без этого она может работать некорректно, и там можно получить очень хорошие грабли.




Цитата(n_bogoyavlensky @ May 16 2009, 16:35) *
А что может произойти? Система "упадёт"?


Можно получить неожиданное поведение. И удивляться. 


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
ReAl
сообщение May 16 2009, 12:17
Сообщение #6


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

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



Цитата(dxp @ May 16 2009, 13:57) *
Как бы вы передали в нее указатель this?
Если постараться - можно.
В конструкторе TBaseProcess после Kernel.RegisterProcess(this), там, где формируется начальный стековый кадр, затолкать этот же this в такое место, чтобы после восстановления контекста он оказался в нужных регистрах. Только, насколько я понимаю, тип параметра exec у конструктора для этого должен быть другой - указатель на функцию-член.

Топикстартеру:

Таким же образом можно было бы передать в функцию процесса указатель на некую структуру/класс, с которыми процесс должен работать, но для этого надо конструктору добавить соответствующий аргумент. Но это имело бы смысл при одновремённом переводе Exec() в нестатическую - чтобы создавать два экземпляра процесса (с разными приоритетами, но это в конечном счёте не важно), работающие одинаковым образом с разными однотипными сущностями и разделяющими код.

Но это же делается просто созданием двух процессов, из Exec() которых вызывается одна и та же функция с разными указателями на рабочий объект. Несколько накладнее, пожалуй. И не так красиво.
Но у меня пока такие желания не возникали - ну пусть два UART - ну всё равно у них разное назначение в системе и они обрабатываются по разному.
А ради просто красоты до/пере-делывать структуру ОС особого смысла не вижу.



Цитата(sergeeff @ May 16 2009, 14:39) *
Очень хотелось бы сделать так, чтобы первый объявленный процесс получал высший приоритет, следующий процесс - приоритет на 1 ниже и т.д.
Тогда, объявив в самой ОС число возможных процессов по максимуму всю ОС оформить в виде отдельной библиотеки и пользователям в своей организации раздать, чтобы они "грязными ногами" в ее "чистом теле" не натоптали. Сколько не думал, пока ничего не придумалось. Может есть какие соображения на сей счет?
Чтобы процессов было "по максимуму" их и задать бы надо. Ну там размер таблиц вырастет, это ладно, но между низшим по приоритету из созданных и Idle заполнено всё должно быть, она же их вызывать попытается.
Можно наоборот - с низшего начинать. Ну, если выйдет, так как я тоже чисто языковыми средствами не могу придумать как это сделать - в разных файлах, независимо. Но тогда начинаться непонятно с чего выполнение будет - до наивысшего таблицы пусты.

Главное - "а зачем"?
Удобство "объектных", а не "исходниковых" библиотек в embeded обсуждалось неоднократно и практически для всего, кроме стандартной библиотеки языка оно для меня сомнительно. А уж scmRTOS, в которой ещё некоторые вещи конфигурируются попроектно - не только число процессов, и компилируется потом с inline-подстановками оптимально под проект - так и подавно.

Так то, что должно решаться административными методами, ими и решайте.
Пусть проверка результата работы производится компиляцией со свежевыдернутыми из недоступного по правам записи хранилища, а кто в рабочей копии наменял что-то - сам себе враг. Или ещё что-то придумайте.


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
dxp
сообщение May 18 2009, 05:54
Сообщение #7


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



Цитата(ReAl @ May 16 2009, 19:17) *
Если постараться - можно.
В конструкторе TBaseProcess после Kernel.RegisterProcess(this), там, где формируется начальный стековый кадр, затолкать этот же this в такое место, чтобы после восстановления контекста он оказался в нужных регистрах. Только, насколько я понимаю, тип параметра exec у конструктора для этого должен быть другой - указатель на функцию-член.

Да, согласен, если постараться, то можно. Раз уж готовим сами стековый кадр, то и внедрить туда this тоже можно. Только зачем? Я ни одной приличной причины не знаю. По своей сути функция exec - это функция пользователя. Ей от самого объекта-процесса ничего не надо. Т.е. это отдельная фукнция, просто помещенная в пространство имен процесса. С таким же успехом можно было бы создавать произвольные глобальные функции и подсовывать их в конструктор процесса. Ну, как сделано, так сделано. smile.gif В духе ++. 


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- n_bogoyavlensky   Вопросы по scmRTOS   May 15 2009, 12:59
- - dxp   Цитата(n_bogoyavlensky @ May 15 2009, 19...   May 15 2009, 13:42
|- - n_bogoyavlensky   По вопросам 1 и 2 понятно. Т. е., для того, чтобы ...   May 15 2009, 14:23
- - ReAl   Там есть makefile с ключами компилятора. Если Cod...   May 15 2009, 14:47
- - sergeeff   У нас на форуме уже рассказывалось, как можно ввес...   May 15 2009, 18:29
|- - ReAl   Цитата(n_bogoyavlensky @ May 15 2009, 21...   May 15 2009, 21:00
|- - sergeeff   Цитата(ReAl @ May 16 2009, 15:17) Если по...   May 16 2009, 18:06
||- - ReAl   Цитата(sergeeff @ May 16 2009, 21:06) Вы ...   May 17 2009, 10:04
||- - sergeeff   Цитата(ReAl @ May 17 2009, 14:04) На мест...   May 17 2009, 10:58
- - sergeeff   Раз пошел процесс обсуждения scmRTOS, хочу восполь...   May 16 2009, 11:39
|- - dxp   Цитата(sergeeff @ May 16 2009, 18:39) Оче...   May 18 2009, 05:44
- - n_bogoyavlensky   Вопросы далее 11. Как лучше поступить с исходник...   May 16 2009, 12:30
|- - ReAl   Цитата(n_bogoyavlensky @ May 16 2009, 15...   May 16 2009, 13:31
- - n_bogoyavlensky   Вообще непонятны следующие конструкции в примерах,...   May 16 2009, 13:40
- - n_bogoyavlensky   Помогите, пожалуйста, побороть ошибки (на первой с...   May 17 2009, 10:31
|- - ReAl   Цитата(n_bogoyavlensky @ May 17 2009, 13...   May 17 2009, 11:13
|- - n_bogoyavlensky   Цитата(ReAl @ May 17 2009, 15:13) Что-то ...   May 17 2009, 11:17
|- - sergeeff   Цитата(n_bogoyavlensky @ May 17 2009, 15...   May 17 2009, 11:21
- - n_bogoyavlensky   Вот по поводу этого объясните, ещё пожалуйста: Ко...   May 17 2009, 11:42
- - sergeeff   На 21 стр. - "скелет" функции. Собственн...   May 17 2009, 11:53
|- - n_bogoyavlensky   Цитата(sergeeff @ May 17 2009, 15:53) На ...   May 17 2009, 12:10
|- - ReAl   Цитата(n_bogoyavlensky @ May 17 2009, 15...   May 17 2009, 13:56
- - sergeeff   Текущая верия scmRTOS? - 3.05 А документация писа...   May 17 2009, 12:17
- - n_bogoyavlensky   ReAl Понятно. Вот спасибо И за avreal32.exe спас...   May 17 2009, 15:14
|- - Сергей Борщ   Цитата(n_bogoyavlensky @ May 17 2009, 18...   May 17 2009, 15:25
- - sergeeff   Ну и лады.   May 18 2009, 05:49
- - n_bogoyavlensky   13. Что такое системный процесс Idle и для чего он...   May 18 2009, 09:31
|- - Сергей Борщ   Цитата(n_bogoyavlensky @ May 18 2009, 12...   May 18 2009, 11:37
- - n_bogoyavlensky   Ну вот, запустил Только вот код много места заним...   May 18 2009, 12:24
|- - ReAl   Цитата(n_bogoyavlensky @ May 18 2009, 15...   May 18 2009, 12:27
- - n_bogoyavlensky   Нашёл: В OS_Target_cpp.cpp определена функция: К...   May 18 2009, 12:59
|- - ReAl   Цитата(n_bogoyavlensky @ May 18 2009, 15...   May 18 2009, 13:46
- - n_bogoyavlensky   Не могу понять... почему у меня тогда код почти в ...   May 18 2009, 14:58
|- - ReAl   Цитата(n_bogoyavlensky @ May 18 2009, 17...   May 18 2009, 16:42
|- - n_bogoyavlensky   Цитата(ReAl @ May 18 2009, 20:42) Попробу...   May 18 2009, 17:14
|- - ReAl   Цитата(n_bogoyavlensky @ May 18 2009, 20...   May 18 2009, 17:25
- - sergeeff   Уважаемый коллега! Неужели вам в google трудн...   May 18 2009, 17:28
- - n_bogoyavlensky   Спасибо Вам всем большое Обязательно посмотрю под...   May 18 2009, 18:05
|- - sergeeff   Цитата(n_bogoyavlensky @ May 18 2009, 22...   May 18 2009, 18:08
|- - n_bogoyavlensky   Цитата(sergeeff @ May 18 2009, 22:08) Мож...   May 18 2009, 18:39
- - n_bogoyavlensky   Здравствуйте! Ещё один вопрос Корректным ли...   May 25 2009, 06:06
|- - Сергей Борщ   Цитата(n_bogoyavlensky @ May 25 2009, 09...   May 25 2009, 07:50
|- - n_bogoyavlensky   Цитата(Сергей Борщ @ May 25 2009, 11:50) ...   May 25 2009, 08:28
|- - Сергей Борщ   Цитата(n_bogoyavlensky @ May 25 2009, 11...   May 25 2009, 08:41
|- - n_bogoyavlensky   Цитата(Сергей Борщ @ May 25 2009, 12:41) ...   May 25 2009, 10:31
- - n_bogoyavlensky   Здравствуйте! Смотрю в даташит и понять не м...   Jun 10 2009, 10:20
|- - Сергей Борщ   Цитата(n_bogoyavlensky @ Jun 10 2009, 13...   Jun 10 2009, 10:41
||- - n_bogoyavlensky   Цитата(Сергей Борщ @ Jun 10 2009, 14:41) ...   Jun 22 2009, 11:56
|- - ReAl   Цитата(n_bogoyavlensky @ Jun 10 2009, 13...   Jun 10 2009, 10:45
|- - n_bogoyavlensky   Цитата(ReAl @ Jun 10 2009, 13:45) Вход ко...   Jun 10 2009, 11:25
- - n_bogoyavlensky   Не работает! Прямая передача управления работ...   Jun 22 2009, 18:12
|- - ReAl   Цитата(n_bogoyavlensky @ Jun 22 2009, 21...   Jun 22 2009, 19:38
|- - n_bogoyavlensky   Цитата(ReAl @ Jun 22 2009, 23:38) Странно...   Jun 23 2009, 03:36
|- - ReAl   Цитата(n_bogoyavlensky @ Jun 23 2009, 06...   Jun 23 2009, 08:42
|- - n_bogoyavlensky   Цитата(ReAl @ Jun 23 2009, 12:42) Хм. В к...   Jun 23 2009, 10:19
|- - ReAl   Цитата(n_bogoyavlensky @ Jun 23 2009, 13...   Jun 23 2009, 10:44
|- - n_bogoyavlensky   Цитата(ReAl @ Jun 23 2009, 14:44) Самая п...   Jun 23 2009, 12:03
- - n_bogoyavlensky   Откомпилировал в WinAVR 2007 - не работает. Откомп...   Jun 23 2009, 19:16
|- - ReAl   Цитата(n_bogoyavlensky @ Jun 23 2009, 22...   Jun 24 2009, 16:43
|- - n_bogoyavlensky   Цитата(ReAl @ Jun 24 2009, 20:43) Ой, а э...   Jun 24 2009, 16:54
- - n_bogoyavlensky   Огромная просьба, если Вас не затруднит, то провер...   Jun 23 2009, 20:21
- - n_bogoyavlensky   Проверил в железе. ATmega48P, 20 МГц, оба способа ...   Jun 25 2009, 07:06
|- - Сергей Борщ   Цитата(n_bogoyavlensky @ Jun 25 2009, 10...   Jun 25 2009, 07:22
- - n_bogoyavlensky   По поводу нашего давнего разговора в этой ветке о ...   Jun 25 2009, 07:25
|- - ReAl   Цитата(n_bogoyavlensky @ Jun 25 2009, 10...   Oct 4 2009, 09:40
- - sevstels   Хотел попробовать запустить примеры для BF533. К с...   Oct 4 2009, 07:40
- - sevstels   уже решил заменой файлов из snapshot мне только од...   Oct 4 2009, 13:19
|- - dxp   Цитата(sevstels @ Oct 4 2009, 20:19) уже ...   Oct 5 2009, 08:16
- - sevstels   Это конечно удивительно, автор работает ещё 4.0 ве...   Oct 5 2009, 13:41
|- - dxp   Цитата(sevstels @ Oct 5 2009, 20:41) Это ...   Oct 6 2009, 02:56
- - sevstels   Уважаемый dxp, подскажите плиз, где "подкрути...   Oct 6 2009, 03:45
|- - dxp   Цитата(sevstels @ Oct 6 2009, 10:45) ----...   Oct 6 2009, 07:27
- - sevstels   Расширение давно поменял, файл OS_Target_asm.asm П...   Oct 6 2009, 07:43
|- - dxp   Цитата(sevstels @ Oct 6 2009, 14:43) Расш...   Oct 6 2009, 09:18
- - sevstels   Да, asm есть для MPEG-4 енкодера. Они тоже выдают ...   Oct 6 2009, 10:39
- - sevstels   Накопал... Не обратил внимание на warning по повод...   Oct 7 2009, 02:19
|- - meister   Безопасно ли использовать setjmp и longjump в scmR...   Nov 7 2009, 11:24
- - vzuravlo   Добрый день. Я новичок в программировании, не суди...   Jan 23 2010, 21:31
|- - dxp   Цитата(vzuravlo @ Jan 24 2010, 03:31) у м...   Jan 24 2010, 10:48
|- - ReAl   Цитата(dxp @ Jan 24 2010, 12:48) Вы может...   Jan 24 2010, 11:11
- - kurtis   Возник небольшой вопрос при использовании scmRTOS....   Feb 26 2010, 15:57
|- - Сергей Борщ   перенесите определение #define TOTAL_PROCESS_NUMBE...   Feb 26 2010, 16:50
- - kurtis   не помогло, те самые ошибки   Feb 26 2010, 18:43
|- - Сергей Борщ   Цитата(kurtis @ Feb 26 2010, 20:43) не по...   Feb 26 2010, 19:00
- - kurtis   Спасибо!)) Теперь получилось.   Feb 26 2010, 19:20
- - Embedder74   Начал разбираться с scmRTOS.3.10. Ответьте, плз. н...   Mar 24 2010, 10:18
|- - jorikdima   Цитата(Embedder74 @ Mar 24 2010, 13:18) 2...   Mar 24 2010, 11:14
||- - Embedder74   Цитата(jorikdima @ Mar 24 2010, 14:14) из...   Mar 25 2010, 08:37
||- - Сергей Борщ   Цитата(Embedder74 @ Mar 25 2010, 10:37) Н...   Mar 25 2010, 09:01
||- - jorikdima   Цитата(Embedder74 @ Mar 25 2010, 11:37) А...   Mar 25 2010, 10:02
|- - AHTOXA   Цитата(Embedder74 @ Mar 24 2010, 15:18) 1...   Mar 24 2010, 11:42
- - a9d   atmega8 scmRTOS_SYSTIMER_NEST_INTS_ENABLE 1 scmR...   Apr 9 2010, 17:34
|- - AHTOXA   А всё потому, что TProc1 имеет наивысший приоритет...   Apr 9 2010, 18:26
- - a9d   Т.е. я должен должен явно указывать какой процесс ...   Apr 9 2010, 18:51
2 страниц V   1 2 >


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

 


RSS Текстовая версия Сейчас: 24th June 2025 - 16:40
Рейтинг@Mail.ru


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