- Messaggi: 65
- Ringraziamenti ricevuti 0
Puntatore a Funzione
6 Anni 8 Mesi fa #1
da giannic
Puntatore a Funzione è stato creato da giannic
Salve a tutti,
io ho un puntatore a funzione di una libreria che mi va a scrivere su un display grafico SPI.
void (* pfWriteM8_A1) (U8 * pData, int NumItems);
da qui sono partito con una funzione che ha come prototipo
void scriviM_a1(unsigned char * pParametroM, int NumItems);
poi assegno il puntatore a funzione alla mia funzione
pfWriteM8_A1 = scriviM_a1;
per ultimo implemento la mia funzione per scrivere su SPI e fino a questo punto tutto ok.
Poi mi e' venuto in mente di migliorare il tutto usando il DMA (ovviamente non nel caso del 18f4550) ma come semplice idea per atra famiglia di pic
il problema che mi trovo adesso e' il fatto che essendo che il modulo dma richiede un indirizzo sorgente e uno di destinazione (oltre alla quantita di dati da passare alla volta e all evento per il trasferimento) io non riesco a capire come faccio a dargli l indirizzo di sorgente perche' non ho a disposizione un array[] p cose da puntare mentre per la destinazione del dma posso usare &SPIBUF.i blocchi dati da trasferire sono di 500 byte alla volta e il display e' un 320x240.
Qualcuno mi puo' spiegare come faccio con l indirizzo sorgente ?
io ho un puntatore a funzione di una libreria che mi va a scrivere su un display grafico SPI.
void (* pfWriteM8_A1) (U8 * pData, int NumItems);
da qui sono partito con una funzione che ha come prototipo
void scriviM_a1(unsigned char * pParametroM, int NumItems);
poi assegno il puntatore a funzione alla mia funzione
pfWriteM8_A1 = scriviM_a1;
per ultimo implemento la mia funzione per scrivere su SPI e fino a questo punto tutto ok.
Poi mi e' venuto in mente di migliorare il tutto usando il DMA (ovviamente non nel caso del 18f4550) ma come semplice idea per atra famiglia di pic
il problema che mi trovo adesso e' il fatto che essendo che il modulo dma richiede un indirizzo sorgente e uno di destinazione (oltre alla quantita di dati da passare alla volta e all evento per il trasferimento) io non riesco a capire come faccio a dargli l indirizzo di sorgente perche' non ho a disposizione un array[] p cose da puntare mentre per la destinazione del dma posso usare &SPIBUF.i blocchi dati da trasferire sono di 500 byte alla volta e il display e' un 320x240.
Qualcuno mi puo' spiegare come faccio con l indirizzo sorgente ?
Si prega Accedi o Crea un account a partecipare alla conversazione.
- giannic
- Autore della discussione
- Senior Member
Riduci
Di più
6 Anni 6 Mesi fa #2
da Mauro Laurenti
Risposta da Mauro Laurenti al topic Puntatore a Funzione
Come hai risolto il problema?
Saluti,
Mauro
Saluti,
Mauro
Si prega Accedi o Crea un account a partecipare alla conversazione.
6 Anni 6 Mesi fa #3
da giannic
Risposta da giannic al topic Puntatore a Funzione
Mauro ho semplicemente creato un buffer nella funzione dove punta il puntatore a funzione e ci ho riversato il blocco di dati(circa 500 byte alla volta) e poi da qui ho configurato il dma dando come indirizzo di sorgente dati il buffer creato.
Praticamente ho fatto un passaggio intermedio ....
Praticamente ho fatto un passaggio intermedio ....
Si prega Accedi o Crea un account a partecipare alla conversazione.
- giannic
- Autore della discussione
- Senior Member
Riduci
Di più
- Messaggi: 65
- Ringraziamenti ricevuti 0
6 Anni 6 Mesi fa #4
da Mauro Laurenti
Risposta da Mauro Laurenti al topic Puntatore a Funzione
Bene, la soluzione sembra comunque pulita.
In generale, ma questo dipende dal particolare DMA, puoi traferire anche dati (n byte) da un modulo ad un altro, fornendo l'indirizzo di partenza e di arrivo, non necessariamente array.
Quando arriva un trigger il DMA sposta da A a B.
Le funzioni offerte dal DMA cambiano da MCU a MCU.
Saluti,
Mauro
In generale, ma questo dipende dal particolare DMA, puoi traferire anche dati (n byte) da un modulo ad un altro, fornendo l'indirizzo di partenza e di arrivo, non necessariamente array.
Quando arriva un trigger il DMA sposta da A a B.
Le funzioni offerte dal DMA cambiano da MCU a MCU.
Saluti,
Mauro
Si prega Accedi o Crea un account a partecipare alla conversazione.
6 Anni 6 Mesi fa #5
da giannic
Risposta da giannic al topic Puntatore a Funzione
Hai ragione Mauro però io ho il problema che io non ho la disponibilità del sorgente della libreria ...
Posso solo accedere al puntatore a funzione e non saprei come indirizzare direttamente il dma come indirizzo di source
Ggrrrr...
Posso solo accedere al puntatore a funzione e non saprei come indirizzare direttamente il dma come indirizzo di source
Ggrrrr...
Si prega Accedi o Crea un account a partecipare alla conversazione.
- giannic
- Autore della discussione
- Senior Member
Riduci
Di più
- Messaggi: 65
- Ringraziamenti ricevuti 0
Moderatori: Mauro Laurenti, Pinna, StefA, Matteo Garia
Registrati al sito
Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.