避免在内存中创建多个代码副本

Jus*_*ago 5 c++ embedded memory-management

我是开发嵌入式系统的新手,并不习惯使用非常少的程序存储器(在这种情况下为16kB).我希望能够创建全局变量,数组和函数,我可以从程序中的任何位置访问,而只存在于内存中的一个位置.我目前的方法是使用静态类成员和方法,我可以通过简单地包含头文件(例如#include "spi.h")来使用.

对于我正在尝试做的事情,最好的方法是什么?

这是一个示例类.根据我的理解,_callbackcall().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_ */
Run Code Online (Sandbox Code Playgroud)

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();
}
Run Code Online (Sandbox Code Playgroud)

Pet*_*ker 10

您编写的类的数据成员和成员函数将仅在内存中定义一次.如果它们没有标记为静态,则成员函数仍将仅在内存中定义一次.对于您创建的每个对象,将在内存中创建一次非静态数据成员,因此,如果您只创建一个SPI对象,则只能获得其非静态数据成员的一个副本.简短版本:你正在解决一个非问题.