|
Организация программ, дайте вектор куда копать |
|
|
|
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, 13:47
|
Знающий
   
Группа: Участник
Сообщений: 634
Регистрация: 27-10-10
Пользователь №: 60 464

|
Цитата(syoma @ Mar 31 2017, 16:22)  Zelepuk, а не хотите попробовать Matlab/Simulink/Embedded Coder под это дело? Ваша задача выглядит типовой для этого. Т.е. всю обработку данных и свои алгоритмы нарисовать в Simulink в виде модели, которую вы сможете моделировать на PC вместе с входными данными, а затем всю модель выгрузить за несколько кликов в Си код, который будет исполняться в реальном времени на вашем контроллере. И все это без морок с глобальными флагами и переменными и часто даже без ОСРВ. Это достаточно "красивый" подход с заделом на будущее. Называется Model-Based Design. Почем-то мне думается что там не все так просто и красиво как описывается. посмотреть бы пример реализации такого подхода. Генерируемый код весьма труден для понимания. Увидеть бы готовый вариант простой процедуры: принять байт от SPI, накопить буфер, посчитать среднее раз в 100мс.
|
|
|
|
|
Mar 31 2017, 14:26
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(Zelepuk @ Mar 31 2017, 15:47)  Почем-то мне думается что там не все так просто и красиво как описывается. посмотреть бы пример реализации такого подхода. Генерируемый код весьма труден для понимания. Увидеть бы готовый вариант простой процедуры: принять байт от SPI, накопить буфер, посчитать среднее раз в 100мс. Что там трудного?: CODE void MboxPost(OS_EVENT *mbox) { int e = OSMboxPost(mbox, (void *)1); if (e != OS_ERR_NONE && e != OS_ERR_MBOX_FULL) trap(TRAP_OS, e); } void MboxPend(OS_EVENT *mbox) { u8 e; OSMboxPend(mbox, 0, &e); if (e != OS_ERR_NONE) trap(TRAP_OS, e); } isr() { if (PERIPH.EMPTY) return; t1 = sysTimer; do { //Вычитываем все байты из FIFO периферии в программный FIFO. uint i = PERIPH.READ; if (!FIFO.isFull()) FIFO.write(i); } while (!PERIPH.EMPTY); if (FIFO.cnt() < N) if ((uint)(sysTimer - t1) < (uint)T) return; //Смотрим если в программном FIFO накопилось менее чем N байт (FIFO.cnt) и прошло менее чем T мсек с момента t1, то return; иначе: IsrEnter(); MboxPost(mbox); //посылаем сообщение сервисному процессу обработать накопленный программный FIFO. IsrExit(); } __noreturn void Task(void *) { //сервисный процесс, обслуживающий программный FIFO t1 = sysTimer; while (1) { while (!FIFO.isEmpty()) { FIFO.read(); ... } MboxPend(mbox); } } Всё. Это для uCOS. Для других ОС примерно так же.
|
|
|
|
Сообщений в этой теме
Zelepuk Организация программ Mar 31 2017, 07:52 ViKo Я понял так, программа делает то, что от нее требу... Mar 31 2017, 08:19 Zelepuk Цитата(ViKo @ Mar 31 2017, 11:19) Я понял... Mar 31 2017, 08:24  AlexandrY Цитата(Zelepuk @ Mar 31 2017, 11:24) Эт п... Mar 31 2017, 09:09   jcxz Цитата(AlexandrY @ Mar 31 2017, 11:09) Fr... Mar 31 2017, 09:23    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    AlexandrY Цитата(jcxz @ Mar 31 2017, 12:23) Перенес... Mar 31 2017, 10:20     jcxz Цитата(AlexandrY @ Mar 31 2017, 12:20) Вс... Mar 31 2017, 10:24     Zelepuk Цитата(jcxz @ Mar 31 2017, 11:52) В ISR, ... Mar 31 2017, 12:12      AlexandrY Цитата(Zelepuk @ Mar 31 2017, 15:12) как ... Mar 31 2017, 12:18      jcxz Цитата(Zelepuk @ Mar 31 2017, 14:12) Вот ... Mar 31 2017, 13:20 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 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
|
|
|