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