Sono nuovo nello sviluppo su sistemi embedded e non sono abituato ad avere pochissima memoria di programma (16kB in questo caso) con cui giocare. Mi piacerebbe essere in grado di creare variabili globali, array e funzioni a cui posso accedere da qualsiasi punto del programma mentre esiste solo in una posizione in memoria. Il mio attuale approccio è quello di utilizzare membri di classi e metodi statici che posso utilizzare semplicemente includendo il file di intestazione (ad esempio #include "spi.h"
).Evita di creare più copie di codice nella memoria
Qual è l'approccio migliore per ciò che sto cercando di fare?
Ecco un esempio di classe. Da quanto ho capito, variabili come _callback
e definizioni di funzioni come call()
in .cpp verranno visualizzate solo in spi.o, quindi verranno visualizzate solo una volta in memoria, ma potrei essere confuso.
spi.h:
#ifndef SPI_H_
#define SPI_H_
#include "msp430g2553.h"
class SPI {
public:
typedef void (*voidCallback)(void);
static voidCallback _callback;
static char largeArray[1000];
static __interrupt void USCIA0TX_ISR();
static void call();
static void configure();
static void transmitByte(unsigned char byte, voidCallback callback);
};
#endif /* SPI_H_ */
spi.cpp:
#include "spi.h"
SPI::voidCallback SPI::_callback = 0;
char SPI::largeArray[] = /* data */ ;
void SPI::configure() {
UCA0MCTL = 0;
UCA0CTL1 &= ~UCSWRST;
IE2 |= UCA0TXIE;
}
void SPI::transmitByte(unsigned char byte, voidCallback callback) {
_callback = callback;
UCA0TXBUF = byte;
}
void SPI::call() {
SPI::_callback();
}
#pragma vector=USCIAB0TX_VECTOR
__interrupt void SPI::USCIA0TX_ISR()
{
volatile unsigned int i;
while (UCA0STAT & UCBUSY);
SPI::call();
}
per includere semplicemente l'intestazione e iniziare a utilizzare lo "SPI", basta usare [modello Singleton] (http://stackoverflow.com/questions/1008019/c-singleton-design-pattern), è un elemento comune incorporato che si ha una periferica e un solo oggetto per gestire l'hardware, non più oggetti consentiti. , inoltre è possibile utilizzare [factory pattern] (http://stackoverflow.com/questions/5120768/how-to-implement-the-factory-pattern-in-c-correctly) per consentire ad esempio un certo numero di oggetti (Canali SPI) – Abdurahman