È possibile eseguire software in tempo reale?


60

So che funziona Linux e ci sono patch in tempo reale disponibili per Linux. Quelle patch funzionerebbero?

Qualcuno ha provato un altro sistema operativo in tempo reale sul Raspberry Pi?

L'idea è quella di utilizzare il consiglio di amministrazione per lavori di regolazione e controllo che sono critici in termini di tempo.


2
Penserei che l'unico motivo unico che mi viene in mente perché non potresti essere se la soluzione GPU chiusa dovesse interferire. A condizione che tu possa decidere di ignorare la GPU mentre nelle tue attività in tempo reale, penso che le estensioni in tempo reale possano essere fatte funzionare.
Chris Stratton,

7
L'intero sistema raspberry pi non è aperto per la modifica; la domanda sarebbe se la parte che non è (la GPU) sarebbe disposta a stare lontana mentre si eseguono le attività in tempo reale, o se ciò richiederà inevitabilmente cicli di bus per accedere a ram o anche "attenzione "dal core ARM in un modo che vanificherebbe gli obiettivi di tempismo duro.
Chris Stratton,

4
Apparentemente RISCOS è abbastanza adatto per alcune applicazioni in tempo reale e la sua porta Raspberry Pi sta andando bene. * 8 ')
Mark Booth,

4
RISCOS non è un sistema operativo in tempo reale (secondo il tuo link di Wikipedia), quindi come può essere d'aiuto?
Lars Pötter,

4
La patch CONFIG_PREEMPT_RT è stata dimostrata su numerosi processori ARM che eseguono Linux. Potrebbero esserci alcuni problemi di latenza, ma questi dovrebbero essere misurabili nell'ordine dei microsecondi.
Sfondamento

Risposte:


16

Potresti essere interessato a eseguire Xenomai su RaspberryPi. Qui puoi trovare un tutorial su come farlo. In breve, Xenomai è un progetto che ha creato un kernel Linux personalizzato (forniscono patch che devono essere applicate ai sorgenti del kernel) permettendogli di eseguire un altro kernel (core Xenomai) che è in tempo reale. Ciò rende possibile eseguire applicazioni Xenomai su un'ampia gamma di hardware senza la necessità di scrivere driver per loro (poiché Linux sta lavorando su una vasta gamma di hardware). Ciò consente di scrivere applicazioni per lo spazio utente RT utilizzando coppie diverse API RT disponibili.


1
Qual è la frequenza massima che posso ottenere con questo strumento? Sono interessato a controllare un motore a corrente continua ad un arrotondamento di frequenza 1 kHz
Nicolás Arias,

19

Nel kernel Linux, l'abilitazione PREEMPT_RTfornirà latenze limitate e API in tempo reale. Oltre alla configurazione PREEMPT_RT, è necessario selezionare anche le politiche SCHED_FIFOe SCHED_RR. E le applicazioni devono impostare i parametri in tempo reale chiamando le API appropriate o utilizzando le utilità appropriate.

Secondo un addestramento sugli elettroni liberi: Realtime in Embedded Linux , PREEMPT_RT era un progetto che portava le capacità in tempo reale nel kernel. È stato completamente ripiegato nel flusso del kernel 2.6.33 e 3.0. Vedi il documento troverai tutto.

Fondamentalmente ci sono stati due approcci per portare la capacità in tempo reale al kernel Linux:

  • Modifica all'interno del kernel, ovvero PREEMPT_RTprogetto.
  • Eseguire il side-by-side parte in tempo reale con un kernel normale e sotto il kernel normale, ci sono stati tre generazioni: RTLinux, RTAI, e Xenomai. ( Aedoscome Aviomenziona di seguito?)

Modificare:


2
Benvenuto in Raspberry Pi, bella risposta! L' utilizzo RT PREEMPT patchdi Ingo Molnar, utilizzato insieme al supporto High Resolution Timers(HRT) , consente al kernel di ottenere funzionalità in tempo reale . Al momento, il suo supporto raggiunge i kernel 3.4.11 e la "buona notizia" è che la patch "si sta restringendo", quindi sembra che la maggior parte di essa venga inclusa nei principali sorgenti del kernel. Puoi trovare un tutorial eccellente su come applicare e usarlo qui .
Avio,

1
Uh, e non dimenticare di citare Adeos tra le alternative per fornire supporto in tempo reale su Linux.
Avio,

2
Devo dire che far funzionare PREEMPT_RT con il kernel Raspberry Pi non è una questione semplice, semplicemente l'applicazione della patch produce un kernel non funzionante. Inoltre, ci sono molti nuovi driver nel kernel Raspberry Pi e questi driver non sono stati testati con PREEMPT_RT, né sono stati cancellati da sleep di blocco troppo lunghi. Questo è davvero un lavoro in corso, cioè.
Nakedible,

2
Qualche aggiornamento su questo? I driver ora sono abbastanza stabili per usare questa patch del kernel? Mi piacerebbe un tutorial funzionante per le persone che non hanno ancora compilato un kernel.
Fabb

@fabb: anche dopo molti anni ci saranno ancora driver che hanno problemi con il requisito RT. Lo scoprirai solo eseguendolo. A proposito, recentemente vedo un po 'di problemi di rete una volta aumentate le priorità di alcune applicazioni dello spazio utente, è inaspettato. Sebbene tutti questi tipi di situazioni siano altamente specifici di configurazione e applicazione.
Minghua,

6

Wyolum mas aLaMode (io lo chiamo Almond Pi) per adattarsi in cima al Pi in modo impilabile. Ha un orologio in tempo reale, utilizza un piccolo 328, si alimenta GPIO Real UART / power ed è flashable in vari modi. È fantastico perché il Pi può fare quello che vuoi, server web / database mentre Arduino viene eseguito in tempo reale.

inserisci qui la descrizione dell'immagine


1
Potrebbe sembrare un po 'poco pratico avere 2 microcontrollori in esecuzione, ma d'altra parte questo garantisce un funzionamento in tempo reale se gli altri approcci non sono abbastanza veloci.
Fabb,

1
Qualche suggerimento su come l'RPi potrebbe comunicare in modo pulito con l'altro µC senza rallentare il suo loop di controllo?
Fabb,

1
Sì, ma il µC dovrebbe eseguire il polling di UART, suppongo, al fine di non lasciare che UART interrompa il rinvio del timer del loop di controllo. Vorrei quindi eseguire il polling di UART all'inizio del loop di controllo e assicurarsi che non leggessi a molti byte in modo da non impiegare troppo tempo? O i buffer UART potrebbero traboccare troppo facilmente in quel modo? Oppure la frequenza del loop di controllo sarebbe molto più alta della velocità UART che la lettura di un byte per loop, se disponibile, sarebbe più che sufficiente?
Fabb,

1
Bel suggerimento. BTW Raspberry Pi Alamode è già un gioco di parole. La modalità Ala è quando metti il ​​gelato sulla torta.
Dan

1
Veramente ? Hehe. Mi chiedevo cosa significasse. Ha un senso ora :)
Piotr Kula

2

La migliore soluzione che ho visto a questo proposito è l' X10i - Real Time Control Board per Raspberry Pi di Heber.

X10i è un controller in tempo reale universale, potente e sicuro che consente il controllo su più ingressi / uscite, tramite USB, da qualsiasi sistema PC. Heber ora offre supporto in molti linguaggi di programmazione per rendere ancora più facile a programmatori, inventori e sviluppatori connettersi con il mondo esterno dal proprio PC.

Il link sopra fornisce una documentazione eccellente ed estesa e cercano di tenere aggiornati i driver con l'ultima versione di Debian per Pi.


Quindi hai bisogno di un connettore a nastro dal Pi a questo? Non riesco a trovare una foto dei noleggi della cosa, ma sembra davvero voluminosa. Ha molti esempi quindi suppongo sia un bene. +1
Piotr Kula,

Non posso dire di averlo usato, ma me lo sarei aspettato, anche se mi sembra di ricordare il ragazzo che utilizza un'interfaccia USB nella demo. È piuttosto voluminoso anche se sì.
Jivings,

1

Ecco un articolo (tradotto in francese da google translate) su Raspberry Pi in esecuzione con Xenomai .


5
Ciao. In genere scoraggiamo le risposte che sono semplicemente collegamenti nel caso in cui la pagina collegata si sposti. Potresti riassumere le informazioni su quella pagina nella tua risposta? È quindi possibile includere il collegamento come riferimento. Grazie!
Jivings,

1

RODOS è ancora un'altra opzione. È un progetto Open Source sviluppato dal Centro aerospaziale tedesco e dal team e dagli studenti del Prof. Montenegro.

Sta usando C ++, è completamente scritto in modo orientato agli oggetti e supporta ARM7, Atmel AVR, STM32 / Cortex-M3, Xilinx, Raspberry Pi :), ...

Attualmente è utilizzato nelle TET satellitari e nelle macchine LoTTo se non ho sbagliato.

Naturalmente preferirei eseguirlo sopra Linux (cosa è possibile) per avere il meglio di entrambi i mondi - ma poi rimangono le domande in TEMPO REALE, perché non sono sicuro che sia possibile che Linux sia in grado di fornire l'API corretta.

Per ottenere RODOS bisogna scrivere un messaggio al Prof. Sergio Montenegro o al DLR (Centro aerospaziale tedesco).


1

oltre a linux ci sono sistemi operativi in ​​tempo reale. abbastanza popolare tra quelli open source è ChibiOS / RT:

è un RTOS (Real-Time Operating System) completo, portatile, open source, compatto ed estremamente veloce

una breve introduzione è disponibile all'indirizzo http://chibios.org/dokuwiki/doku.php?id=chibios:documents:introduction . essendo diverso da Linux ti potrebbero piacere anche le letture di

Bene, ci sono alcune scelte di design che dovrebbero essere spiegate e che contribuiscono a rendere ChibiOS / RT un design peculiare. Niente di veramente nuovo in sé, ma il tutto è interessante.

o no. se ti piace - sperimentare sul pi potrebbe valere l'esperienza su https://github.com/steve-bate/ChibiOS-RPi :

Forcella ChibiOS per la sperimentazione di Raspberry PI.

l'autore aggiunge una bella guida a

http://www.stevebate.net/chibios-rpi/GettingStarted.html

personalmente, quando si tratta di rtos, per me Linux è come trasportare attrezzature cross-alpine per le esigenze del semplice paese. potresti non averne bisogno. anche un pi potrebbe essere troppo. controlla http://forum.arduino.cc/index.php?topic=144715.0 per un peso ancora inferiore :)


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.