Я новичок в разработке встроенных систем и не использую очень маленькую программную память (в данном случае 16 КБ). Я хотел бы иметь возможность создавать глобальные переменные, массивы и функции, к которым я могу получить доступ из любой точки программы, тогда как существует только в одном месте в памяти. Мой текущий подход заключается в использовании статических членов класса и методов, которые я могу использовать, просто включив заголовочный файл (например, #include "spi.h"
).Избегайте создания нескольких копий кода в памяти
Каков наилучший подход к тому, что я пытаюсь сделать?
Вот пример класса. Из того, что я понимаю, такие переменные, как _callback
и определения функций, такие как call()
в .cpp, будут отображаться только в spi.o, поэтому они появятся только один раз в памяти, но я могу быть замешан.
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();
}
, чтобы просто включить заголовок и начать использовать «SPI», просто используйте [Singleton pattern] (http://stackoverflow.com/questions/1008019/c-singleton-design-pattern), во встроенных встроено то, что у вас есть одно периферийное устройство и только один объект для работы с оборудованием, но больше не допускается использование объектов. , также вы можете использовать [заводской шаблон] (http://stackoverflow.com/questions/5120768/how-to-implement-the-factory-pattern-in-c-correctly), чтобы можно было, например, указать определенное количество объектов (SPI) – Abdurahman