|
Организация программ, дайте вектор куда копать |
|
|
|
Mar 31 2017, 07:52
|
Знающий
   
Группа: Участник
Сообщений: 634
Регистрация: 27-10-10
Пользователь №: 60 464

|
Планируется разработка измерительного прибора, принимающего данные от АЦП в прерывании, складывающего данные в буфер и обрабатывающего данные пос ложному алгоритму. Дело в том что нужно часто давать сигналы готовности данных на разных ступенях алгоритма. Использовать флаги - глобальные переменные неудобно (их будет слишком много). Сообщить, какие "более красивые подходы" для этого используются. например на микрокотнтроллере можно использовать ОСРВ и ее средства взаимодействия между задачами, а как быть когда нужно сделать демо-проект на PC (для последующего переноса на МК)?
Например есть такая задача: 1)АЦП складывает данные непрерывно в кольцевой буфер 2) Раз в миллисекунду данные из буфера обрабатываются результат сохраняется в переменную. 3) после 10й итерации по пункту 2 (т.е. раз в 10 миллисекунд) нужно делать усреднение данных
У меня сейчас в функции, которая реализует п.2 просто есть счетчик итераций в виде переменной. Я опрашиваю эту переменную, и, как только она равна 10 - запускаю функию, реализующую п.3 Все это выглядит ужасно в бесконечном цикле.
Подскажите, как сделать грамотно.
Сообщение отредактировал Zelepuk - Mar 31 2017, 08:00
|
|
|
|
|
 |
Ответов
|
Mar 31 2017, 08:24
|
Знающий
   
Группа: Участник
Сообщений: 634
Регистрация: 27-10-10
Пользователь №: 60 464

|
Цитата(ViKo @ Mar 31 2017, 11:19)  Я понял так, программа делает то, что от нее требуется. Кому какое дело, как она устроена? Кроме разработчика,желающего сделать красиво. Так и сделайте, как считаете. Сравните. Переделайте еще 5 раз. Нормальный процесс. Эт понятно. мне интересно как можно считать. На уме был только суперлуп...  но есть понимание что тогда прога будет изобиловать глобальными переменными. Я про подходы говорю. Интересно как можно сделать. Вот статья в тему интересная: https://habrahabr.ru/post/148805/ Я вот например хочу сделать на FreeRTOS, но как тогда удобно сделать чтобы проект запустился и на PC. На PC запускаю для демонстрационных целей.
|
|
|
|
|
Mar 31 2017, 09:09
|

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

|
Цитата(Zelepuk @ Mar 31 2017, 11:24)  Эт понятно. мне интересно как можно считать. На уме был только суперлуп...  но есть понимание что тогда прога будет изобиловать глобальными переменными. Я про подходы говорю. Интересно как можно сделать. Вот статья в тему интересная: https://habrahabr.ru/post/148805/ Я вот например хочу сделать на FreeRTOS, но как тогда удобно сделать чтобы проект запустился и на PC. На PC запускаю для демонстрационных целей. FreeRTOS не лучший выбор. Я бы рекомендовал Micrium OSГораздо быстрее, понятнее и компактнее чем FreeRTOS. Там кстати очень ценная фишка для риалтайма появилась - работа сервисов без запрещения прерываний. Глобальные флаги не так плохи как кажется. Когда у вас появится больше 5-и источников прерываний по 1 мс и около десятка задач, просто чтобы поддерживать все необходимые интерфейсы как вот здесь:
и когда использование процессора подойдет к 80%, то вы быстро поймете, что стоит вместо сервисов RTOS использовать глобальные флаги или иначе потеряете реальное время. Хороший способ - это критичные прерывания сделать прерываниями ядра, и чтобы они выставляли глобальные флаги и софтварно прерывания с сервисами RTOS. Это очень эффективный способ прореживания прерываний PendSV и укорачивания времени выполнения остальных прерываний. Но на PC вы это не перенесете, это все очень архитектурно привязано к железу. Риалтайм в принципе не отладить на PC.
|
|
|
|
|
Mar 31 2017, 09:23
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(AlexandrY @ Mar 31 2017, 11:09)  FreeRTOS не лучший выбор. Я бы рекомендовал Micrium OSГораздо быстрее, понятнее и компактнее чем FreeRTOS. Поддерживаю! Цитата(AlexandrY @ Mar 31 2017, 11:09)  Но на PC вы это не перенесете, это все очень архитектурно привязано к железу. Риалтайм в принципе не отладить на PC. Перенести можно, если разделить на middle-ware и собственно low level IO с периферией. Сам делал и отлаживал так когда сложный драйвер. Из железа ему нужен был только IO с UART. Так что нижний уровень драйвера на МК - это был IO в/из кольцевых буферов в ISR-ах, а на PC - в те же самые буфера в/из файловых функций WinAPI + система сообщений к задаче обработке - мэйл-боксы под Микриум, и соотв. средства синхронизации под винду. Основной код драйвера - выполнялся в виде задачи обработки событий, которая была общая для Win и для Микриум. Очень удобно было отлаживать. Там 95% всего объёма составляло это middle-ware. Да собственно так же организована FatFS. Её тоже можно выполнять под любой ОС хоть под виндой. Написав простую low level IO прослойку.
|
|
|
|
|
Mar 31 2017, 10:20
|

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

|
Цитата(jcxz @ Mar 31 2017, 12:23)  Перенести можно, если разделить на middle-ware и собственно low level IO с периферией. Micrium OS с самого рождения имела порт по Windows. А нынче у нее под Windows выполняется всё: файловая, сетевые стеки, GUI, USB Весь список виден в Micrium Platform Builder. Но риалтайм ( т.е. как быстро обрабатываются задачи и прерывания и как расходуются ресурсы процессора) это отладить не помогает. На PC я отлаживаю исключительно сторонние программные модули с неизвестным потреблением памяти. Все остальное не оправдано, поскольку такие IDE как IAR с SWD компилируют и загружают на целевую платформу почти с такой же скоростью как и в Visual Studio под Windows
|
|
|
|
|
Mar 31 2017, 12:12
|
Знающий
   
Группа: Участник
Сообщений: 634
Регистрация: 27-10-10
Пользователь №: 60 464

|
Цитата(jcxz @ Mar 31 2017, 11:52)  В ISR, который пишет данные в буфер, смотреть сколько данных накопилось в буфере, и если их больше чем сколько-то - посылать сообщение в майл-бокс. А под ОС есть задача, которая ждёт на этом мэйл-боксе... Вот вопрос как это делается, где почитать/посмотреть/скачать пример этого... Цитата(AlexandrY @ Mar 31 2017, 13:20)  Но риалтайм ( т.е. как быстро обрабатываются задачи и прерывания и как расходуются ресурсы процессора) это отладить не помогает. Собственно на PC не нужно отлаживать реалтайм, на PC нужно показать как все это работает. Например вместо считывания данных в прерывании считывать данные из файла. Вопрос только как именно это сделать, если на мк есть прерывание и функциа типа ISR_ADC(), то на PC(в консольном приложении) как имитировать периодический вызов функции чтения из файла?
|
|
|
|
Сообщений в этой теме
Zelepuk Организация программ Mar 31 2017, 07:52    Lagman Цитата(AlexandrY @ Mar 31 2017, 12:09) Я ... Mar 31 2017, 09:42     AlexandrY Цитата(Lagman @ Mar 31 2017, 12:42) Эх, б... Mar 31 2017, 10:28      Lagman Цитата(AlexandrY @ Mar 31 2017, 13:28) Бе... Mar 31 2017, 15:13     jcxz Цитата(AlexandrY @ Mar 31 2017, 12:20) Вс... Mar 31 2017, 10:24      AlexandrY Цитата(Zelepuk @ Mar 31 2017, 15:12) как ... Mar 31 2017, 12:18 jcxz Цитата(Zelepuk @ Mar 31 2017, 09:52) У ме... Mar 31 2017, 08:52 XVR 2 ТС - какой у вас целевой процессор и ресурсы? Ес... Mar 31 2017, 09:55 Zelepuk Micrium платный. да еще за IAR платить надо.
Прощ... Mar 31 2017, 12:54 ViKo Цитата(Zelepuk @ Mar 31 2017, 15:54) Прощ... Mar 31 2017, 13:33 syoma Zelepuk, а не хотите попробовать Matlab/Simulink/E... Mar 31 2017, 13:22 Zelepuk Цитата(syoma @ Mar 31 2017, 16:22) Zelepu... Mar 31 2017, 13:47  jcxz Цитата(Zelepuk @ Mar 31 2017, 15:47) Поче... Mar 31 2017, 14:26 AlexandrY Цитата(syoma @ Mar 31 2017, 16:22) Т.е. в... Mar 31 2017, 15:26  Lagman Цитата(AlexandrY @ Mar 31 2017, 18:26) Ну... Mar 31 2017, 16:16 syoma ЦитатаГенерируемый код весьма труден для понимания... Mar 31 2017, 14:19 Zelepuk Цитата(syoma @ Mar 31 2017, 17:19) Его не... Mar 31 2017, 14:33  syoma Цитата(Zelepuk @ Mar 31 2017, 16:33) прим... Mar 31 2017, 19:31   AlexandrY Цитата(syoma @ Mar 31 2017, 22:31) Посмот... Mar 31 2017, 20:19    syoma Цитата(AlexandrY @ Mar 31 2017, 22:17) Он... Mar 31 2017, 20:26     AlexandrY Цитата(syoma @ Mar 31 2017, 23:26) А как ... Mar 31 2017, 20:37      syoma Цитата(AlexandrY @ Mar 31 2017, 22:37) Си... Mar 31 2017, 20:53    Lagman Цитата(AlexandrY @ Mar 31 2017, 23:19) Не... Mar 31 2017, 22:48 TigerSHARC Интересно сравнить, где "красивше" будет... Apr 3 2017, 18:11 Lagman Цитата(TigerSHARC @ Apr 3 2017, 21:11) Ин... Apr 3 2017, 19:49  Zelepuk Цитата(Lagman @ Apr 3 2017, 22:49) Как вы... Apr 4 2017, 06:20   Baser Цитата(Zelepuk @ Apr 4 2017, 09:20) Зачем... Apr 4 2017, 09:26   Lagman Добавлю к словам Baser'a
Цитата(Zelepuk ... Apr 4 2017, 11:00    TigerSHARC Цитата(Lagman @ Apr 4 2017, 14:00) Добавл... Apr 4 2017, 19:00     AlexandrY Цитата(TigerSHARC @ Apr 4 2017, 22:00) Мг... Apr 4 2017, 19:28     Lagman Цитата(TigerSHARC @ Apr 4 2017, 22:00) Мг... Apr 4 2017, 19:41      Make_Pic Решил не создавать новую тему, а здесь спросить:
... Apr 5 2017, 10:58       jcxz Цитата(Make_Pic @ Apr 5 2017, 12:58) Нико... Apr 5 2017, 20:02        Make_Pic Цитата(jcxz @ Apr 6 2017, 00:02) Сохранен... Apr 6 2017, 04:44   HardEgor Цитата(Zelepuk @ Apr 4 2017, 13:20) Зачем... Apr 4 2017, 11:16 bve Из Вашего обработчика вызовите свободное прерывани... Apr 6 2017, 18:22 Make_Pic Цитата(bve @ Apr 6 2017, 21:22) Из Вашего... Apr 7 2017, 07:41 k155la3 Цитата(Zelepuk @ Mar 31 2017, 10:52) План... Apr 7 2017, 06:58 MrYuran Цитата(Zelepuk @ Mar 31 2017, 10:52) Все ... Apr 8 2017, 05:06 TigerSHARC Цитата(MrYuran @ Apr 8 2017, 08:06) Не зн... Apr 8 2017, 08:16  MrYuran Цитата(TigerSHARC @ Apr 8 2017, 11:16) На... Apr 8 2017, 09:18   TigerSHARC Цитата(MrYuran @ Apr 8 2017, 12:18) Скоре... Apr 8 2017, 15:17   jcxz Цитата(MrYuran @ Apr 8 2017, 11:18) Скоре... Apr 8 2017, 19:02 syoma ЦитатаОчевидно, что вы пишете только простые прогр... Apr 8 2017, 19:51 k155la3 Цитата(syoma @ Apr 8 2017, 22:51) . . . .... Apr 9 2017, 08:30 jcxz Цитата(syoma @ Apr 8 2017, 21:51) Все про... Apr 9 2017, 08:59  k155la3 Цитата(jcxz @ Apr 9 2017, 11:59) . . .
Э... Apr 9 2017, 09:52   jcxz Цитата(k155la3 @ Apr 9 2017, 11:52) В мое... Apr 9 2017, 15:26    k155la3 Цитата(jcxz @ Apr 9 2017, 18:26) Не обяза... Apr 11 2017, 07:34 aiwa Цитата(TigerSHARC @ Apr 8 2017, 18:17) Зд... Apr 9 2017, 10:40 pokk Добрый день, для своих программ использовал Switch... May 22 2017, 01:14 k155la3 Цитата(pokk @ May 22 2017, 04:14) . . .
... May 22 2017, 06:24
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|