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

 
 
3 страниц V   1 2 3 >  
Reply to this topicStart new topic
> Прикручиваю ось к LPC2478, Есть и будут вопросы)
haker_fox
сообщение Aug 21 2012, 06:22
Сообщение #1


Познающий...
******

Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125



Добрый день, коллеги!

Скачал последнюю версию порта для LPC2xxx. К сожалению, на LPC2478 код не запускается, пришлось маленько пофиксить инициализацию периферии, немного ассемблера в одном из файлов ОСи. Вроде дело пошло. Задачи запускаются. Я не уверен в надежности и стабильности, пока тестирую.

Пока первый вопрос.

Как я понял, планировщик может вызываться из прерывания системного таймера и по софтовому прерыванию. Это задается опцией scmRTOS_CONTEXT_SWITCH_SCHEME. Мне кажется, что для LPC2478 софтовое прерывание не нужно. Достаточно таймерного. Я правильно понимаю? Т.е. можно использовать scmRTOS_CONTEXT_SWITCH_SCHEME = 0?

Гм... скажем так, я, прочитав документацию, так и не понял, чем отличаются два метода вызова планировщика, и какой когда использовать?

Спасибо!


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Aug 21 2012, 08:02
Сообщение #2


Гуру
******

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



QUOTE (haker_fox @ Aug 21 2012, 09:22) *
Как я понял, планировщик может вызываться из прерывания системного таймера и по софтовому прерыванию. Это задается опцией scmRTOS_CONTEXT_SWITCH_SCHEME.
Неправильно поняли sad.gif. Планировщик вызывается там, где возникла необходимость передать управление другой задаче. Это может быть и в основном коде потока, и в прерывании периферии и в прерывании системного таймера. А вот методов вызова перепланировки предусмотрено два: scmRTOS_CONTEXT_SWITCH_SCHEME = 0 - простой вызов функции, которая будет складывать на стек все регистры, даже если она вызвана на выходе из прерывания и часть регистров уже сохранены обработчиком, и scmRTOS_CONTEXT_SWITCH_SCHEME = 1 - для переключения контекста вызывается отдельное прерывание, обработчик которого написан на асме и это гарантирует, что ни один регистр не будет сохранен дважды. Второй вариант, как видно, менее требователен к стеку. Другое его преимущество - если приоритет этого прерывания сделать самым низким, то при возникновении нескольких прерываний переключение контекста будет выполнено один раз после выхода из последнего обработчика, а не на выходе из каждого. Поэтому такой метод и рекомендуется использовать. "Нулевой" метод используется лишь там, где нет возможности использовать "первый" - например, в ADuC702x, где нет контроллера прерываний и невозможно сгенерить прерывание программно.


--------------------
На любой вопрос даю любой ответ
"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
haker_fox
сообщение Aug 21 2012, 12:48
Сообщение #3


Познающий...
******

Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125



Спасибо за остоятельный ответ!
К сожалению, я до сих пор использовал 3-ю версию, и то на AVR. Не все нюансы знаю) Буду разбираться.

У меня уже мечта добавить к этой оси виртуальные таймеры ( это мне точно нужно ).

Спасибо большое за ее создание! Выбирал для арм долго между FreeRTOS, TNKernel и родной, с 2006 года знакомой, scmRTOS. Выбор пал в пользу последней из за того, что она вкорне написана на Си++, который мне более удобен)


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Aug 21 2012, 13:33
Сообщение #4


Гуру
******

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



Цитата(haker_fox @ Aug 21 2012, 15:48) *
У меня уже мечта добавить к этой оси виртуальные таймеры ( это мне точно нужно ).

А что они такого вам дадут?
Go to the top of the page
 
+Quote Post
haker_fox
сообщение Aug 21 2012, 13:55
Сообщение #5


Познающий...
******

Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125



QUOTE (_Артём_ @ Aug 21 2012, 22:33) *
А что они такого вам дадут?

Мне они нужны для управления автоматикой. Скажем, каждый день в 9 утра открывать дверь, по понедельникам в 17-00 проветривать помещение)

Думаю, что вклиненные в ядро и сервисы ОС, они будут работать наиболее производительно. Да и потренируюсь маленько. С осями я на ВЫ.


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Aug 21 2012, 15:13
Сообщение #6


Гуру
******

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



Цитата(haker_fox @ Aug 21 2012, 16:55) *
Мне они нужны для управления автоматикой. Скажем, каждый день в 9 утра открывать дверь, по понедельникам в 17-00 проветривать помещение)

То есть они должны быть привязаны к календарю, времени в часах-минутах?

Go to the top of the page
 
+Quote Post
haker_fox
сообщение Aug 21 2012, 15:19
Сообщение #7


Познающий...
******

Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125



QUOTE (_Артём_ @ Aug 22 2012, 00:13) *
То есть они должны быть привязаны к календарю, времени в часах-минутах?

Да, привязаны к аппаратным часам. Но "когда-то" они должны вызывать некую функцию в отдельно потоке. Следовательно поллинг здесь мало подходит, т.к. до срабатывания таймера может и день пройти...

Жаль, конечно, что в этой ОСи нельзя динамически создавать/удалять задачи, но я либо обойдусь текущим функционалом, либо попробую что-нить припилить)


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Aug 21 2012, 15:35
Сообщение #8


Гуру
******

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



Цитата(haker_fox @ Aug 21 2012, 18:19) *
Да, привязаны к аппаратным часам. Но "когда-то" они должны вызывать некую функцию в отдельно потоке.

А аппаратный таймер - это что физически?

Цитата(haker_fox @ Aug 21 2012, 18:19) *
Следовательно поллинг здесь мало подходит

Смотря как часто опрашивать. Я не думаю что ваша задача управления автоматикой выглядит так:
в 9:00 выставить в порт заданный уровень, время реакции - 3 мкс.
Go to the top of the page
 
+Quote Post
haker_fox
сообщение Aug 21 2012, 16:05
Сообщение #9


Познающий...
******

Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125



QUOTE (_Артём_ @ Aug 22 2012, 00:35) *
А аппаратный таймер - это что физически?

В LPC2478 есть RTC.

QUOTE (_Артём_ @ Aug 22 2012, 00:35) *
мотря как часто опрашивать. Я не думаю что ваша задача управления автоматикой выглядит так:
в 9:00 выставить в порт заданный уровень, время реакции - 3 мкс.

Да, пока поллингом и делаю. На другой платформе. Опрашиваю раз в 0.5 сек.

А может быть действительно - лишнее это (виртуальные таймеры). Буду думать.

Но вот динамическое создание/удаление процессов было бы полезно: сработал таймер, запустили процесс, выдали в сеть команду, удалили процесс. Поскольку этот процесс может занимать иногда ощутимое конечное время (сеть одна, устройств много, много кто хочет с ними пообщаться, приходится ждать), то чтобы не задерживать работу системы, он бы мог работать отдельно.

Хотя здесь может помочь буферизация в очереди.

В общем будем думать. Просто лапки чешутся что-нить "поковырять".

Впрочем, это уже для другой темы разговор.


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Aug 21 2012, 16:15
Сообщение #10


Гуру
******

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



Цитата(haker_fox @ Aug 21 2012, 19:05) *
В LPC2478 есть RTC.

И что можно разрешить прерывание в заданное время (часы-минуты-дата)?


Цитата(haker_fox @ Aug 21 2012, 19:05) *
Но вот динамическое создание/удаление процессов было бы полезно: сработал таймер, запустили процесс, выдали в сеть команду, удалили процесс.

Видимо динамическое создание/удаление процессов вызовет падение скоростных характеристик Оси.
Но если таких процессов немного (которые создавать-удалять хотите), то что мешает их сделать обычными процессами с низким приоритетом, ожидающими своего события и начинающими работать, например от сигнала пришедшего от RTC_Handler?
Go to the top of the page
 
+Quote Post
haker_fox
сообщение Aug 22 2012, 04:52
Сообщение #11


Познающий...
******

Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125



QUOTE (_Артём_ @ Aug 22 2012, 01:15) *
И что можно разрешить прерывание в заданное время (часы-минуты-дата)?

Да, на одну дату можно. Но мне нужно больльше. Например 32 таймера. Кажется, что поллингом проще будет.
QUOTE (_Артём_ @ Aug 22 2012, 01:15) *
Видимо динамическое создание/удаление процессов вызовет падение скоростных характеристик Оси.
Но если таких процессов немного (которые создавать-удалять хотите), то что мешает их сделать обычными процессами с низким приоритетом, ожидающими своего события и начинающими работать, например от сигнала пришедшего от RTC_Handler?

Да, можно и так!

Спасибо, хорошее обсуждение получилось, мои мысли упорядочились)


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Aug 22 2012, 05:21
Сообщение #12


Гуру
******

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



QUOTE (haker_fox @ Aug 22 2012, 07:52) *
Да, на одну дату можно. Но мне нужно больльше. Например 32 таймера. Кажется, что поллингом проще будет.
Почему бы не создать сортированный список времен срабатывания таймеров, как сделано в FreeRTOS? Срабатывает будильник, отсылает сообщение, берет из списка следующее время, программирует его в будильник RTC и т.д.


--------------------
На любой вопрос даю любой ответ
"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
haker_fox
сообщение Aug 22 2012, 07:37
Сообщение #13


Познающий...
******

Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125



QUOTE (Сергей Борщ @ Aug 22 2012, 14:21) *
Почему бы не создать сортированный список времен срабатывания таймеров, как сделано в FreeRTOS? Срабатывает будильник, отсылает сообщение, берет из списка следующее время, программирует его в будильник RTC и т.д.

Интересная мысль! Гляну, как это там реализовано. Спасибо!


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
haker_fox
сообщение Aug 23 2012, 02:52
Сообщение #14


Познающий...
******

Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125



В общем остановился на scmRTOS_CONTEXT_SWITCH_SCHEME = 0. Так проще пока для меня. ОСь стабильно работает.


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
haker_fox
сообщение Aug 26 2012, 06:53
Сообщение #15


Познающий...
******

Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125



Ну вот и следующий вопрос. Хочу сделать оговорку, он, конечно, мало относится к этой оси, но все же.

Хочу прикрутить TCP/IP стек. В настоящее время мое внимание сосредоточено на lwIP и TCP/IP стек от Юрия Темкина (www.tnkernel.com).

Не могу определится с окончательным выборомом. Что от стека нужно:
1. ICMP.
2. TCP.
3. UDP.
4. DHCP.

На базе стека планируется использовать web server (возможно понадобится ftp server, telnet server).

Сосбственно сам вопрос: что лучше - взять и прикрутить lwIP, либо TCP/IP tnkernel? С одной стороны есть примеры интеграции обоих стеков в оси (для первого это FreeRTOS, для второго - сама TNkernel). Но все же. Что, согласно идеологии scmRTOS, для нее больше подойдет в качестве сетевого стека?

Спасибо!


--------------------
Выбор.
Go to the top of the page
 
+Quote Post

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

 


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


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