|
|
  |
Организация программ, дайте вектор куда копать |
|
|
|
Apr 3 2017, 19:49
|
Знающий
   
Группа: Свой
Сообщений: 875
Регистрация: 28-10-05
Пользователь №: 10 245

|
Цитата(TigerSHARC @ Apr 3 2017, 21:11)  Интересно сравнить, где "красивше" будет реализация такой нехитрой задачи: прерывание вызывается раз в 1мс, после десяти прерываний необходимо вызвать функцию, после десяти вызовов функции вызвать другую функцию.
с while(1), все понятно: заводим 2 глобальных счетчика и вперед щелкать инкременты в прерывании. С RTOS нешто проще как-то? Как вы собираетесь вызывать через 10 прерываний функцию? Если без ОСРВ то при вызове функции из прерывания вы будет находиться так же в прерывании, если не придумаете другой механизм вызова этой функции. Если с ОСРВ то будет то же самое (только вне прерывания) после 10 инкрементов в прерывании будет передано (например сообщение для вашей функции которая уже будет называться задачей и ожидать это сообщение) сообщение и если приоритет этой задачи (вашей функции) будет главным то по выходу из прерывания, планировщик переключит выполнение программы на эту функцию. Но вся эта магия приобретает интерес когда у вас будет несколько параллельных задач, например обработка АЦП в реальном времени (цифровая фильтрация), передача параметров по modbus и вывод значений на экран.
|
|
|
|
|
Apr 4 2017, 11:00
|
Знающий
   
Группа: Свой
Сообщений: 875
Регистрация: 28-10-05
Пользователь №: 10 245

|
Добавлю к словам Baser'a Цитата(Zelepuk @ Apr 4 2017, 09:20)  Зачем в прерывании вызывать функцию? обычно в прерывании дергаем флаг, а в цикле while(1) опрашиваем его. Что бы реакция МК была приближена к "мгновенной реакции", в ОСРВ это называется время реакции системы. А так можно все делать и без ОСРВ только это будет тяжелей поддерживать и координировать взаимосвязь и время работы "функций" в вашей программе.
|
|
|
|
|
Apr 4 2017, 19:28
|

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

|
Цитата(TigerSHARC @ Apr 4 2017, 22:00)  Мгновенная реакция - это конечно здорово, если нужно, например битик выставить в регистр, но FFT вы тоже считать в прерывании будете?  Да, именно в прерывании очень удобно делать FFT. Поскольку длительность всех прерываний автоматически логится SWO трассером и ведется статитстика. В системах жесткого реального времени самое важное - это профайлинг, а не RTOS, прерывания или что-то еще. А тут вы профайлинг получаете не пошевелив даже пальцем . У любого ARM-а есть туча свободных векторов прерываний и есть достаточное количество приоритетов у прерываний. Так что делать FFT в прерываниях я бы даже рекомендовал. Под RTOS типа Micrium OS такая концепция отлично ложится. Они кстати сегодня разослали предложение скачать триальную версию на 45 дней с Micrium Platform Builder.
|
|
|
|
|
Apr 5 2017, 10:58
|

Знающий
   
Группа: Свой
Сообщений: 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
|
|
|
|
|
Apr 7 2017, 06:58
|
Профессионал
    
Группа: Свой
Сообщений: 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 (проверено). По-сути это оболочка для цикла.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|