Corso introduttivo sui microcontrollori. Programmare i PIC in C Richiami fondamentali sulla programmazione in C: Puntatori Strutture Unioni
|
|
- Gerardo Pietro Bosco
- 8 anni fa
- Visualizzazioni
Transcript
1 Corso introduttivo sui microcontrollori Programmare i PIC in C Richiami fondamentali sulla programmazione in C: Puntatori Strutture Unioni Nicola Amoroso namoroso@mrscuole.net NA L16 1
2 Nota: oltre a essere tra gli strumenti più potenti del C, i puntatori sono anche tra i più pericolosi perché se usati impropriamente possono introdurre errori nei programmi, difficilmente identificabili. Quando si considerano questi strumenti si raccomanda la massima attenzione. Un puntatore è una variabile che contiene un indirizzo di memoria di un altra locazione di memoria Supponiamo di definire una variabile int b = 100 e suppponiamo che la variabile b sia memorizza nella cella di memoria il cui indirizzo è pari a ptrb. Si ha la situazione seguente: b = 100 ptrb = , supponiamo ancora di assegnare questo indirizzo alla variabile intera ptrb contiene l indirizzo della cella di memoria nella quale è contenuto il valore della variabile b ptrb viene definito come puntatore alla variabile b NA L16 2
3 Come tutte le altre variabili, anche le variabili puntatore, prima del loro utilizzo, devono essere dichiarate Il formato generale della dichiarazione di una variabile di tipo puntatore è il seguente: tipo *nome_variabile tipo è uno dei tipi di dati validi in C (es. Int, int16, char,...) esso specifica il tipo di variabile a cui puntare nome_variabile è il nome della variabile puntatore Int *ptra dichiara ptra come puntatore a una variabile di tipo int Double *ptrclass dichiara ptrclass come puntatore a una variabile di tipo double Nella dichiarazione di una variabile puntatore bisogna sempre precedere il nome della variabile con l operatore *; la sua presenza (indispensabile) avverte il compilatore che la variabile che si stà dichiarando è una variabile di tipo puntatore NA L16 3
4 1.Operatori sui puntatori Esistono due operatori per la manipolazione dei puntatori: & e * Il primo è un operatore unario che restituisce l indirizzo di memoria dell operando su cui è applicato.... Int *ptrv, b = 10; ptrv = &b; //ptrv variabile puntatore a int b variabile int //ptrv contiene l indirizzo della locazione di memoria in cui... //è memorizzato il valore di b Il secondo è un operatore unario che restituisce il valore contenuto nella locazione di memoria che si trova all indirizzo indicato dalla variabile puntatore.... //Mostra su display il contenuto della locazione di memoria il cui indirizzo è contenuto printf(lcd_putc, %d, *ptrv); //(*ptrv = b = 10) in ptrv... NA L16 4
5 1.Operatori sui puntatori Esempio: #include <16F877A.h> //HardWare di sistema... void main(void) { int *ptra, b, c; ptra = &b; //ptra variabile puntatore di tipo int8 b, c variabili int8 //ptra contiene l indirizzo della locazione di memoria di b *ptra = 20; //Assegno 20 alla loc di memoria indirizzata da ptra b=20 c = *ptra //C = *ptra = b = 20 //Mostra su display il contenuto della locazione di memoria il cui indirizzo è contenuto printf(lcd_putc, %d, *ptra,b,c); //(*ptra = b = C = 20)... } in ptra Riferimento indiretto è il nome del processo che permette di definire un valore attraverso un puntatore NA L16 5
6 Per Default il CCS Pic-C compiler impiega un solo byte per le variabili puntatore; questo significa che solo 256 locazioni della memoria disponibile (RAM) può essere indirizzata. Per componenti con disponibilità di maggior memoria (es, PIC18Fxxx, etc...) per utilizzare variabili puntatore a 16 bit (2 byte) bisogna introdurre la seguente direttiva in testa al programma: #device *=16 L utilizzo di questa direttiva permette l impiego di puntatori a 16 bit però può generare inefficienza sul codice prodotto. Per maggiori dettagli sull impiego di questa direttiva consultare il manuale del compilatore. NA L16 6
7 2. Aritmetica dei puntatori Il C consente l uso di due (quattro) soli operatori aritmetici sui puntatori: il + (++) e il (--) Solo quantità intere possono essere addizionate o sottratte a una variabile puntatore. Consideriamo le seguenti dichiarazioni di 4 diversi tipi di puntatori: int16 *ptrp1; int8 *ptrp2; char *ptrp3; double *ptrp4 Supponiamo inoltre di avere la seguente situazione: ptrp1=100; ptrp2=150; ptrp3=180; ptrp4=200; In seguito all istruzione ptrp1++ avremo ora che ptrp1=102 in quanto l incremento fà puntare ptrp1 all intero successivo e non alla cella successiva (ptrp1 è una variabile puntatore che punta a una locazione contenente un int16 [2 byte], l intero successivo sarà memorizzato due locazioni dopo quella attuale) NA L16 7
8 2. Aritmetica dei puntatori Consideriamo le seguenti dichiarazioni di 4 diversi tipi di puntatori: int16 *ptrp1; int8 *ptrp2; char *ptrp3; double *ptrp4 Supponiamo inoltre di avere la seguente situazione: ptrp1=100; ptrp2=150; ptrp3=180; ptrp4=200; In seguito all istruzione ptrp2=ptrp2-1 avremo ora che ptrp2=149 in quanto il decremento fà puntare ptrp2 all intero precedente (ptrp2 è una variabile puntatore che punta a una locazione contenente un int8 [1 byte], l intero precedente sarà memorizzato una locazione prima di quella attuale) Ancora ptrp3=ptrp3+15 Avremo in questo caso ptrp3=195 [char 1 byte] Ancora ptrp4++ Avremo in questo caso ptrp4=204 [double 4 byte] Ogni volta che un puntatore viene incrementato passa a puntare alla variabile successiva che appartiene al suo tipo base, mentre a ogni decremento passa alla variabile precedente dello stesso tipo base. NA L16 8
9 2. Aritmetica dei puntatori Consideriamo la seguente dichiarazione: int8 *ptra, b = 20; //ptra puntatore a un int8 b variabile int8 Analizziamo ora due possibili situazioni, una sbagliata e l altra corretta ptra=&b; *ptra++;... //ptra contiene l indirizzo della variabile int8 b //Errato Viene prima prelevato il contenuto dell oggetto //puntato da ptra e successivamente viene incrementato ptra (*ptra)++; //Corretto l oggetto puntato da ptra viene incrementato //di 1 b = *ptra = = 21 L operatore unario * ha verso di precedenza superiore rispetto all operatore unario ++ L uso appropriato delle parentesi ristabilisce la condizione corretta NA L16 9
10 3. Confronti ed espressioni con puntatori I puntatori possono essere utilizzati in operazioni relazionali: Oppure Oppure int8 *ptrp1, *ptrp2;... if(ptrp1<ptrp2); if(ptrp1==ptrp2); if(ptrp1>ptrp2); Ed anche in espressioni di assegnazione prtp1 = ptrp2; Nelle espressioni e nei confronti le variabili puntatore seguono le stesse regole di tutte le altre variabili in C Il confromto e l assegnamento tra variabili puntatori ha senso se esiste una relazione logica tra gli stessi; queste operazioni sono alquanto delicate e possono facilmente introdurre errori nei programmi NA L16 10
11 4. Puntatori e array Esiste una stretta relazione tra puntatori e array, se usiamo il nome di un array senza alcun indice si stà in realtà usando un puntatore al primo elemento dell array. Consideriamo le seguenti istruzioni: int8 arr[10], *ptrarr; ptrarr = arr; //arr array di 10 elementi int8 ptrarr puntatore int8 //ptrarr contiene l indirizzo del primo elemento dell array arr // Ricorda il primo elemento di un array ha indice 0 arr[4] = 5; *(ptrarr+5) = 8; //assegna 5 al 5 elemento dell array //assegna 8 al 6 elemento dell array N.B. => Solo nel caso degli array per definire l indirizzo del primo elemento basta utilizzare il nome dell array stesso, abbiamo visto in precedenza che l indirizzo di una qualsiasi altra variabile può essere individuata mediante l operatore &. Il nome di un array è un puntatore all array NA L16 11
12 4. Puntatori e array Consideriamo il seguente esempio: int8 a[]={1, 2, 3, 4, 5}; void main(void) { } int8 *p, i; p=a; for(i=0; i<5; i++) //p contiene l indirizzo del primo elemento dell array printf(lcd_putc, %d, *(p+i)); //mostra su display i 5 elementi dell array Per accedere agli elementi di un array viene utilizzata l aritmetica dei puntatori, si incrementa di i il valore della variabile puntatore p NA L16 12
13 4. Puntatori e array Consideriamo il seguente esempio: int8 a[]={1, 2, 3, 4, 5}; void main(void) { } int8 *p, i; p=a; for(i=0; i<5; i++) //p contiene l indirizzo del primo elemento dell array printf(lcd_putc, %d, p[i]); //mostra su display i 5 elementi dell array Un altro metodo per accedere agli elementi di un array, i viene utilizzato come indice dell array il cui primo elemento è indirizzato dal puntatore p Per accedere agli elementi di un array l uso dell aritmetica di puntatori può essere più veloce di quello degli indici e spesso nei programmi la velocità di esecuzione è un requisito importante! NA L16 13
14 5. Puntatori come argomento di funzioni Nelle lezioni 10 e 14 abbiamo introdotto una modalità per passare valori a una funzione durante una chiamata a funzione ; abbiamo considerato il passaggio di parametri per valore. Passaggio dei parametri per valore Durante la chiamata di una funzione nel passaggio dei parametri per valore, il valore del parametro attuale viene ricopiato nella variabile che costituisce il parametro formale, modifiche eseguite sul parametro formale non ha effetto sul parametro attuale (il parametro formale è una variabile locale). Esiste un altro metodo per passare un parametro ad una funzione Possibilità di passare un puntatore ad una funzione, cioè passare l indirizzo della locazione di memoria in cui è immagazzinata la variabile Passaggio di un puntatore come parametro NA L16 14
15 5. Puntatori come argomento di funzioni Quando viene passato un puntatore come parametro a una funzione, qualsiasi cambiamento fatto sulla variabile, usando il puntatore come riferimento, cambia effettivamente il valore della variabile originale. Una variabile puntatore può essere passata a una funzione come qualsiasi altra variabile. //Esempio Stampa su display la scritta Studiare fà bene #include <16f88> void puts(char *p); void main(void) { //Dichiarazione prototipo funzione p è una variabile puntatore puts( Studiare fà bene! ); //Questa funzione stampa la stringa il cui riferimento (elem 0) } //viene passato come parametro puntatore void puts(char *p) { } while(*p!= \0 ) { //Sino a quando non incontri il carattere nullo fine stringa } printf(lcd_putc, %c, *p); p++ //mostra il carattere indirizzato dal puntatore p //incrementa l indirizzo della locazione puntata da p NA L16 15
16 5. Puntatori come argomento di funzioni //Un altro esempio Incremento del valore di una variabile #include <16f88>... void inc_di_5(int8 *p) { //incrementa di 5 il contenuto della locazione puntata da p } *p += 5; //*p = *p + 5 void main(void) { } int8 val = 10, *ptr; ptr = &val; //ptr puntatore a variabile int8 //ptr contiene l indirizzo di memoria della variabile val printf(lcd_putc, %d, val, *ptr); //Mostra su display val = 10 *ptr = 10 inc_di_5(ptr); printf(lcd_putc, %d, val, *ptr); //Mostra su display val = 15 *ptr = 15 Con questo esempio vediamo come modificare il contenuto di una locazione di memoria mediante l uso di puntatori; in questo caso i valori originali vengono passati mediante l uso di puntatori; nessuna copia di parametri è necessaria Potenza del C NA L16 16
17 Quanto proposto sull uso dei puntatori sono le basi fondamentali per poter lavorare con strumenti molto potenti ma anche difficili nel loro impiego. Prestare la massima attenzione sull uso di questi strumenti in quanto si possono commettere facilmente errori di programmazione e riferimenti sui dati. Naturalmente abbiano considerato gli argomenti più semplici e più indicati per un nostro uso, per chi volesse approfondire questo argomento raccomandiamo di consultare un classico libro sul linguaggio C, ne esistono di ottimi a prezzi accessibilissimi. NA L16 17
18 Richiami fondamentali sulla programmazione in C tipi di dati definiti dall utente Oltre ai tipi di dati principali che conosciamo (int8, int16, char, double,...), il C consente di creare cinque diversi tipi di dati secondo le proprie personali necessità. La struttura E un insieme di dati di base (anche di tipo diverso), raggruppati sotto un unico nome e interpretato dal compilatore come un unico riferimento. In altri linguaggi una struttura viene spesso denominato con il nome di record. Campo di bit E una variazione della struttura e consente di accedere ai singoli bit. Unione Consente di associare le stesse locazioni di memoria a due o più variabili. Enum (Enumerativo) Consiste in una lista di simboli. Typedef E una parola chiave del C che consente di dare un nuovo nome (rinominare) uno dei tipi di dati già esistenti. Per le nostre necessità richiameremo brevemente le strutture e le unioni, naturalmente rimandiamo a testi specializzati per maggiori approfondimenti NA L16 18
19 Richiami fondamentali sulla programmazione in C tipi di dati definiti dall utente: le strutture La struttura è un insieme di variabili cui si fà riferimento con un unico nome, mantenendo unite delle informazioni che sono logicamente correlate. Le variabili che definiscono la struttura, vengono individuati come elementi (membri-campi) della struttura. Ogni variabile è di un tipo-base ben definito e può essere diverso da ogni altro. Supponiamo di voler definire una struttura in cui memorizzare le informazioni tecniche di una automobile (dati relativi a: marca, modello, cilindrata, tipo di combustibile). La dichiarazione della struttura è la seguente: struct automobile { char marca[20}; char modello[20]; int16 cilindrata; char combustibile[10]; } auto, vettura; struct parola chiave per definire una struttura automobile nome della struttura marca, modello, cilindrata, combustibile elementi (membri) della struttura auto, vettura variabili di tipo automobile NA L16 19
20 Richiami fondamentali sulla programmazione in C tipi di dati definiti dall utente: le strutture automobile è solo un nuovo tipo di dato composto dall insieme di più tipi di dati-base (anche diversi tra loro). Per poter utilizzare questo nuovo tipo di dato, bisogna dichiarare delle variabili dello stesso tipo della struttura (automobile nel nostro esempio), come abbiamo sempre fatto per qualsiasi altro tipo di dato in precedenza. Nel nostro esempio precedente vengono definite le variabili auto e modello di tipo automobile. Si possono definire ulteriori variabili dello stesso tipo nel solito modo: automobile car, models; car e models sono anch esse due variabili di tipo automobile Notiamo che nella definizione precedente, ogni variabile di tipo automobile occupa ben 52 byte di memoria (50 byte per marca, modello, combustibile e 2 byte per cilindrata). Quando si sviluppa software per microcontrollori, nei quali la memoria disponibile è limitata, fare sempre attenzione alle risorse occupate. Le strutture sono molto potenti però occupano anche risorse di sistema. NA L16 20
21 Richiami fondamentali sulla programmazione in C tipi di dati definiti dall utente: le strutture 1. Accesso agli elementi (membri-campi) della struttura Per poter accedere a un membro (campo) della struttura bisogna indicare il nome della variabile e del membro separati dall operatore. (punto). auto.marca = Fiat ; auto.cilindrata = 2000; Le due istruzioni precedenti assegnano i valori Fiat e 2000 ai rispettivi campi marca e cilindrata della variabile auto di tipo automobile. Per visualizzare su display il modello e la cilindrata della nostra auto:... lcd_gotoxy(1,1); printf(lcd_putc, %s, auto.modello); lcd_gotoxy(1,2); printf(lcd_putc, %lu, auto.cilindrata);... NA L16 21
22 Richiami fondamentali sulla programmazione in C tipi di dati definiti dall utente: le strutture 1. Accesso agli elementi (membri-campi) della struttura Il campo modello della struttura automobile è un array di 20 caratteri, se volessomo accedere al 4 elemento di questo array: auto.modello[3]; ricordiamo che il primo elemento di un array ha indice 0. Come vistro per i puntatori, se volessimo conoscere l indirizzo della locazione di memoria in cui è immagazzinato il valore del membro modello della struttura automobile: &auto.modello; E anche possibile dichiarare un array di strutture come qualsiasi altro tipo di dati-base. Dichiariamo un array di 10 elementi della struttura automobile struct automobile year08[10]; Ogni elemento dell array sarà composto da una struttura tipo automobile (52 byte ogni elemento l array year08 occuperà 520 byte). Per accedere al membro modello del 5 elemento dell array: year08[4].modello; NA L16 22
23 Richiami fondamentali sulla programmazione in C tipi di dati definiti dall utente: le strutture 2. Strutture come parametri di funzioni Quando un elemento di una struttura viene passata come argomento di una funzione, viene passato solo il valore a meno che non si tratti di una variabile tipo array o array di caratteri. struct my { char c; int8 x; char s[20]; } pers; Si può passare ogni elemento della struttura a una funzione nel seguente modo: funz(pers.c); //Passo il valore del carattere c funz(pers.x); //Passo il valore dell intero x funz(pers.s); //Passo l indirizzo della stringa s funz(pers.s[3]); //Passo il valore del carattere s[3] Se si desidera passare l indirizzo di uno degli elementi della struttura my: funz(&pers.c); //Passo l indirizzo del carattere c funz(&pers.x); //Passo l indirizzo dell intero x NA L16 23
24 Richiami fondamentali sulla programmazione in C tipi di dati definiti dall utente: le strutture 2. Strutture come parametri di funzioni Quando l argomento con cui viene chiamata una funzione è un intera struttura, il compilatore passa tutta la struttura per valore, questo significa che modifiche, ai membri della struttura, fatte all interno della funzione non si riflettono sulla struttura originale usata al momento della chiamata. E frequente utilizzare, con questa tecnica, dichiarazioni globali della struttura, di cui vengono successivamente attivate le variabili e gli argomenti necessari. /* Struttura visibilità globale */ struct mio { int8 x,y; char c; } Void main (void) { mio patt; // Var tipo mio patt.x=100; f1(patt); } Void f1(pform) { mio pform; // Var tipo mio printf(lcd_putc %d,form.x); } Viene mostrato su display il valore dell elemento x della struttura mio. NA L16 24
25 Richiami fondamentali sulla programmazione in C tipi di dati definiti dall utente: le strutture 3. Puntatori a strutture A volte è molto utile accedere a strutture attraverso un puntatore. Un puntatore a una struttura viene dichiarato ponendo un asterisco prima del nome di una variabile struttura. Ad esempio dichiariamo la struttura temp con la variabile struttura p e la variabile puntatore q: struct temp { int8 i; char ch; } p, *q; //q puntatore a una struttura Con questa definizione, l istruzione q=&p; è perfettamente lecita. ; diciamo q è un puntatore alla variabile struttura, di tipo temp, p. Con i puntatori a struttura per poter accedere a un elemento della struttura si utilizza l operatore -> (- e >) e non l operatore. come visto in precedenza, q->i=10; //assegna 10 all elemento i della struttura Analogamente (*q).i=10 //assegna 10 all elemento i della struttura NA L16 25
26 Richiami fondamentali sulla programmazione in C tipi di dati definiti dall utente: le strutture 3. Puntatori a strutture Nota Quando come parametro di una funzione viene passato l intera struttura, viene fatta una copia locale della struttura stessa e questo occupa risorse e tempo specialmente per le strutture grandi. Quando viene passato, invece, un puntatore alla struttura vengono ridotti i tempi di esecuzione e le risorse di sistema impiegate; in questo secondo caso modifiche in locale sulla struttura, modificano anche la struttura stessa, nel primo caso questo non accade. 3. Puntatori a strutture Ricorda Quando si accede a un membro della struttura usando una variabile struttura si usa l operatore., quando si usa una variabile puntatore alla struttura si usa l operatore ->. #include <16f88.h> #include <string.h> Struct s_scuola { int8 i; char str[40]; } s, *p; Void main(void) { p=&s; s,i=10; printf(lcd_putc %d, s.i) //stampa 10 p->i=20 printf(lcd_putc %d, p->i) //stampa 20 } NA L16 26
27 Richiami fondamentali sulla programmazione in C tipi di dati definiti dall utente: le strutture 4. Una struttura particolare; campo di bit Il C consente di accedere ai singoli bit che si trovano in un byte. Sebbene sia possibile eseguire queste operazioni con gli operatori su bit, in alcuni casi è bene usare il tipo campo di bit che può portare a una migliore strutturazione ed efficienza del programma. La dichiarazione di un campo di bit è simile a quello di qualsiasi altra struttura, i memmbri della struttura sono i singoli bit del byte considerato. Ad esempio se analizziamo il driver (lcd_4x20.c) del text-display della nostra demo-board troviamo la dichiarazione della seguente struttura: struct lcd_pin_map { boolean enable; boolean rs; boolean unused; // This structure is overlayed // on to an I/O port to gain // access to the LCD pins. // The bits are allocated from boolean unused; // low order up. ENABLE will int data : 4; // be pin D0. } lcd; #byte lcd = 0xF83 // Control on PORTD per Pic serie 18F NA L16 27
28 Richiami fondamentali sulla programmazione in C tipi di dati definiti dall utente: le strutture 4. Una struttura particolare; campo di bit struct lcd_pin_map { // This structure is overlayed boolean enable; // on to an I/O port to gain boolean rs; // access to the LCD pins. boolean unused; // The bits are allocated from boolean unused; // low order up. ENABLE will int data : 4; // be pin D0. } lcd; #byte lcd = 0xF83 // Control on PORTD per Pic serie 18F La nostra struttura di controllo per il text-display è mappato all indirizzo 0xF83 (PortD per i Pic della serie 18F. Per i Pic della serie 16F questo indirizzo è 0x08). Il byte di controllo è composto da soli sei bit e precisamente: enable bit D0.. rs bit D1.. data bit D4-D7 I bit D2 e D3 sono inutilizzati (sulla nostra scheda possono pilotare il buzzer e un led. Confronta lo schema elettrico della anxapic demo-board per maggiori ragguagli). NA L16 28
29 Richiami fondamentali sulla programmazione in C tipi di dati definiti dall utente: le strutture 4. Una struttura particolare; campo di bit Siccome il data-bus è a 4 bit per inviare un byte si utilizzano due nibble consecutivi. Un semplice esempio per l invio di un nibble: void lcdsendnibble(byte n) { lcd.data=n; delay_cycles(1); lcd.enable=1; delay_us(2); lcd.enable=0; } Nota Gli esempi riportati sono puramente indicativi e del tutto generali. Per un uso più professionale documentarsi adeguatamente. Un ultima considerazione sulle struture Si possono avere anche strutture annidate cioè strutture membri di altre strutture. Accenniamo solo a questa possibilità rimandando a testi opportuni per ulteriore documentazione. NA L16 29
30 Richiami fondamentali sulla programmazione in C tipi di dati definiti dall utente: unioni In C, una unione (union) è una locazione di memoria che può essere usata da due o più variabili che possono essere anche di tipo differente; durante l utilizzo può essere impiegata una sola variabile per volta. La definizione di una unione è simile a quella di una struttura. Un esempio di dichiarazione: union tipo_u { int8 i; char c[3]; double d; } temp; La differenza fondamentale tra una unione e una struttura è che ogni elemento (membro) della unione condivide con gli altri lo stesso spazio di memoria Lo spazio di memoria riservato alla nostra unione: int8 Char c[3] double 1 byte 2 byte 3 byte 4byte int8 1 byte char c[3] 3 byte double 4 byte NA L16 30
31 Richiami fondamentali sulla programmazione in C tipi di dati definiti dall utente: unioni Quando viene dichiarata una unione (union), il compilatore riserva spazio sufficiente per contenere la più grossa delle variabili che la costituiscono. Per il nostro precedente esempio verrebbero allocaty 4 byte di memoria. l accesso ad un membro della unione avviene tramite l operatore. [(punto), es. temp.i, temp.d] oppure l operatore -> se si considera l accesso mediante un puntatore a una variabile unione (valogono le stesse regole viste per le strutture). Un esempio di uso di unioni per i micro si ha quando si connette serialmente un A/D converter esterno a 12 bit. Si dichiara una unione di questo tipo: union AD_Sample { unsigned char bytes[2]; signed short word; } Per leggere A/D converter si fanno 2 letture a 8 bit e si immagazzinano i dati nell array. Quando si vuol utilizzare il risultato della conversione si legge l elemento word della union. NA L16 31
32 Un semplice esercizio Colleghiamo un tastierino a matrice 4x4 alla nostra demo-board Anxapic Per l'immissione dei dati ci serviremo di un tastierino a matrice 4x4 con 16 tasti disposti su 4 righe e 4 colonne. L'interfacciamento del tastierino con la nostra demoboard è semplificato mediante l'utilizzo di un opportuno encoder che gestisce anche il processo di debouncer (tempo di ritardo nella decodifica del tasto premuto). NA L16 32
33 Un semplice esercizio Colleghiamo un tastierino a matrice 4x4 alla nostra demo-board Anxapic A B C * 0 # D E N C O D E R AnxaPic Conn Pin A >> [RC0] B >> [RE0] C >> [RE1] D >> [RE2] Int >> [RB4] Tasto D C B A Int L to H L to H L to H A L to H L to H L to H L to H B L to H L to H L to H L to H C L to H * L to H L to H # L to H D L to H Quando si preme un tasto, l'encoder genera sulle uscite DCBA il codice relativo al tasto premuto, genera anche un segnale di interrupt (Int) e rende disponibili i dati sul bus per un tempo di circa 40 ms (debouncer). I 4 bit generati verranno intercettati e decodificati dal microcontrollore; a tal proposito bisogna produrre opportuno software. NA L16 33
34 Un semplice esercizio Realizzeremo il nostro encoder con un microcontrollore Microchip a 18 pin della serie 16F88. Questo è un microcontrollore compatibile con il classico e arcinoto 16F84 però con potenzialità molto superiori. Una delle caratteristiche principali di questo micro è quello di avere un generatore di clock interno e quindi i 2 pin necessari al collegamento di un quarzo esterno possono essere sfruttati come pin di I/O. Naturalmente vi sono altre caratteristiche importanti, per maggiori ragguagli consultare gli opportuni Data-Sheets. Questo esercizio viene presentato con il solo scopo di far conoscere l uso di puntatori nella realizzazione di software per la gestione di microcontrollori. Pr il nostro tastierino lo schema elettrico è molto semplice, il codice presentato richiede un minimo di attenzione, sono state utilizzate routines, opportunamente riadattate per i nostri scopi, originariamente introdotte da P.H.Anderson (Pic C routines Baltimore, MD, Jan 01). NA L16 34
35 Un semplice esercizio Colleghiamo un tastierino a matrice 4x4 alla nostra demo-board Anxapic Schema elettrico Il display a 7 segmenti è indispensabile solo nella simulazione,. Sul circuito finale (PCB) non sarà presente. NA L16 35
36 Un semplice esercizio Colleghiamo un tastierino a matrice 4x4 alla nostra demo-board Anxapic Schema elettrico Vediamo ora di capire lo schema e scoprire intuitivamente il funzionamento del sistema. Dallo schema elettrico so nota che le 4 righe della Key sono connesse al nibble alto (RB4..RB7) di portb, inoltre questi 4 bit devono essere configurati come input e allacciati a livello logico alto mediante l abilitazione del pull-up interno del controllore. Le 4 colonne della key sono invece collegate al nibble basso (RB0..RB3) di portb, questi 4 bit sono configurati come output e sono tenuti a livello logico basso. Quando nessun tasto è premuto, i 4 bit di input (B4..B7) sono tutti a livello logico alto (ricordiamoci del pull-up interno attivo). Quando viene premuto un tasto (cortocircuito colonna-riga), la riga corrispondente si porta a livello logico basso generando una condizione di interrupt opportunamente rilevato dal microcontrollore (naturalmente la condizione di interrupt, cambiamento del livello del segnale su RB4..RB7, è attivo). Il programma determina il corrispondente tasto premuto e invia l opportuno codice sulle 4 linee di uscita RA0..RA3, generando anche un opportuno segnale ad onda quadra di breve durata su RA4. NA L16 36
37 Un semplice esercizio Colleghiamo un tastierino a matrice 4x4 alla nostra demo-board Anxapic - Decodifica tasto Per individuare il tasto premuto vengono portate sequenzialmente le colonne del tastierino a livello logico basso meediante l invio di opportune maschere sul nibble basso della portb. Esempio: 0xE = 1110 (RB0=0, RB1=1, RB2=1, RB3=1;... 0x7 = 0111 (RB0=1, RB1=1, RB2=1, RB3=0). Per ogni colonna a livello basso si vanno a scansionare le 4 righe e quando il valore letto è uguale a un valore di una delle quattro maschere inviate significa che il tasto premuto è uguale al tasto con indice di colonna e indice di riga opportune. Supponiamo di aver inviato 0x07 (RB0=RB1=RB2=1, RB3=0) sulle 4 colonne e di leggere 0x0E (RB0=0, RB1=RB2=RB3=1) sulle 4 righe, significa che è stato premuto il tasto con indice di riga 0 e indice di colonna 3 (tasto T4). Il codice associato a questo tasto sarà pari a (4*iriga+icol) = (4*0+3) = 3 [T4] Altro esempio Inviato su colonne 0x0B (RB0=RB1=RB3=1, RB2=0) Letto su righe 0x0D (RB0=RB2=RB3=1, RB1=0) Tasto corrispondente Indice di riga 1, indice di colonna 2 (tasto T7) Tasto = 4*1+2=6 [T7] N.B. Gli indici di riga e di collonna partono da zero!!! NA L16 37
38 Un semplice esercizio Colleghiamo un tastierino a matrice 4x4 alla nostra demo-board Anxapic - Flow-Chart Main N Y Key_On è una variabile globale attivata nella routine di Interrupt dopo la decodifica del tasto La main function è abbastanza semplice. Il set del sistema e delle variabili permette di impostare il nibble basso di PORTB in scrittura e il nibble alto in lettura, inoltre vengono definite le variabili globali che possono essere modificate da tutte le funzioni del programma. Notiamo che quando viene mandato in uscita (su PortA) il codice del tasto premuto e il segnale su RA5, l interrupt su RB4..RB7 viene disabilitato in modo da non intercettare eventuali tasti premuti in questa fase. NA L16 38
39 Un semplice esercizio Colleghiamo un tastierino a matrice 4x4 alla nostra demo-board Anxapic - Flow-Chart routine Intr Quando viene premuto un tasto viene generato una condizione di interrupt opportunamente rilevato dal microcontrollore (naturalmente la condizione di interrupt, cambiamento del livello del segnale su RB4..RB7, è attivo). Una opportuna funzione (Decode tasto) determina l indice di riga e di colonna per il tasto premuto, il corrispondente valore viene immagazzinato nella variabile globale tasto. Viene anche abilitata la variabile globale key_on che abilita l invio del codice del tasto nella funzione main. NA L16 39
40 Un semplice esercizio Colleghiamo un tastierino a matrice 4x4 alla nostra demo-board Anxapic - Flow-Chart Decode tasto Per individuare il tasto premuto vengono portate sequenzialmente le colonne del tastierino a livello logico basso mediante l invio di opportune maschere sul nibble basso della portb. Esempio: 0xE = 1110 (RB0=0, RB1=1, RB2=1, RB3=1;... 0x7 = 0111 (RB0=1, RB1=1, RB2=1, RB3=0). Per ogni colonna a livello basso si vanno a scansionare le 4 righe. Ricordiamo che PortB ha abilitato il pull-up interno quindi, in fase di lettura, se nessun tasto è stato premuto il corrispondente valore letto è pari a 1111=0xF Quando il valore letto è diverso da 0xF ed è uguale al valore di una delle quattro maschere inviate significa che il tasto premuto è uguale al tasto con indice di colonna e indice di riga opportune. Inviato su col 0x0B (RB0=RB1=RB3=1, RB2=0) Letto su righe 0x0D (RB0=RB2=RB3=1, RB1=0) Indice di riga=1, Indice di colonna=2 NA L16 40
41 Un semplice esercizio Colleghiamo un tastierino a matrice 4x4 alla nostra demo-board Anxapic - Codice sorgente Il codice sorgente è abbastanza documentato e facilmente comprensibile. In questa fase tralasciamo riportiamo solo alcuni commenti che possano meglio delucidare quanto introdotto in quasta lezione. Definizione indirizzo registri per direzionalità e porte (PortB e PortA) Vengono passati gli indirizzi delle variabili rig e col La funzione get_key(...) ha come parametri due variabili puntatore a int8. In questo caso qualsiasi cambiamento al valore contenuto nella locazione di memoria indirizzata dalla variabile puntatore, modifica il valore della variabile originale. La funzione ritorna un int8 NA L16 41
42 Un semplice esercizio Colleghiamo un tastierino a matrice 4x4 alla nostra demo-board Anxapic - Codice sorgente Per individuare il tasto premuto vengono portate sequenzialmente le colonne del tastierino a livello logico basso mediante l invio di opportune maschere sul nibble basso della portb. Per ogni colonna a livello basso si vanno a scansionare le 4 righe. Ricordiamo che PortB ha abilitato il pull-up interno quindi, in fase di lettura, se nessun tasto è stato premuto il corrispondente valore letto è pari a 1111=0xF Quando il valore letto è diverso da 0xF ed è uguale al valore di una delle quattro maschere inviate significa che il tasto premuto è uguale al tasto con indice di colonna e indice di riga opportune. Esci e return TRUE (condizione vera) Maschere opportune In uscita maschera per mandare a livello basso icol I contenuti delle locazioni indirizzate dalle variabili puntatore vengono modificate con i nuovi valori degli indici di riga e di colonna Ristabilisco le condizioni iniziali per una nuova decodifica Ristabilisco le condizioni iniziali per una nuova decodifica Esci e return FALSE (condizione non vera) NA L16 42
43 Un semplice esercizio Colleghiamo un tastierino a matrice 4x4 alla nostra demo-board Anxapic - Codice sorgente Main function Part1 In queste righe iniziali della main function abbiamo tutte le impostazioni hardware del sistema (Pull-Up attivo su PortB, abilitazione oscillatore interno a 4 MHz, setup ADC, abilitazione interrupt su RB4..RB7, etc..). Il Pic Wizard Tool ha agevolato il nostro lavoro! Vengono anche definite i valori iniziali di alcune variabili globali (Es: key_on=false). Set frequenza oscillatore interno a 4 MHz NA L16 43
44 Un semplice esercizio Colleghiamo un tastierino a matrice 4x4 alla nostra demo-board Anxapic - Codice sorgente Main function Part2 Il codice è comprensibile e facile da seguire. Non merita necessari ulteriori commenti! Per una efficace comprensione di questo esercizio si consiglia di leggere e verificare (anche manualmente) le varie fasi di scrittura dei valori sulle colonne e lettura sulle righe Dedicateci un po del vostro tempo NA L16 44
45 Un semplice esercizio Colleghiamo un tastierino a matrice 4x4 alla nostra demo-board Anxapic - Codice sorgente Il file per l impostazione e definizioni del sistema Per Default il CCS Pic-C compiler impiega un solo byte per le variabili puntatore; questo significa che solo 256 locazioni della memoria disponibile (RAM) può essere indirizzata. Per componenti con disponibilità di maggior memoria per utilizzare variabili puntatore a 16 bit (2 byte) bisogna introdurre la seguente direttiva in testa al programma: #device *=16 Variabili puntatore a 16 bit Abilitazione oscillatore interno NA L16 45
Corso introduttivo sui microcontrollori. Un sistema tastierino a matrice 4x4 da collegare alla nostra demoboard AnxaPic.
Corso introduttivo sui microcontrollori Un sistema tastierino a matrice 4x4 da collegare alla nostra demoboard AnxaPic Nicola Amoroso namoroso@mrscuole.net na_16f88_key4x4 1 Colleghiamo un tastierino a
DettagliCorso introduttivo sui microcontrollori. Nicola Amoroso
Corso introduttivo sui microcontrollori Aggiungiamo un tastierino 4x4 a matrice alla nostra demoboard AnxaPic Nicola Amoroso namoroso@mrscuole.net na_anxapic_key4x4 1 Il sistema tastierino Per l'immissione
DettagliPuntatori. Obiettivi: Richiamare quanto noto sui puntatori dal modulo A Presentare l analogia tra puntatori e vettori e l aritmetica dei puntatori
Puntatori Obiettivi: Richiamare quanto noto sui puntatori dal modulo A Presentare l analogia tra puntatori e vettori e l aritmetica dei puntatori 1 Il puntatore Un tipo puntatore è un tipo scalare per
DettagliPuntatori. Obiettivi: Richiamare quanto noto sui puntatori dal modulo A Presentare l analogia tra puntatori e vettori e l aritmetica dei puntatori
Puntatori Obiettivi: Richiamare quanto noto sui puntatori dal modulo A Presentare l analogia tra puntatori e vettori e l aritmetica dei puntatori 1 Il puntatore Un tipo puntatore è un tipo scalare per
DettagliElementi lessicali. Lezione 4. La parole chiave. Elementi lessicali. Elementi lessicali e espressioni logiche. Linguaggi di Programmazione I
Lezione 4 Elementi lessicali e espressioni logiche Matricole 2-3 Elementi lessicali il linguaggio C ha un suo vocabolario di base i cui elementi sono detti token esistono 6 tipi di token: parole chiave
DettagliLinguaggio C: PUNTATORI
Linguaggio C: PUNTATORI I puntatori sono una delle più importanti caratteristiche del linguaggio C. Permettono di lavorare a basso livello, mantenendo flessibilità e praticità. Il C utilizza molto i puntatori
DettagliDati due punti sul piano calcolare la loro distanza
Introduzione al C Primo esempio in C Dati due punti sul piano calcolare la loro distanza Soluzione: la distanza fra due punti si calcola secondo il teorema di Pitagora, con la formula: y Distanza = (lato12
DettagliFunzioni, Stack e Visibilità delle Variabili in C
Funzioni, Stack e Visibilità delle Variabili in C Laboratorio di Programmazione I Corso di Laurea in Informatica A.A. 2018/2019 Argomenti del Corso Ogni lezione consta di una spiegazione assistita da slide,
DettagliLaboratorio di Informatica Ingegneria Clinica Lezione 14-16/11/2011
Laboratorio di Informatica Ingegneria Clinica Lezione 14-16/11/2011 Raffaele Nicolussi FUB - Fondazione Ugo Bordoni Via del Policlinico, 147 00161 Roma I puntatori Variabili e parametri Parametri formali
DettagliIl linguaggio C funzioni e puntatori
Salvatore Cuomo Il linguaggio C funzioni e puntatori Lezione n. 8 Parole chiave: Linguaggio C, procedure, funzioni. Corso di Laurea: Informatica Insegnamento: Programmazione II, modulo di Laboratorio Email
DettagliCalcolatori Elettronici T Ingegneria Informatica A3 - Gestione delle interruzioni
Calcolatori Elettronici T Ingegneria Informatica A3 - Gestione delle interruzioni Giovanni Bonaccio, Stefano Mattoccia Arduino Interrupt Nella scheda Arduino Uno sono presenti due tipologie diverse di
Dettagli4 GLI ARRAY E LE STRINGHE
13 4 GLI ARRAY E LE STRINGHE 4.1 Gli array monodimensionali Un array è un insieme di variabili dello stesso tipo, cui si fa riferimento mediante uno stesso nome. L accesso ad un determinato elemento si
DettagliCapitolo 11. Puntatori
1 Capitolo 11 Puntatori 2 Variabili puntatore Cerchiamo di capire come le informazioni sono memorizzate nella memoria del computer La memoria è un sequenza di byte Ogni byte è composto da 8 bit: Ogni byte
DettagliCorso di Informatica A.A
Corso di Informatica A.A. 2009-2010 Lezione 11 Corso di Informatica 2009-2010 Lezione 11 1 Utilizzo dei puntatori Funzioni Perche i Puntatori? I puntatori hanno tre importanti applicazioni: 1. Passaggio
DettagliArray e puntatori in C
Array e puntatori in C Diapositive adattate dalle omonime create dalla Dottoressa di Ricerca Giovanna Melideo per il corso di Laboratorio di Algoritmi e Strutture Dati 10/05/2005 LP2-04/05 - Appunti di
DettagliIntroduzione al linguaggio C
Linguaggio C Introduzione al linguaggio C Sistemi di sviluppo integrati Noti anche come IDE: Integrated Development Environment Un pacchetto software che permette di scrivere, preprocessare, compilare,
DettagliIntroduzione al linguaggio C Puntatori
Introduzione al linguaggio C Puntatori Violetta Lonati Università degli studi di Milano Dipartimento di Informatica Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica 19 ottobre 2017
DettagliPIEDINO NOME DESCRIZIONE
LCD ALFANUMERICO Il display LCD afanumerico è un dispositivo che consente di visualizzare su una matrice di righe e colonne uno o più caratteri contenenti lettere, numeri simboli. Ogni carattere è composto
DettagliC: panoramica. Violetta Lonati
C: panoramica Violetta Lonati Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica AA 2009/2010 Violetta Lonati
DettagliIl linguaggio C. Notate che...
Il linguaggio C Notate che... 1 Il C è un linguaggio a blocchi int main (void) { blocco } 2 Il C è un linguaggio a blocchi (2) Non è possibile mischiare dichiarazioni e comandi! int main (void) { } Dichiarazione
DettagliIntroduzione alla programmazione. Alice Pavarani
Introduzione alla programmazione Alice Pavarani Il linguaggio C Creato da Dennis Ritchie nel 1972 presso i Bell Laboratories Linguaggio di programmazione procedurale, strutturato Linguaggio ad alto livello
Dettagli#include <stdio.h> /* l esecuzione comincia dalla funzione main */ int main()
Primi passi Il mio primo programma #include /* l esecuzione comincia dalla funzione main */ int main() { printf( Hello World!\n" ); return 0; /* il programma termina con successo */ } /* fine
DettagliArchitettura del calcolatore (Seconda parte)
Architettura del calcolatore (Seconda parte) Ingegneria Meccanica e dei Materiali Università degli Studi di Brescia Prof. Massimiliano Giacomin LINGUAGGIO E ORGANIZZAZIONE DEL CALCOLATORE Linguaggio assembly
DettagliCorso di Informatica A.A
Corso di Informatica A.A. 2009-2010 Lezione 10 Lezione 10 1 Inside C : Puntatori Puntatori Referenziazione e Dereferenziazione Pointers: Puntatori Le variabili finora incontrate sono caratterizzate da
DettagliStrutture. Array dei nomi degli esami (MAX ESAMI è il massimo numero degli esami). Array con i crediti degli esami.
Consideriamo l esercizio assegnato la scorsa lezione per rappresentare il libretto di uno studente. Per memorizzare i dati si sono utilizzati tre array: char* nomiesami[max ESAMI] Array dei nomi degli
DettagliArray k-dimensionali
Informatica B a.a 2005/06 (Meccanici 4 squadra) Scaglione: da PO a ZZZZ PhD. Ing. Michele Folgheraiter Array k-dimensionali In C è possibile definire array con più dimensioni (ANSI C massimo k=12), per
DettagliVariabili e Funzioni. Informatica 1 / 19
Variabili e Funzioni Informatica 1 / 19 Programmi C e Un programma C e composto da funzioni e variabili Variabile: memorizza valori appartenenti ad un insieme di definizione (dipendente dal tipo) Funzione:
DettagliDIPARTIMENTO DI ELETTRONICA E INFORMAZIONE. Puntatori. Marco D. Santambrogio Ver. aggiornata al 20 Aprile 2016
Puntatori Marco D. Santambrogio marco.santambrogio@polimi.it Ver. aggiornata al 20 Aprile 2016 Come rappresento un pixel? Il pixel è Il colore Come ottengo il verde? Con il formato RGB R: 91 G: 191 B:
DettagliIl corpo di tutte le funzioni deve essere contenuto tra parentesi graffe
Primi passi Il mio primo programma #include /* l esecuzione comincia dalla funzione main */ int main() { printf( Hello World!\n" ); return 0; /* il programma termina con successo */ } /* fine
DettagliPuntatori. Fondamenti di Programmazione
Puntatori Fondamenti di Programmazione Funzioni utili stdio.h c = getchar(); restituisce un carattere letto da tastiera. Equivale a: scanf( %c, &c); putchar(c); scrive un carattere sullo schermo. Equivale
DettagliDIPARTIMENTO DI ELETTRONICA E INFORMAZIONE. Puntatori. Marco D. Santambrogio Ver. aggiornata al 11 Marzo 2014
Puntatori Marco D. Santambrogio marco.santambrogio@polimi.it Ver. aggiornata al 11 Marzo 2014 Immagini Struttura dati: typedef struct{ int R; int G; int B; } pixel pixel img[0][24]; Ma quanto è grossa
DettagliUniversità degli Studi di Milano
Università degli Studi di Milano Corso di Laurea in Sicurezza dei Sistemi e delle Reti Informatiche Lezione 3 Input/Output elementare. Operatori, espressioni e istruzioni FABIO SCOTTI Laboratorio di programmazione
DettagliCorso introduttivo sui microcontrollori A. S Programmare i PIC in C Richiami fondamentali sulla programmazione in C: le funzioni
Corso introduttivo sui microcontrollori A. S. 2007 2008 Programmare i PIC in C Nicola Amoroso namoroso@mrscuole.net NA L14 1 Il C viene in genere indicato come un linguaggio di medio livello perché unisce
DettagliLaboratorio di Programmazione 1. Docente: dr. Damiano Macedonio Lezione 19 14/04/2014
Laboratorio di Programmazione 1 1 Docente: dr. Damiano Macedonio Lezione 19 14/04/2014 Puntatori I puntatori sono tipi di dati che rappresentano la posizione (indirizzi di memoria) di elementi (oggetti)
Dettagli&v restituisce l indirizzo della zona di memoria allocata per v.
Puntatori Sia v una variabile di tipo T. Al momento della creazione della variabile v il sistema alloca memoria sufficiente a contenere i valori appartenenti al tipo T. &v restituisce l indirizzo della
DettagliArgomenti Avanzati.! I puntatori! Stack! Visibilità delle Variabili
Linguaggio C Argomenti Avanzati! I puntatori! Stack! Visibilità delle Variabili 2 ! Il C consente di associare ai tipi di dati nomi definiti dal programmatore, mediante la parola chiave typedef! Dal punto
DettagliTipi di dati strutturati e Linguaggio C. Record o strutture Il costruttore struct in C
Tipi di dati strutturati e Linguaggio C Record o strutture Il costruttore struct in C Dati strutturati Record Un record o struttura è una struttura dati ottenuta aggregando elementi di tipo diverso che
DettagliNicola Amoroso. Corso introduttivo sui microcontrollori PIC PWM.
Corso introduttivo sui microcontrollori PIC PWM Generare segnali PWM con il PIC16F877 Tecniche e consigli Nicola Amoroso namoroso@mrscuole.net na_pwm 1 uc Pic PWM Un segnale PWM (Pulse Width Modulation
DettagliPuntatore. Ritorniamo sul problema dell accesso alle variabili
Puntatori Puntatore Ritorniamo sul problema dell accesso alle variabili Nel linguaggio di von Neumann attraverso il loro indirizzo Nei linguaggi di alto livello attraverso il loro nome Però in taluni casi
DettagliLaboratorio di Informatica
-- Conversione di tipo in C (V) -- Laboratorio di Informatica Ingegneria Meccanica Lezione 7, 22 novembre 2007 versione 24 novembre 2007 Renato Menicocci
DettagliLinguaggio C - sezione dichiarativa: costanti e variabili
Dipartimento di Elettronica ed Informazione Politecnico di Milano Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani A.A. 2008/2009 Linguaggio C - sezione dichiarativa: costanti e variabili La presente
DettagliIntroduzione alla programmazione in linguaggio C
Introduzione alla programmazione in linguaggio C Il primo programma in C commento Header della libreria Funzione principale Ogni istruzione in C va terminata con un ; Corso di Informatica AA. 2007-2008
DettagliQuando è necessario elaborare una certa quantità di dati omogenei si possono usare variabili indicizzate: int a0, a1, a2;
Array Quando è necessario elaborare una certa quantità di dati omogenei si possono usare variabili indicizzate: int a0, a1, a2; Il C supporta questo uso attraverso il tipo di dati array (o vettore): int
DettagliIl linguaggio C. Puntatori e dintorni
Il linguaggio C Puntatori e dintorni 1 Puntatori : idea di base In C è possibile conoscere e denotare l indirizzo della cella di memoria in cui è memorizzata una variabile (il puntatore) es : int a = 50;
DettagliStruttura dei programmi e Variabili
Linguaggio C Struttura dei programmi e Variabili 1 La struttura generale dei programmi! Struttura del programma: Direttive Funzioni Dichiarazioni Istruzioni Di assegnamento direttive Di ingresso e uscita
DettagliIndirizzi e valori. Qualcuno afferma di avere bisogno di pane. Due possibili risposte: Fornisco l indirizzo di un panificio. Fornisco delle pagnotte
Puntatori Indirizzi e valori Qualcuno afferma di avere bisogno di pane Due possibili risposte: Fornisco delle pagnotte Fornisco l indirizzo di un panificio Passo un valore Passo un riferimento Indirizzi
DettagliLezione 6 Introduzione al C++ Mauro Piccolo
Lezione 6 Introduzione al C++ Mauro Piccolo piccolo@di.unito.it Linguaggi di programmazione Un linguaggio formale disegnato per descrivere la computazione Linguaggi ad alto livello C, C++, Pascal, Java,
DettagliDIPARTIMENTO DI ELETTRONICA E INFORMAZIONE. Puntatori. Marco D. Santambrogio Ver. aggiornata al 4 Aprile 2013
Puntatori Marco D. Santambrogio marco.santambrogio@polimi.it Ver. aggiornata al 4 Aprile 201 WAT? WAT Lab Troppi exe, ne volevo di meno Vacanze W A Giovedì 28, Venerdì 29 e Lunedì 1 ma anche Martedì 2
DettagliEsercitazione di Reti degli elaboratori
Esercitazione di Prof.ssa Chiara Petrioli Christian Cardia, Gabriele Saturni Cosa vedremo in questa lezione? Gli Array Gli array multidimensionali Le stringhe I puntatori Esercizi Pagina 1 Gli Array Definizione
DettagliLa comunicazione con l esterno
La comunicazione con l esterno Input / Output Le porte di I/O I Dati entrano Disp In Disp In Dispositivo di Ingresso Porta In Porta In Porte di Ingresso CPU Bus dati I Dati escono Porta Out Disp Out Porta
DettagliL AMBIENTE CODE BLOCKS E L IO
L AMBIENTE CODE BLOCKS E L IO Il primo programma in C++ #include using namespace std; main() { cout
DettagliCapitolo 12. Puntatori ed array
1 Capitolo 12 Puntatori ed array Introduzione 2 Il C permette di eseguire addizioni e sottrazioni con i puntatori Pertanto possiamo gestire gli array usando i puntatori al posto degli indici L interconnessione
DettagliFondamenti di Informatica
Strutture di dati Fondamenti di Informatica 11. Linguaggio C - Strutture / Tabelle / Puntatori Strutture /Tabelle Corso di Laurea in Ingegneria Informatica e dell Automazione A.A. 2012-2013 2 Semestre
DettagliSULL USO DEI CARATTERI. char x; si legge con ( %c,&x) e si stampa con ( %c,x) ma anche con ( %d,x) DUE ESEMPI
SULL USO DEI CARATTERI Ricordiamo che: int x; si legge con ( %d,&x) e si stampa con ( %d,x) float x; si legge con ( %f,&x) e si stampa con ( %f,x) double x;si legge con ( %lf,&x) e si stampa con ( %f,x)
DettagliINTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica
Fondamenti di Informatica INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA Fondamenti di Informatica - D. Talia - UNICAL 1 Fondamenti di Informatica - Programma Un programma è una formulazione
DettagliINTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - Programma
Fondamenti di Informatica INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA Fondamenti di Informatica - D. Talia - UNICAL 1 Fondamenti di Informatica - Programma Un programma è una formulazione
DettagliLe basi del linguaggio Java
Le basi del linguaggio Java Compilazione e interpretazione Quando si compila il codice sorgente scritto in Java, il compilatore genera il codice compilato, chiamato bytecode. È un codice generato per una
DettagliLaboratorio di Informatica I
Struttura della lezione Lezione : Elementi lessicali del C Vittorio Scarano Corso di Laurea in Informatica Elementi lessicali e token Costanti Identificatori Operatori operatori di incremento/decremento
DettagliUtilizza i tipi di dati comuni a tutto il framework.net Accesso nativo ai tipi.net (C# è nato con.net) Concetti fondamentali:
1 Tipi di dati 1 Tipi di dati Utilizza i tipi di dati comuni a tutto il framework.net Accesso nativo ai tipi.net (C# è nato con.net) Concetti fondamentali: Tutto è un oggetto Tutto eredita implicitamente
DettagliTipi derivati. Strutture Matrici typedef enum
Tipi derivati Strutture Matrici typedef enum Le strutture Una struttura, o struct, è un tipo di dato derivato che permette di aggregare un insieme di elementi, detti campi, all'interno di un unica entità
DettagliI puntatori. DD Cap.7 pp KP Cap.6 pp
I puntatori DD Cap.7 pp.245-280 KP Cap.6 pp.219-235 Cos è un puntatore Un puntatore è una variabile che assume come valore un indirizzo di memoria. Il nome di una variabile fa quindi riferimento ad un
DettagliPuntatori (in C) Emilio Di Giacomo
Puntatori (in C) Emilio Di Giacomo Puntatori In questa lezione parleremo di uno dei costrutti più potenti del C: i puntatori I puntatori vengono utilizzati per realizzare il passaggio di parametri per
DettagliProgrammazione C. Puntatori Array come puntatori
Programmazione C Puntatori Array come puntatori Perché usare gli indirizzi Tutto in C ha un valore int a = 4; significa che il valore della variabile a è 4, e che potrà essere modificato dal programma
DettagliFunzioni, Stack e Visibilità delle Variabili in C
Funzioni, Stack e Visibilità delle Variabili in C Programmazione I e Laboratorio Corso di Laurea in Informatica A.A. 2016/2017 Calendario delle lezioni Lez. 1 Lez. 2 Lez. 3 Lez. 4 Lez. 5 Lez. 6 Lez. 7
DettagliFlusso logico di un programma
Fondamenti di Informatica e Programmazione Elementi di Informatica e Progrmmazione prof. Massimiliano Redolfi massimiliano.redolfi@ing.unibs.it 2013/2014 Flusso logico di un programma prof. Massimiliano
DettagliStrutture. Una dichiarazione struct definisce un nuovo tipo. - Può essere seguita da una lista di variabili.
Strutture Una stuttura permette di aggregare variabili di tipo differente (a differenza degli array che rappresentano sequenze di variabili dello stesso tipo). Una dichiarazione di struttura ha la forma:
DettagliEsercizi. La funzione swapint() primo tentativo
Politecnico di Milano Esercizi Puntatori, struct con campi puntatore, puntatori a struct, rapporto tra array e puntatori. FUNZIONI Passaggio di parametri per indirizzo, passaggio di array. #include
DettagliStringhe e allocazione dinamica della memoria
Stringhe e allocazione dinamica della memoria Esercizio Scrivere un programma strings.c che legge da standard input una sequenza di parole separate da uno o più spazi, e stampa le parole lette, una per
DettagliAssociazione Variabile-Indirizzo
I puntatori Associazione Variabile-Indirizzo Tutte le volte che in un programma si dichiarano delle variabili, l'esecutore associa alla variabile un indirizzo. Es. Dato il programma #include
DettagliIntroduzione ai puntatori in C Definizione
Introduzione ai puntatori in C Definizione Un puntatore è una variabile che contiene l indirizzo di un altra variabile Tramite i puntatori si può quindi accedere a un oggetto indirettamente (si usa il
DettagliL AMBIENTE CODE BLOCKS E L IO
L AMBIENTE CODE BLOCKS E L IO Il primo programma #include main() { printf("ciao Mondo!"); } Il file deve essere salvato con estensione.c Il primo programma in C++ #include using
DettagliIntroduzione al linguaggio C Puntatori
Introduzione al linguaggio C Puntatori Violetta Lonati Università degli studi di Milano Dipartimento di Informatica Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica 19 ottobre 2016
DettagliProf. G. Ascia. I puntatori. Fondamenti di Informatica
I puntatori 1 Associazione Variabile-Indirizzo Tutte le volte che in un programma si dichiarano delle variabili, l'esecutore associa alla variabile un indirizzo. Es. Dato il programma #include
DettagliPuntatori e array. Violetta Lonati
Puntatori e array Violetta Lonati Università degli studi di Milano Dipartimento di Informatica Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica Violetta Lonati Puntatori e array
DettagliPrimi esempi di programmi. Il tipo int Le variabili Altri tipi interi Operatori di assegnazione
Primi esempi di programmi Il tipo int Le variabili Altri tipi interi Operatori di assegnazione Il tipo int Un int permette di trattare numeri interi 4 byte (32 bit) con la tecnica del complemento a 2 (ma
DettagliI Dati Strutturati ed il Linguaggio C
Corso di Laurea in Ingegneria Civile Politecnico di Bari Sede di Foggia Fondamenti di Informatica Anno Accademico 2011/2012 docente: Prof. Ing. Michele Salvemini Sommario Dati Strutturati Esigenze Vettori
DettagliFondamenti di Programmazione
A.A. 08/09 Fondamenti di Programmazione (canale E-O) Docente: Prof.ssa Tiziana Calamoneri calamo@di.uniroma1.it Esercitatore: Dott. Roberto Petroccia petroccia@di.uniroma1.it Pagina del corso: http://twiki.di.uniroma1.it/twiki/view/programmazione1/eo/webhome
DettagliNB: sono richieste almeno 4 risposte esatte per la correzione delle domande aperte
7 Lug 17 MATRICOLA COGNOME NOME PUNTEGGI PER LE VARIE DOMANDE: Domande aperte: A: 6, B: 9, C: 9 Scelta multipla: 1.5 punti per ogni risposta esatta DURANTE IL COMPITO E AMMESSO SOLO L USO DI STRUMENTI
DettagliElementi di Informatica A. A. 2016/2017
Elementi di Informatica A. A. 2016/2017 Ing. Nicola Amatucci Università degli studi di Napoli Federico II Scuola Politecnica e Delle Scienze di Base nicola.amatucci@unina.it Programmazione C++ Parte 2
DettagliALGORITMI E STRUTTURE DATI
Esercitazioni del corso di: ALGORITMI E STRUTTURE DATI Tutor: Francesca Piersigilli email: francesca.piersigilli@unicam.it Strutture dati elementari Tecniche di organizzazione dei dati: scelta della struttura
DettagliTipi di dato semplici
Tipi di dato semplici Perché dichiarare una variabile? 2 Una variabile rappresenta uno spazio di memoria centrale Prima dell esecuzione del programma deve essere chiaro quanto spazio serve al programma
DettagliCorso di Programmazione I
Corso di Programmazione I I puntatori in C e C++ I puntatori in C Il C prevede puntatori a funzione e puntatori a dati di qualsiasi natura, semplici o strutturati. In particolare il puntatore viene utilizzato
DettagliElementi di Base. Introduzione a Python.
Elementi di Base Introduzione a Python http://www.dia.uniroma3.it/~roselli/ roselli@dia.uniroma3.it Credits Materiale a cura del Prof. Franco Milicchio Panoramica Elementi di base della sintassi (struttura,
DettagliCostanti e Variabili
Parte 3 Costanti e Variabili Identificatori Un identificatore è un nome che viene associato a diverse entità (costanti, tipi, variabili, funzioni, ecc.) e serve ad identificare la particolare entità Gli
DettagliGESTIONE DELLE INTERRUZIONI (INTERRUPT)
GESTIONE DELLE INTERRUZIONI (INTERRUPT) In informatica, un interrupt o interruzione è: un segnale asincrono che indica il bisogno di attenzione da parte di una periferica finalizzata ad una particolare
DettagliParametri by reference. Funzioni. Passaggio dei parametri. Parametri by reference. Soluzione. Problemi
Funzioni Introduzione Operatori & e * Passaggio by reference Passaggio di vettori Esercizio strcpy 2 Passaggio dei parametri Il linguaggio C prevede il passaggio di parametri by value Il chiamato non può
DettagliDichiarazioni e tipi predefiniti nel linguaggio C
Politecnico di Milano Dichiarazioni e tipi predefiniti nel linguaggio C Variabili, costanti, tipi semplici, conversioni di tipo. Premessa Programmi provati sul compilatore Borland C++ 1.0 Altri compilatori:
DettagliCorso Programmazione
Corso Programmazione 2011-2012 (docente) Fabio Aiolli E-mail: aiolli@math.unipd.it Web: www.math.unipd.it/~aiolli Dipartimento di Matematica Pura ed Applicata Torre Archimede, Via Trieste 63 Puntatori,
DettagliC: primi elementi. Lezione 4
C: primi elementi Lezione 4 Evoluzione del BCPL (1967) e B (1970), entrambi typeless Sviluppato da Dennis Ritchie nel 1972 ed implementato per il PDP-11 Usato per lo sviluppo del sistema operativo UNIX
DettagliI Fondamenti del Linguaggio
Linguaggio C I Fondamenti del Linguaggio Linguaggio di Programmazione Linguaggio formale per la descrizione di programmi per calcolatori Sintassi vicina al linguaggio umano Se non ci fossero, bisognerebbe
DettagliCorso introduttivo sui microcontrollori A. S Programmare i PIC in linguaggio C. Il CCS PCWH Pic-C Compiler
Corso introduttivo sui microcontrollori A. S. 2007 2008 Il CCS PCWH Pic-C Compiler Il nostro primo esercizio: Blinking Led Nicola Amoroso namoroso@mrscuole.net NA L11 1 30 17 16 1 36 23 24 25 26 27 20
DettagliLezione 5 e 6. Fabio Scotti ( ) Laboratorio di programmazione per la sicurezza. Valentina Ciriani ( ) Laboratorio di programmazione
Lezione 5 e 6 - Concetto di blocco - Controllo del flusso di un programma - Costrutti per la scelta if e switch - Costrutti while e for - Operatori in C Fabio Scotti (2004-2009) Laboratorio di programmazione
DettagliI PUNTATORI PARTE I. Manuale linguaggio C
I PUNTATORI PARTE I Manuale linguaggio C I puntatori Una variabile è un'area di memoria alla quale è associato un nome simbolico, scelto dal programmatore. Tale area di memoria è grande quanto basta per
DettagliArchitettura del Calcolatore
Giuseppe Manco Lezione 3 17 Ottobre 2003 Architettura del calcolatore Il calcolatore è uno strumento programmabile per la rappresentazione, la memorizzazione e l elaborazione delle informazioni un calcolatore
Dettagli1 Operatori bit-a-bit (Rev )
1 Operatori bit-a-bit (Rev. 2.0.2) La più piccola quantità di informazione memorizzabile nella memoria di un computer è il bit. Il bit può assumere sono due valori di solito indicati con 1 e 0 anche se,
DettagliCorso di Fondamenti di Informatica Il sistema dei tipi in C++
Corso di Fondamenti di Informatica Il sistema dei tipi in C++ Anno Accademico Francesco Tortorella Struttura di un programma C++ // Programma semplice in C++ #include int main() { cout
DettagliQualsiasi programma in C++ segue lo schema: Variabili
Qualsiasi programma in C++ segue lo schema: #include // libreria che gestisce flusso di input e output using namespace std; // uso di librerie standard del C++ int main() { // dichiarazioni
Dettagli