In embedded, c'è qualche differenza tra un driver di dispositivo e una libreria?

2

Assumendo una piattaforma senza modalità kernel, come Atmel AVR, c'è qualche differenza tra un driver di dispositivo e una libreria, dato che tutto è comunque la modalità utente?

Chiedo perché sto pensando a come voglio stratificare il mio codice. È così:

+----------------+
| Business logic |
+----------------+
|   CAN library  |
+----------------+
| MCP2515 driver |
+----------------+
|   SPI driver   |
+----------------+

Il "driver" SPI ha un gestore di interrupt e parla direttamente con la periferica SPI del microcontrollore, che suona come un driver, ma a parte questo, non vedo come sia diverso per esempio, la libreria CAN, che ha funzioni di alto livello come "invia questo messaggio".

    
posta Dan Ellis 17.08.2013 - 08:05
fonte

2 risposte

2

La principale differenza tra un driver di dispositivo e una libreria è che lo scopo di un driver di dispositivo è controllare alcuni componenti hardware.

I driver di dispositivo possono controllare direttamente i pin I / O del processore (come probabilmente accade nel driver SPI nell'esempio), oppure possono utilizzare i servizi di un driver di dispositivo di livello inferiore per comunicare su un canale di comunicazione con il loro dispositivo (come il driver MCP2515).

Ciò che distingue quest'ultimo tipo di driver di dispositivo da una libreria che implementa un protocollo di comunicazione è che il partner di comunicazione è un chip hardware che può eseguire solo alcune funzioni dedicate e che il protocollo di comunicazione è molto basso.

    
risposta data 17.08.2013 - 10:59
fonte
0

Se si sta programmando per un microcontroller come AVR, qualunque cosa si sta per scrivere in un compilatore è un codice di applicazione. Molto probabilmente, non ci sarà nessun tipo di astrazione come Kernel Mode / User Mode. L'intero codice è un firmware.

Riguardo al layering, devo dire, se stai codificando in C, basta fare diversi file C. Utilizza un'ampia quantità di variabili statiche, volatili, esterne per la comunicazione tra i tuoi moduli. Ti sto dirigendo verso un sistema basato sulla bandiera.

Ad esempio, spi.c - > può contenere l'inizializzazione del modulo di comunicazione spi e comandi spi di lettura / scrittura mcp2515.c - > inizializza il tuo controller CAN e tutte le specifiche di cui potresti aver bisogno can.c - > Libreria di applicazioni CAN

ISR per la ricezione dei dati su SPI. Nel tuo ISR spi, imposta solo le bandiere. Nel tuo ciclo while (1), continua a interrogarli.

Spero che questo porti l'intero scenario a un livello di chiarezza.

    
risposta data 28.04.2014 - 13:09
fonte

Leggi altre domande sui tag