Python на Системе работы в режиме реального времени (RTOS)

(Я пишу, потому что я чувствую, что ответы до сих пор не находятся вполне на метке.)

причина Вы имеете к управлению памятью, которое стоит упомянуть, когда у Вас есть проблема / решение, которое требует, чтобы Вы создали сложные структуры. (Если Ваши программы отказывают, если Вы выделяете для много интервала на стеке сразу, это - ошибка.) Как правило, структура First Data, которую необходимо будет изучить, является некоторым список . Вот единственный связанный, первое, что пришло на ум:

typedef struct listelem { struct listelem *next; void *data;} listelem;

listelem * create(void * data)
{
   listelem *p = calloc(1, sizeof(listelem));
   if(p) p->data = data;
   return p;
}

listelem * delete(listelem * p)
{
   listelem next = p->next;
   free(p);
   return next;
}

void deleteall(listelem * p)
{
  while(p) p = delete(p);
}

void foreach(listelem * p, void (*fun)(void *data) )
{
  for( ; p != NULL; p = p->next) fun(p->data);
}

listelem * merge(listelem *p, listelem *q)
{
  while(p != NULL && p->next != NULL) p = p->next;
  if(p) {
    p->next = q;
    return p;
  } else
    return q;
}

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

  • Используя то, что malloc, как гарантирует (стандарт языка), возвратит указатель, делимый 4,
  • выделяющее дополнительное место для некоторой зловещей собственной цели,
  • создание пул памяти с..

Получают хороший отладчик... Удачи!

17
задан Mike Pennington 24 November 2011 в 15:55
поделиться

4 ответа

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

Затем, когда данные приходят , вам нужно немедленно записать событие или ответить на это, а затем снова в ожидании игры. Обычно это наиболее критичная по времени часть системы сбора данных. По этой причине я бы обычно сказал, что придерживаюсь C для частей ввода-вывода при сборе данных, но нет никаких особенно веских причин не использовать Python на некритичных по времени частях.

Если у вас довольно слабые требования - нужна только точность до миллисекунды, возможно - это добавляет веса тому, чтобы делать все на Python. Что касается времени разработки, то, если вы уже знакомы с Python, у вас, вероятно, будет готовый продукт значительно быстрее, если вы будете делать все на Python и проводить рефакторинг только по мере появления узких мест. Выполнение основной части вашей работы на Python также упростит тщательное тестирование вашего кода, и, как правило, будет меньше строк кода и, следовательно, меньше места для ошибок.

Если вам нужно специально выполнить несколько - задача (не многопоточность ), Stackless Python также могут быть полезны. Это похоже на многопоточность, но потоки (или тасклеты на жаргоне Stackless) являются потоками не уровня ОС, а уровня Python / приложения, таким образом, накладные расходы на переключение между тасклетами значительно сокращаются. Вы можете настроить Stackless для совместной или приоритетной работы в многозадачном режиме. Самым большим недостатком является то, что блокировка ввода-вывода обычно блокирует весь ваш набор тасклетов. В любом случае, учитывая, что QNX уже является системой реального времени, трудно предположить, стоит ли использовать Stackless.

Я бы проголосовал за то, чтобы выбрать как можно больше Python - я считаю это как низкая стоимость и высокая выгода. Если и когда вам нужно будет переписать на C, у вас уже будет рабочий код, с которого можно начать.

Трудно предположить, стоит ли использовать Stackless.

Я бы проголосовал за использование как можно большего количества Python - я считаю это низкой стоимостью и высокой выгодой. Если и когда вам нужно будет переписать на C, у вас уже будет рабочий код, с которого можно начать.

Трудно предположить, стоит ли использовать Stackless.

Я бы проголосовал за то, чтобы выбрать как можно больше Python - я считаю это низкой стоимостью и высокой выгодой. Если и когда вам нужно будет переписать на C, у вас уже будет рабочий код, с которого можно начать.

15
ответ дан 30 November 2019 в 10:54
поделиться

Обычно аргументом против использования языка высокого уровня в контексте реального времени является неопределенность - когда вы запускаете подпрограмму один раз, это может занять 100 мс; в следующий раз, когда вы запустите ту же процедуру, он может решить расширить хеш-таблицу, вызвав malloc, затем malloc запросит у ядра дополнительную память, которая может сделать что угодно: от мгновенного возврата до возврата миллисекунд позже до возврата секунд позже к ошибкам, ни одна из которых не очевидна (или не контролируется) из кода. В то время как теоретически, если вы пишете на C (или даже ниже), вы можете доказать, что ваши критические пути будут «всегда» (за исключением удара метеорита) проходить за X-время.

7
ответ дан 30 November 2019 в 10:54
поделиться

Наша команда проделала некоторую работу по объединению нескольких языков в QNX и добилась значительных успехов в этом подходе. Использование python может иметь большое влияние на производительность, а такие инструменты, как SWIG и ctypes, позволяют легко оптимизировать код и комбинировать функции из разных языков.

Однако, если вы пишете что-то критическое по времени. , это почти наверняка должно быть написано в c. Это означает, что вы избегаете неявных затрат на интерпретируемый язык, такой как GIL ( Global Interpreter Lock ), и конкуренция на многих небольших выделениях памяти. Обе эти вещи могут иметь большое влияние на работу вашего приложения.

Также python в QNX, как правило, не на 100% совместим с другими дистрибутивами (т.е. / иногда отсутствуют модули).

3
ответ дан 30 November 2019 в 10:54
поделиться

Одно важное замечание: Python для QNX обычно доступен только для x86.

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

0
ответ дан 30 November 2019 в 10:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: