Как лучше всего реализовать мою программу для оценочной платы Keil MCB1700? - PullRequest
1 голос
/ 07 января 2012

Я хочу разработать программу для оценочной платы MCB1700. Клиентское программное обеспечение ПК считывает картинку с жесткого диска. Затем он отправляет изображение на оценочную плату MCB1700 через разъем (Ethernet). Сервер MCB1700 получает изображения с ПК через Socket-соединение и отображает их на ЖК-дисплее.

Также сервер должен выполнять такие задачи:

  • Сохранить картинку на USB-флешку;
  • Чтобы прочитать изображение с USB-карты и отправить его клиенту через сокет;
  • Для отправки и получения информации через CAN
  • COM-каротаж.
  • и т.д.

Подключение через сокет может быть реализовано с помощью библиотек CMSIS и RL-ARM.

Но, насколько я понял, в обоих случаях программное обеспечение должно прослушивать входящее TCP-соединение и обрабатывать сетевые события в бесконечном цикле - все примеры Keil основаны на таком принципе.

Я всегда думал, что для встроенного программирования плохой способ использовать бесконечные циклы. Более того, я прочитал такое интересное утверждение

"конечно, можно создавать программы в реальном времени без RTOS (выполняя одну или несколько задач в цикле) "

Я думаю, что лучше обрабатывать все события прерываниями.

Можно ли использовать сокетное соединение библиотек CMSIS и RL-ARM и организовать все мое программное обеспечение, обрабатывая прерывания? Мой сервер (на MCB1700) должен выполнять много задач. Я думаю, я должен использовать RTOS RTX в моем программном обеспечении. Не правда ли? Что лучше для реализации моего программного обеспечения без RTX?

1 Ответ

3 голосов
/ 08 января 2012

Простые системы реального времени часто работают в архитектуре "большой петли" с некоторыми критическими по времени событиями, обрабатываемыми прерываниями. Это не «плохая» архитектура, хотя она несколько негибкая, плохо масштабируется, и любое изменение может повлиять на время и / или на все части системы.

Неверно, что RL-TCPnet должен работать таким образом, но он предназначен для автономной работы, и примеры работают таким образом, чтобы не было никаких зависимостей от других библиотек для самой широкой применимости. Они являются только примерами и предназначены для демонстрации RL-TCPnet и ничего более. В этом смысле примеры не являются реалистичными и должны быть адаптированы к вашим требованиям.

Вы можете разработать систему, в которой весь код вашего приложения выполняется в обработчиках прерываний, а сетевой стек представляет собой службы в бесконечном цикле в контексте потока, но архитектурно это, вероятно, намного хуже, чем архитектура "большого цикла", так как у вас могут получиться очень длинные обработчики прерываний, более высокоприоритетные из которых истощаются и влияют на реакцию в реальном времени низко приоритетных. В итоге вы получите систему, которую сложно спланировать удовлетворительно. Более того, не все библиотечные подпрограммы подходят для выполнения в обработчике прерываний, поэтому это будет довольно ограничительным.

Можно обслуживать сетевой стек в потоке с низким приоритетом в ОСРВ. Структура для такой операции описана в документации в разделе: Использование RL-TCPnet с ядром RTX. . Это потребует от вас понимания и использования библиотеки ядра RL-RTX, но с учетом ваших оговорок в отношении кода «большого цикла» и описания задач, которые должна выполнять ваша система, похоже, что это то, что вы хотите делать в любом случае. Если вы решите использовать другую ОСРВ, тогда RL-TCPnet может работать аналогично с любой ОСРВ.

...