ARM C++ - 如何将常量成员放入闪存中?

wal*_*mis 5 c++ embedded constants

我有这个代码

class IO {
 public:       
    IO(LPC_GPIO_TypeDef* port, int pin) : _pin(pin), _port(port) {};        

    const int _pin;
    LPC_GPIO_TypeDef* const _port;


    void test() {
        LPC_GPIO0->FIOSET = 0;
    }

};

IO led1(LPC_GPIO0, 5);

int main() {
    led1.test();

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

当我编译它时,我得到

text       data     bss     dec     hex  filename
656        0          8     664     298  lpc17xx
Run Code Online (Sandbox Code Playgroud)

我希望 const _port 和 _pin 变量存储在闪存中,因为它们被标记为 const 并且初始化值在编译时是已知的,但它们在 .bss 部分中分配。有没有办法让它们驻留在闪存中?

编辑:我试过这个:

struct IO {

    LPC_GPIO_TypeDef* port;
    int pin;

    void test() const {
        //_port->FIOSET = _pin;

        LPC_GPIO0->FIOSET = 0;
    }

};

const IO led1 = {LPC_GPIO0, 5};

text       data     bss     dec     hex filename
520        0          0     520     208 lpc17xx
Run Code Online (Sandbox Code Playgroud)

似乎可以解决问题。为什么它不适用于类?

dor*_*ron 0

我想你会发现确实如此。该data部分是空的,这可能意味着您的常量存储在该text部分中。文本部分是只读的,并且很可能驻留在就地执行 NOR ROM 中,具体取决于 ROM 映像的构建和运行方式。(bss 部分不算在内,因为它本身不包含任何数据,而是告诉加载器 0 个初始化变量需要多少额外内存。)