Newsgroup: it.comp.lang.c
Titolo: Programmazione linux embedded

Ciao a tutti,
sono uno studente di ingegneria elettronica, le mie "competenze" di 
programmazione si limitano a un esame sostenuto sul linguaggio C.
 
Dato che il mercato richiede queste competenze, vorrei imparare la 
programmazione su schede embedded su cui è installato linux.
Con linux ho abbastanza familiarità, uso debian da anni.
 
Quale percorso di studio mi consigliate?
Io penso che dovrei prima imparare bene la programmazione C su linux e 
successivamente passare a programmare su architetture embedded (emulate 
o reali, si vedrà), l'idea è anche quella di imparare la programmazione 
Realtime, quindi RTlinux o Rtai, ma rimaniamo coi piedi per terra e 
procediamo a piccoli step visto che anche come programmazione C sono 
alle prime armi avendo sostenuto un solo esame e non avendo mai scritto 
software se non quello relativo agli esercizi che servono per superare 
l'esame stesso.
 
Qualcuno sà darmi dei suggerimenti sul percorso ottimale da seguire per 
raggiungere il mio scopo ?
Se conoscete anche dei libri da acquistare o guide da scaricare ditemi 
pure, acquistare qualche libro non è un problema.
Grazie mille
 
---
Questa e-mail è stata controllata per individuare virus con Avast antivirus.
https://www.avast.com/antivirus
 
 

 pure, acquistare qualche libro non è un problema.
 
io cercherei un vecchio PC, di classe pentium possibilmente a costo 
epsilon, con parallela,seriali,ethernet e scheda audio per sperimentare 
con le periferiche
 
li' postresti contemporaneamente sviluppare e provare i tuoi programmi
 
le schede possono venire dopo


 li' postresti contemporaneamente sviluppare e provare i tuoi programmi
 
il led collegato alla parallela l'ho già acceso con la funzione ioperm, 
se ricordo bene, e proprio su un vecchio pentium 75 Mhz che ho in 
cantina, ma è stata una cosa così, per gioco, non è che ho imparato più 
di tanto, a parte che esiste una funzione che ti consente di settare a 
5V i pin della parallela.
 
Sinceramente mi aspettavo una risposta tipo: studia bene la 
programmazione di sistema (gestione dei processi, dei segnali, pipe, 
semafori ecc), poi inizia a sperimentare con le periferiche, poi...
 
Comunque non voglio darmi le risposte da solo :) , anche perchè non sono 
in grado.
 
Vorrei solo capire nella mia situazione, conoscenza di C a livello 
scolastico e conoscenza non approfondita della bash, qual'è la prima 
cosa che devo andare a studiare considerando il lontano obbiettivo che 
voglio raggiungere (programmazione C su HW con linux embedded)
Grazie ancora


>Quale percorso di studio mi consigliate?
 
Potresti guardare le ricerche di personale nel settore e studiare
quello che chiedono. Quando avrai finito gli studi e nel curriculum
riesci a mettere dei tuoi progetti personali fatti proprio nel settore
oggetto dell'assunzione, finisci in prima linea tra i "papabili" ;)
-- 
andrea - ri mi cci, name

 quello che chiedono.
 
ho già fatto questa ricerca e ho appunto visto che i programmatori linux 
su sistemi embedded sono ricercati.
I linguaggi sono vari, ho deciso di iniziare col C.
 
Quindi tenendo presente l'obbiettivo in che ambito mi conviene iniziare 
a scrivere programmi? programmazione di sistema su linux, gestionali, 
office automation, ecc ecc
 
Grazie


 voglio raggiungere (programmazione C su HW con linux embedded)
 
devi programmare, programmare ed ancora programmare, di tutto, quello 
che ti piace, trovare un problema e risolverlo, e' tutta una questione 
di esperienza
 
anche la conoscenza del C++ e' utile e al limite anche il python ;-(
 
ultima cosa:
prova a contattare il LinuxUserGroup ( LUG ) della tua citta' potrebbero 
avere qualche progetto attivo nel mondo embedded ( ma anche no ) a cui 
partecipare per fare esperienza


 di esperienza
 
sarà il caso di acquistare qualche libro che insegni bene la 
programmazione C?
Magari un testo che presenta problemi tipici e che spiega come 
risolverli in maniera ottimale.
Pei il C++ e il python meglio pensarci dopo aver assimilato bene la 
programmazione in C.
Grazie ciao


 Grazie mille
 
se vuoi imparare a programmare sistemi embedded, allora inizia su
baremetal, senza OS.
Compra un arduino o (meglio) una scheda di 
mbed.com
 (sono quasi tutti
ARM e quelle di Freescale, le FRDM, costano poco e sono eccezionali) e
inizia a programmarci sopra, possibilmente senza usare il loro ambiente
di sviluppo che non ti fa vedere quello che succede sotto il cofano,
mentre a te interessa proprio quello.
 
Una volta che hai capito come funzionano allora ci puoi mettere sopra un
sistema operativo real time.
 
L'ultimo passo e' linux, tanto a programmare per linux su una scheda
embedded o per linux su un desktop cambia poco o niente.
 
Ciao Jack
-- 
Yoda of Borg am I! Assimilated shall you be! Futile resistance is, hmm?

 baremetal, senza OS
 
scusa la domanda terra-terra, ma bare metal è un linguaggio o una 
tecnica di programmazione?
Googolando ho trovato un esempio di codice su una scheda con 
architettura arm, ambiente di esecuzione SERT, sembrerebbe C:
 
  Modificare noop.c per accendere i led:
     +--------------------------------+
     |void noop(void)                 |
     |{                               |
     |   int *led;                    |
     |                                |
     |   led  = (int *) 0x80840020;   |
     |   /* Both LEDs on */           |
     |   *led = 0b11;                 |
     |   for (;;);                    |
     |}                               |
     +--------------------------------+
  Modificare noop.c per far lampeggiare i led:
     +--------------------------------+
     |void noop(void)                 |
     |{                               |
     |   volatile int *led;           |
     |   int state = 0;               |
     |   int c;                       |
     |                                |
     |   led  = (int *) 0x80840020;   |
     |   for (;;) {                   |
     |       state = 1-state;         |
     |       *led ^= 2*state+1;       |
     |       for (c=0; c<100000; ++c) |
     |           *led = *led;         |
     |   }                            |
     |}                               |
     +--------------------------------+
 
come funziona la cosa? si crosscompila su un pc e poi si trasferisconono 
gli eseguibili sulla scheda embedded?
 
 > possibilmente senza usare il loro ambiente
 > di sviluppo che non ti fa vedere quello che succede sotto il cofano,
 > mentre a te interessa proprio quello.
 
quindi mi suggerisci di usare l'Assembler?
 
Grazie ciao


 Quale percorso di studio mi consigliate?
 
Un po' di links trovati cercando "linux on embedded" su DuckDuckGo:
 
+ 
http://www.amazon.com/Embedded-Linux-Primer-Real-World-Development-
 
ebook/dp/B004AE3IA6?tag=duckduckgo-d-20
 
+ 
https://www.youtube.com/watch?v=92-
 
uLpWIRaI&list=PLo7bVbJhQ6qxRyrF7CSW3wXcbmmFl9z7-&index=1
 
+ 
http://www.ibm.com/developerworks/library/l-embdev/index.html
 
 
Buona fortuna! ;)
 
-- 
Emanuele

 Grazie ciao
 
Prego Ciao


 programmazione in C.
 
vedi sopra


 Quale percorso di studio mi consigliate?
se ti interessa Linux Embedded partirei con un ambiente linux
standard e come testo "Linux Device Driver" (cerca).
Inizia a scrivere e provare dei device driver, che e' il core della
programmazione embedded :-)
 
POI puoi comperare una schedina tipo raspberry, beaglebone etc, con
una cape di estensione (magari una scheda di ingressi/uscite digitali)
e cominciare a scriverti dei driver e relativa applicazione :
ti suggerisco di orientarti su un problema semplice ma di applicazione
pratica reale e iniziare scrivendoti PRIMA le specifiche di cosa vuoi 
fare e DOPO passi alla stesura del codice.
 
Se ti interessa l' "Embedded" in senso piu' vasto, si va dalle
applicazioncine su micro di pochi K senza OS ad applicazioni
piu' complesse usando OS tipo FreeRtos o simili fini a Linux:
per questo tipo di applicazioni puoi iniziare con hardware arduino e
simili.
 
Bye
 
 

 Con linux ho abbastanza familiarità, uso debian da anni.
 
Ciao,
 
Se sei un elettronico, partirei come ti hanno detto prendendo una board 
con un microcontroller (un core arm cortex m3 va benissimo, tipo 
l'stm32) da usare bare-metal (cioè senza avere un software precaricato 
che te lo fa partire... dovrai essere tu a configurare le varie 
periferiche, come le porte seriali, per poi usarle...). Oggigiorno le 
varie case che producono questi micro ti danno degli ambienti di 
sviluppo integrati gratuiti con cui riesci a iniziare a lavorare in 
breve tempo. Dovrai iniziare a giocare con pll, memory controller ecc 
per arrivare a far lampeggiare un led... e poi avanti.
Ormai un microcontroller ti serve su qualunque scheda elettronica, per 
questo motivo ti consiglio di partire da qui.
Su questi target il 99% lo fai in C.
 
Ciao,
 
L
 
 

 da usare bare-metal
 
un pic programmato in C o assembly è bare-metal?
 
o si parla di bare-metal solo su dispositivi su cui si può installare un 
sistema operativo? (sui pic non si può)
Grazie ciao
