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

 
 
4 страниц V  < 1 2 3 4 >  
Reply to this topicStart new topic
> Организация программ, дайте вектор куда копать
TigerSHARC
сообщение Apr 3 2017, 18:11
Сообщение #31


Знающий
****

Группа: Свой
Сообщений: 688
Регистрация: 4-09-09
Пользователь №: 52 195



Интересно сравнить, где "красивше" будет реализация такой нехитрой задачи:
прерывание вызывается раз в 1мс, после десяти прерываний необходимо вызвать функцию, после десяти вызовов функции вызвать другую функцию.

с while(1), все понятно: заводим 2 глобальных счетчика и вперед щелкать инкременты в прерывании.
С RTOS нешто проще как-то?
Go to the top of the page
 
+Quote Post
Lagman
сообщение Apr 3 2017, 19:49
Сообщение #32


Знающий
****

Группа: Свой
Сообщений: 875
Регистрация: 28-10-05
Пользователь №: 10 245



Цитата(TigerSHARC @ Apr 3 2017, 21:11) *
Интересно сравнить, где "красивше" будет реализация такой нехитрой задачи:
прерывание вызывается раз в 1мс, после десяти прерываний необходимо вызвать функцию, после десяти вызовов функции вызвать другую функцию.

с while(1), все понятно: заводим 2 глобальных счетчика и вперед щелкать инкременты в прерывании.
С RTOS нешто проще как-то?

Как вы собираетесь вызывать через 10 прерываний функцию? Если без ОСРВ то при вызове функции из прерывания вы будет находиться так же в прерывании, если не придумаете другой механизм вызова этой функции. Если с ОСРВ то будет то же самое (только вне прерывания) после 10 инкрементов в прерывании будет передано (например сообщение для вашей функции которая уже будет называться задачей и ожидать это сообщение) сообщение и если приоритет этой задачи (вашей функции) будет главным то по выходу из прерывания, планировщик переключит выполнение программы на эту функцию.
Но вся эта магия приобретает интерес когда у вас будет несколько параллельных задач, например обработка АЦП в реальном времени (цифровая фильтрация), передача параметров по modbus и вывод значений на экран.
Go to the top of the page
 
+Quote Post
Zelepuk
сообщение Apr 4 2017, 06:20
Сообщение #33


Знающий
****

Группа: Участник
Сообщений: 634
Регистрация: 27-10-10
Пользователь №: 60 464



Цитата(Lagman @ Apr 3 2017, 22:49) *
Как вы собираетесь вызывать через 10 прерываний функцию? Если без ОСРВ то при вызове функции из прерывания вы будет находиться так же в прерывании


Зачем в прерывании вызывать функцию? обычно в прерывании дергаем флаг, а в цикле while(1) опрашиваем его.

Сообщение отредактировал Zelepuk - Apr 4 2017, 06:35
Go to the top of the page
 
+Quote Post
Baser
сообщение Apr 4 2017, 09:26
Сообщение #34


Просто Che
*****

Группа: Свой
Сообщений: 1 567
Регистрация: 22-05-07
Из: ExUSSR
Пользователь №: 27 881



Цитата(Zelepuk @ Apr 4 2017, 09:20) *
Зачем в прерывании вызывать функцию? обычно в прерывании дергаем флаг, а в цикле while(1) опрашиваем его.

Ну так и говорят, что "супер луп" с циклом while(1) и прерываниями будет хорошо работать только тогда, когда нет других многочисленных задач, которые также обслуживаются в основном цикле. Если других задач нет, время между взведением флага в прерывании и обработкой в главном цикле мало и почти детерминировано. Иначе это время сильно плавает и может выходить за допустимые рамки, и тогда алгоритм будет рушиться. Приоритет то у всех задач главного цикла одинаковый.

А вот при наличии вытесняющей RTOS можно гибко настраивать приоритеты задач и время до обработки вашего "флага" будет более определенным.
Go to the top of the page
 
+Quote Post
Lagman
сообщение Apr 4 2017, 11:00
Сообщение #35


Знающий
****

Группа: Свой
Сообщений: 875
Регистрация: 28-10-05
Пользователь №: 10 245



Добавлю к словам Baser'a
Цитата(Zelepuk @ Apr 4 2017, 09:20) *
Зачем в прерывании вызывать функцию? обычно в прерывании дергаем флаг, а в цикле while(1) опрашиваем его.

Что бы реакция МК была приближена к "мгновенной реакции", в ОСРВ это называется время реакции системы.
А так можно все делать и без ОСРВ только это будет тяжелей поддерживать и координировать взаимосвязь и время работы "функций" в вашей программе.
Go to the top of the page
 
+Quote Post
HardEgor
сообщение Apr 4 2017, 11:16
Сообщение #36


Гуру
******

Группа: Свой
Сообщений: 2 223
Регистрация: 3-03-06
Из: Tomsk
Пользователь №: 14 925



Цитата(Zelepuk @ Apr 4 2017, 13:20) *
Зачем в прерывании вызывать функцию? обычно в прерывании дергаем флаг, а в цикле while(1) опрашиваем его.

Тут стоит соблюдать баланс - какие-то обработки можно и в прерывании делать, а что-то передать в основной цикл. Вопрос приоритетности подзадач обрабатывающих поступающие и отдаваемые данные.
Go to the top of the page
 
+Quote Post
TigerSHARC
сообщение Apr 4 2017, 19:00
Сообщение #37


Знающий
****

Группа: Свой
Сообщений: 688
Регистрация: 4-09-09
Пользователь №: 52 195



Цитата(Lagman @ Apr 4 2017, 14:00) *
Добавлю к словам Baser'a

Что бы реакция МК была приближена к "мгновенной реакции", в ОСРВ это называется время реакции системы.
А так можно все делать и без ОСРВ только это будет тяжелей поддерживать и координировать взаимосвязь и время работы "функций" в вашей программе.

Вы предлагаете прерывании обрабатывать данные или что?
Мгновенная реакция - это конечно здорово, если нужно, например битик выставить в регистр, но FFT вы тоже считать в прерывании будете? sm.gif
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Apr 4 2017, 19:28
Сообщение #38


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Цитата(TigerSHARC @ Apr 4 2017, 22:00) *
Мгновенная реакция - это конечно здорово, если нужно, например битик выставить в регистр, но FFT вы тоже считать в прерывании будете? sm.gif

Да, именно в прерывании очень удобно делать FFT.
Поскольку длительность всех прерываний автоматически логится SWO трассером и ведется статитстика.
В системах жесткого реального времени самое важное - это профайлинг, а не RTOS, прерывания или что-то еще.
А тут вы профайлинг получаете не пошевелив даже пальцем .

У любого ARM-а есть туча свободных векторов прерываний и есть достаточное количество приоритетов у прерываний.
Так что делать FFT в прерываниях я бы даже рекомендовал.

Под RTOS типа Micrium OS такая концепция отлично ложится.
Они кстати сегодня разослали предложение скачать триальную версию на 45 дней с Micrium Platform Builder.
Go to the top of the page
 
+Quote Post
Lagman
сообщение Apr 4 2017, 19:41
Сообщение #39


Знающий
****

Группа: Свой
Сообщений: 875
Регистрация: 28-10-05
Пользователь №: 10 245



Цитата(TigerSHARC @ Apr 4 2017, 22:00) *
Мгновенная реакция - это конечно здорово, если нужно, например битик выставить в регистр, но FFT вы тоже считать в прерывании будете? sm.gif

А что вы так боитесь этого прерываний, это та же функция (ведь у вас ОС нет, которая может зависнуть в этот момент а есть голый микроконтроллер) которая будет вызываться в определенный момент, откладывая все остальные функции, а как закончится итерация вычисления FFT функция выйдет из обработчика и дальше ваши функции продолжат выполняться.
Go to the top of the page
 
+Quote Post
Make_Pic
сообщение Apr 5 2017, 10:58
Сообщение #40


Знающий
****

Группа: Свой
Сообщений: 779
Регистрация: 9-10-04
Из: Россия, Пермь
Пользователь №: 828



Решил не создавать новую тему, а здесь спросить:

Никогда не пользовался setjmp/longjmp для сохранения под Cortex M3,4 контекста - возможно ли сделать так же красиво, как по ссылке:
setjmp/longjmp AVR
Хотелось, если можно с примером кода (различие AVR/ARM).
Или как в простой AVR-ской CoOS (файл в приложении) использование setjmp/longjmp:
Какие компиляторы под ARM Cortex M3,4, GNU GCC, IAR... переваривают такое?
Прикрепленные файлы
Прикрепленный файл  COOS.rar ( 2.89 килобайт ) Кол-во скачиваний: 10
 
Go to the top of the page
 
+Quote Post
jcxz
сообщение Apr 5 2017, 20:02
Сообщение #41


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(Make_Pic @ Apr 5 2017, 12:58) *
Никогда не пользовался setjmp/longjmp для сохранения под Cortex M3,4 контекста - возможно ли сделать так же красиво, как по ссылке:

Сохранение/восстановление контекста делают все вытесняющие ОС. Возьмите Cortex-порт от любой и посмотрите.
Go to the top of the page
 
+Quote Post
Make_Pic
сообщение Apr 6 2017, 04:44
Сообщение #42


Знающий
****

Группа: Свой
Сообщений: 779
Регистрация: 9-10-04
Из: Россия, Пермь
Пользователь №: 828



Цитата(jcxz @ Apr 6 2017, 00:02) *
Сохранение/восстановление контекста делают все вытесняющие ОС. Возьмите Cortex-порт от любой и посмотрите.

Спасибо! За смотрите туда, не знаю куда... Я конкретно спросил про использование/помощь здесь, а не рыться в исходниках Осов, тосов, ртосов. Что я уже делал.
Go to the top of the page
 
+Quote Post
bve
сообщение Apr 6 2017, 18:22
Сообщение #43


Местный
***

Группа: Свой
Сообщений: 316
Регистрация: 20-02-05
Из: Ленинградская обл.
Пользователь №: 2 765



Из Вашего обработчика вызовите свободное прерывание с нужным приоритетом.
Go to the top of the page
 
+Quote Post
k155la3
сообщение Apr 7 2017, 06:58
Сообщение #44


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

Группа: Свой
Сообщений: 1 123
Регистрация: 8-03-09
Из: Днепр
Пользователь №: 45 848



Цитата(Zelepuk @ Mar 31 2017, 10:52) *
Планируется разработка измерительного прибора .....

(1) Дело в том что нужно часто давать сигналы готовности данных на разных ступенях алгоритма. Использовать флаги - глобальные переменные неудобно (их будет слишком много).

(2) Сообщить, какие "более красивые подходы" для этого используются.
например на микрокотнтроллере можно использовать ОСРВ и ее средства взаимодействия между задачами,

(3) а как быть когда нужно сделать демо-проект на PC (для последующего переноса на МК)?

(4) Все это выглядит ужасно в бесконечном цикле.

(1) организуйте для глобальных данных одну структуру. Если не хотите уходить от "глобализации"
Работать со всеми глоб. данными можно через один указатель на нее.
(2) "красиво" можно сделать и без ОС. Зависит от сложности задачи и целесообразности использования ОС.
Многие ОС для МК имеют "порты" под PC/x86
(3) Проект для контроллера надо изначально писать с расчетом на "переносимость" -
на уровне компиляторов для MK и PC. В PC прокт компилировать-запускать в своем "эмуляторе".
(например вывод на SPI заменить на вывод в файл или консоль)
(4) Если "главный цикл" в основе Вас устраиевает - посмотрите на
оболочку protothread Dunkless. ОНО работает-компилируется и на MK, и на PC (проверено).
По-сути это оболочка для цикла.
Go to the top of the page
 
+Quote Post
Make_Pic
сообщение Apr 7 2017, 07:41
Сообщение #45


Знающий
****

Группа: Свой
Сообщений: 779
Регистрация: 9-10-04
Из: Россия, Пермь
Пользователь №: 828



Цитата(bve @ Apr 6 2017, 21:22) *
Из Вашего обработчика вызовите свободное прерывание с нужным приоритетом.

Вопрос об использовании setjmp/longjmp в контексте использования простой ос подобной или самой CooS, но вместо AVR для Cortex M3/4, например STM32F0.
Go to the top of the page
 
+Quote Post

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

 


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


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