Il linguaggio di programmazione C
 

Programmazione linux embedded

Luca 18 Dic 2015 15:38
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 stu***** 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 18 Dic 2015 20:13
Il 18/12/2015 15:38, Luca ha scritto:
> 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 ...

> Con linux ho abbastanza familiarità, uso debian da anni.
>
> Quale percorso di stu***** 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

> 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,*****i,ethernet e scheda au***** per sperimentare
con le periferiche

li' postresti contemporaneamente sviluppare e provare i tuoi programmi

le schede possono venire dopo

> Grazie mille
>
> ---
> Questa e-mail è stata controllata per individuare virus con Avast
> antivirus.
> https://www.avast.com/antivirus
>
Luca 19 Dic 2015 00:53
Il 18/12/2015 20:13, mmm ha scritto:
> io cercherei un vecchio PC, di classe pentium possibilmente a costo
> epsilon, con parallela,*****i,ethernet e scheda au***** 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
Andrea Rimicci 19 Dic 2015 10:26
>Quale percorso di stu***** 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 19 Dic 2015 11:09
Il 19/12/2015 10:26, Andrea Rimicci ha scritto:
> 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
mmm 19 Dic 2015 11:13
Il 19/12/2015 00:53, Luca ha scritto:
> Il 18/12/2015 20:13, mmm ha scritto:
>> io cercherei un vecchio PC, di classe pentium possibilmente a costo
>> epsilon, con parallela,*****i,ethernet e scheda au***** 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

> 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 ******* 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

> Comunque non voglio darmi le risposte da solo :) , anche perchè non sono
> in grado.
>

gia' farsi domande e' bene

> 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

> Grazie ancora
>
> ---
> Questa e-mail è stata controllata per individuare virus con Avast
> antivirus.
> https://www.avast.com/antivirus
>
Luca 19 Dic 2015 14:46
Il 19/12/2015 11:13, mmm ha scritto:
> 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
Jack 20 Dic 2015 22:53
Luca <Luca@invalidLuca.it> wrote:

> 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 20 Dic 2015 23:33
Il 20/12/2015 22:53, Jack ha scritto:
> 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?

> 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
Emanuele Santoro 21 Dic 2015 02:12
Il Fri, 18 Dec 2015 15:38:33 +0100, Luca ha scritto:

> Quale percorso di stu***** 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
Jack 21 Dic 2015 07:44
Luca <Luca@invalidLuca.it> wrote:

> Il 20/12/2015 22:53, Jack ha scritto:
>> 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.

> 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; |
> | } |
> |} |
> +--------------------------------+
>
si, sembra C. Non so cosa sia SERT.
E pessimo esempio tra l'altro.


> come funziona la cosa? si crosscompila su un pc e poi si trasferisconono
> gli eseguibili sulla scheda embedded?

in genere si.

>> 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 Stu***** + Kinetis SDK).
Tra l'altro Freescale mette a disposizione un OS realtime per i propri
processori: MQX.

> Grazie ciao

Prego Ciao
--
Yoda of Borg am I! Assimilated shall you be! Futile resistance is, hmm?
mmm 21 Dic 2015 08:32
Il 19/12/2015 14:46, Luca ha scritto:
> Il 19/12/2015 11:13, mmm ha scritto:
>> 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'


> Magari un testo che presenta problemi tipici e che spiega come
> risolverli in maniera ottimale.

vedi sopra

> Pei il C++ e il python meglio pensarci dopo aver assimilato bene la
> programmazione in C.

vedi sopra

> Grazie ciao
>
> ---
> Questa e-mail è stata controllata per individuare virus con Avast
> antivirus.
> https://www.avast.com/antivirus
>
CortexA57 22 Dic 2015 16:40
Il 18/12/2015 15:38, Luca ha scritto:
> 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?

> Quale percorso di stu***** 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 *****ware arduino e
simili.

Bye
Sacchi 23 Dic 2015 12:34
Il 18/12/2015 15.38, Luca ha scritto:

> 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 *****i, 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 23 Dic 2015 19:54
Il 23/12/2015 12:34, Sacchi ha scritto:
> 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

Links
Giochi online
Dizionario sinonimi
Leggi e codici
Ricette
Testi
Webmatica
Hosting gratis
   
 

Il linguaggio di programmazione C | Tutti i gruppi | it.comp.lang.c | Notizie e discussioni lang c | Lang c Mobile | Servizio di consultazione news.