Discussione:
Programmazione linux embedded
(troppo vecchio per rispondere)
Luca
2015-12-18 14:38:33 UTC
Permalink
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
mmm
2015-12-18 19:13:42 UTC
Permalink
Post by Luca
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.
ma anche il "bare metal" e' piuttosto usato, vedi i vari Arm Cortex
M_qualcosa

e comunque l'embedded e' un mondo molto variegato con o senza GUI, una
bella varieta' di circuiti e sotto sistemi di contorno ...

Internet of Things, Machine to Machine, sistemi di acquisizione e
controllo ...
Post by Luca
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 ?
fare molta pratica di programmazione di base, acquisire una certa
pratica nel recuperare ( e poi capire ) algoritmi ed implementazioni dei
suddetti in giro per il mondo ;-)

magari fare anche un po' di pratica sui circuiti aggiuntivi ( GPIO, ADC,
DAC
Post by Luca
Se conoscete anche dei libri da acquistare o guide da scaricare ditemi
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
Post by Luca
Grazie mille
---
Questa e-mail è stata controllata per individuare virus con Avast antivirus.
https://www.avast.com/antivirus
Luca
2015-12-18 23:53:18 UTC
Permalink
Post by mmm
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
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

---
Questa e-mail è stata controllata per individuare virus con Avast antivirus.
https://www.avast.com/antivirus
mmm
2015-12-19 10:13:43 UTC
Permalink
Post by Luca
Post by mmm
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
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.
sei gia' a meta' dell'opera ora devi "solo" leggere dalla parallela ;-)

pero' ora riporta il PC in casa e comincialo ad usare

il passo successivo sara' provare a collegare alla parallela qualche
integrato come un ADC o un DAC e provare a parlarci

intanto imparerai a leggere i datasheet dei componenti
Post by Luca
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...
prima "l'idea della periferica" visto che il mondo embedded E' quello,
magari un tuo programma non avra' mai a che fare con pipe e file o una
interfaccia utente ma si limitera' a controllare un mezzo mobile per
evitare problemi

anche il realtime non e' una questione fondamentale ( da interndersi
come prima priorita' ), anche perche' se i requisiti temporali sono
veramente stringenti e' piu' facile usare un RTOS sul bare-metal
Post by Luca
Comunque non voglio darmi le risposte da solo :) , anche perchè non sono
in grado.
gia' farsi domande e' bene
Post by Luca
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)
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
Post by Luca
Grazie ancora
---
Questa e-mail è stata controllata per individuare virus con Avast antivirus.
https://www.avast.com/antivirus
Luca
2015-12-19 13:46:00 UTC
Permalink
Post by mmm
devi programmare, programmare ed ancora programmare, di tutto, quello
che ti piace, trovare un problema e risolverlo, e' tutta una questione
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

---
Questa e-mail è stata controllata per individuare virus con Avast antivirus.
https://www.avast.com/antivirus
mmm
2015-12-21 07:32:38 UTC
Permalink
Post by Luca
Post by mmm
devi programmare, programmare ed ancora programmare, di tutto, quello
che ti piace, trovare un problema e risolverlo, e' tutta una questione
di esperienza
sarà il caso di acquistare qualche libro che insegni bene la
programmazione C?
mi sono spesso scontrato con l'idea che conoscere un linguaggio di
programmazione voglia dire "saper programmare" e francamente la trovo
una idea SBAGLIATA.

sara' il caso di acquistare ( o prendere in prestito in biblioteca )
qualche che insegni bene la PROGRAMMAZIONE, che ti illustri sia gli
algoritmi classici, sia l'approccio per trasformare le idee in programmi

due libri per cominciare:

Knuth , the art of computer programming
Wirth , algoritmi piu' strutture dati uguale programmi

il primo usa un linguaggio macchina sintetico per gli esempi, il secondo
usa il pascal ( o forse l'oberon in una versione successiva ) , mi
sembra sia anche disponibile in rete in versione gratuita

poi A PARTE si impara il C (*), la sua libreria standard e la/le
librerie di sistema disponibili ed utili per i propri scopi

(*) sostituisci a C un linguaggio a scelta secondo necessita'


ed ultima cosa, fai MOLTA pratica, studiare solamente non serve a nulla

libri sull'embedded ce ne sono in quantita', c'e' solo l'imbarazzo della
scelta, googla un po'
Post by Luca
Magari un testo che presenta problemi tipici e che spiega come
risolverli in maniera ottimale.
vedi sopra
Post by Luca
Pei il C++ e il python meglio pensarci dopo aver assimilato bene la
programmazione in C.
vedi sopra
Post by Luca
Grazie ciao
---
Questa e-mail è stata controllata per individuare virus con Avast antivirus.
https://www.avast.com/antivirus
Andrea Rimicci
2015-12-19 09:26:02 UTC
Permalink
Post by Luca
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
Luca
2015-12-19 10:09:28 UTC
Permalink
Post by Andrea Rimicci
Potresti guardare le ricerche di personale nel settore e studiare
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

---
Questa e-mail è stata controllata per individuare virus con Avast antivirus.
https://www.avast.com/antivirus
Jack
2015-12-20 21:53:14 UTC
Permalink
Post by Luca
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
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?
Luca
2015-12-20 22:33:31 UTC
Permalink
Post by Jack
se vuoi imparare a programmare sistemi embedded, allora inizia su
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?
Post by Jack
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

---
Questa e-mail è stata controllata per individuare virus con Avast antivirus.
https://www.avast.com/antivirus
Jack
2015-12-21 06:44:35 UTC
Permalink
Post by Luca
Post by Jack
se vuoi imparare a programmare sistemi embedded, allora inizia su
baremetal, senza OS
scusa la domanda terra-terra, ma bare metal è un linguaggio o una
tecnica di programmazione?
no, significa che il programma che va sulla scheda non include un
sistema operativo.
Post by Luca
Googolando ho trovato un esempio di codice su una scheda con
+--------------------------------+
|void noop(void) |
|{ |
| int *led; |
| |
| led = (int *) 0x80840020; |
| /* Both LEDs on */ |
| *led = 0b11; |
| for (;;); |
|} |
+--------------------------------+
+--------------------------------+
|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; |
| } |
|} |
+--------------------------------+
si, sembra C. Non so cosa sia SERT.
E pessimo esempio tra l'altro.
Post by Luca
come funziona la cosa? si crosscompila su un pc e poi si trasferisconono
gli eseguibili sulla scheda embedded?
in genere si.
Post by Luca
Post by Jack
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?
no.
Intendevo non usare l'ambiente di sviluppo di Arduino o quello di
mbed.com, va bene per gli hobbisti, ma se ci devi lavorare e' parecchio
limitato.

Ad esempio se prendi una scheda di Freescale, scarica e usa il loro
ambiente di sviluppo (il Kinetis Design Studio + Kinetis SDK).
Tra l'altro Freescale mette a disposizione un OS realtime per i propri
processori: MQX.
Post by Luca
Grazie ciao
Prego Ciao
--
Yoda of Borg am I! Assimilated shall you be! Futile resistance is, hmm?
Emanuele Santoro
2015-12-21 01:12:09 UTC
Permalink
Post by Luca
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

+

uLpWIRaI&list=PLo7bVbJhQ6qxRyrF7CSW3wXcbmmFl9z7-&index=1

+ http://www.ibm.com/developerworks/library/l-embdev/index.html

Buona fortuna! ;)
--
Emanuele
CortexA57
2015-12-22 15:40:49 UTC
Permalink
Post by Luca
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.
"Embedded" e' un concetto molto vasto e non si limita a Linux:
a te interessano le applicazioni Linux e/o l' embedded?
Post by Luca
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
Sacchi
2015-12-23 11:34:53 UTC
Permalink
Post by Luca
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.
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
Luca
2015-12-23 18:54:00 UTC
Permalink
Post by Sacchi
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

---
Questa e-mail è stata controllata per individuare virus con Avast antivirus.
https://www.avast.com/antivirus

Loading...