Compilare e distribuire un programma C su un MCU che esegue un RTOS

2

Nota: Anche se sto parlando specificamente di un RTOS chiamato Embox qui, e anche se sto parlando di AVR / ARm, penso che questa domanda possa essere risolta da chiunque abbia mai fatto una discreta quantità di programmazione MCU basata su C.

Supponiamo di avere un MCU su cui è in esecuzione Embox. Ora vorrei scrivere 2 eseguibili e 1 libreria statica (utilizzata da entrambi i programmi) in C e distribuire tutti e tre gli artefatti su MCU / RTOS. Ho alcune domande / dubbi molto simili (da qui la mia scelta di fare questa domanda invece di 4):

  • Quali formati di file eseguibili e librerie richiede Embox e come posso dirlo? EXE / SO ?
  • Come si fa a compilare un programma C in un formato eseguibile / libreria (di nuovo, forse EXE / SO) compatibile con Embox? Ad esempio, sono su una macchina Windows con GCC fornito da MinGW. Non penso che sarei in grado di scrivere un programma per Linux e quindi distribuirlo su una macchina Linux. Avrei bisogno di una macchina Linux per questo. Ma se la macchina su cui sto distribuendo è un semplice RTOS / MCU, come posso svilupparlo su una piattaforma / architettura (Windows) e creare binari compatibili con un'altra?
  • Come si possono distribuire gli eseguibili nella MCU in modo tale che RTOS possa eseguire le 2 app all'avvio?
  • In che modo un utente interagisce con RTOS? Shell / SSH / console?
posta smeeb 08.05.2015 - 21:55
fonte

2 risposte

3

What formats of executables and libraries does Embox require, and how can I tell?

Embox è un sistema operativo configurabile e si può creare un'immagine del kernel e un'applicazione utente separate. Ma dal momento che MCU ha una memoria piuttosto piccola, la maggior parte degli RTOS incorporati, tra cui Embox, collega tutto il software (kernel, app ecc.) Ad una singola immagine per impostazione predefinita.

How does one compile a C program into an executable/library format (again, perhaps EXE/SO) that is compatible with Embox?

Devi impostare make e un cross-compiler. Quindi devi configurare Embox (scegli un modello desiderato) con make confload-xxx . E finalmente costruisci l'immagine con un comando make . Dopodiché puoi trovare l'immagine in un file ./build/base/bin/embox . Ecco una breve pagina [per iniziare] [1].

How does one deploy the executables to the MCU such that the RTOS can run the 2 apps at startup?

Sebbene Embox crei una singola immagine, puoi avere diverse app in essa. A differenza della maggior parte delle RTOS in Embox, puoi avere diverse routine main . Questa funzione è abilitata utilizzando un sistema di build speciale. Embox è costituito da un insieme di moduli e ogni modulo è descritto utilizzando un linguaggio DSL. Esiste un tipo di modulo 'applicazione'. Se un modulo è contrassegnato come 'applicazione', il sistema di costruzione rimuove il simbolo main e lo sostituisce con <package-name>_<module-name>_main . Inoltre, il sistema di generazione aggiunge il nuovo simbolo e il nome dell'applicazione a un registro applicazioni speciale, in modo da poter eseguire l'applicazione dalla shell di Embox o in qualche altro modo.

How does a user interact with the RTOS? Shell/SSH/console?

Embox ha una shell incorporata e puoi accedervi tramite UART (porta COM), ad esempio. Embox ha anche telnet e httpd app con cui puoi interagire. Anche Embox ha una porta di sshd (con dropbear project), ma penso che non sia il modo più semplice per comunicare con MCU.

    
risposta data 10.05.2015 - 12:26
fonte
4

What formats of executables and libraries does Embox require, and how can I tell?

Leggendo la documentazione. Si noti che alcuni (più?) Kernel progettati per l'uso incorporato potrebbero non supportare il caricamento degli eseguibili dai file. Potrebbero richiedere che le applicazioni vengano compilate nell'immagine del kernel.

[...] how do I develop on one platform/architecture (Windows) and make binaries that are compatible on another?

Si chiama cross-compilation. Essenzialmente, è necessario installare quella che viene chiamata una "toolchain" che produrrà binari in un sistema di destinazione. La compilazione per il sistema host è solo un caso speciale. gcc è ovviamente progettato per consentire l'installazione di più toolchain in percorsi diversi sullo stesso sistema.

How does one deploy the executables to the MCU such that the RTOS can run the 2 apps at startup?

Come accennato in precedenza, è probabile che le applicazioni vengano compilate nel kernel. Potresti essere limitato a un singolo main() che dovrebbe fork() e exec() per avviare processi concomitanti. Per molti microcontrollori, anche i processi non possono essere supportati correttamente; esiste solo una forma di protezione dei dati del kernel. Di solito ottieni solo discussioni.

How does a user interact with the RTOS? Shell/SSH/console?

Solitamente solo pulsanti e LED, fino a quando non si collega qualcosa come SPI che consente di comunicare con un computer. Su alcune schede di sviluppo, è supportato il collegamento seriale di base attraverso una porta USB di debug (e programmazione). Ma i protocolli utilizzati sono solitamente specifici dell'applicazione. In sostanza, puoi programmare la tua "shell" da eseguire sull'MCU che gestisce i comandi e scrive l'output.

    
risposta data 09.05.2015 - 04:12
fonte

Leggi altre domande sui tag