【发布时间】:2013-06-13 22:32:37
【问题描述】:
我是嵌入式系统开发的新手,不习惯使用很少的程序内存(在本例中为 16kB)。我希望能够创建全局变量、数组和函数,我可以从程序中的任何位置访问它们,而 只存在于内存中的一个地方。我目前的方法是使用静态类成员和方法,只需包含头文件即可使用(例如#include "spi.h")。
对于我正在尝试做的事情,最好的方法是什么?
这是一个示例类。据我了解,.cpp中_callback之类的变量和call()之类的函数定义只会出现在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,在嵌入式系统中很常见的是你有一个外围设备,只有一个对象来处理硬件,不允许更多对象。 ,您也可以使用factory pattern 来允许例如一定数量的对象(SPI 通道)
标签: c++ memory-management embedded