请问在使用CCRX编译器时如何在自定义段中定义带初始值的全局变量?

代码1:

int a = 5;

这样写,a的地址在RAM中的R段,同时在ROM中的D段放一个初始值。

代码2:

#pragma section my_section

int a = 5;

#prgma section

这样写,a的地址变成了ROM中的Dmy_section段并且R段中没有a的空间。

请正确定义带初始值的全局变量的方法是什么?问如何使D⇒R拷贝机制作用在自定义段中的变量上?
还是说这种情况只能定义不带初始值的变量放进B段然后再定义一个C段的const然后自己copy?

Parents Reply
  • 我想知道的是CPU是如何处理的。也就是您所说的“编译器自动处理”是生成了什么样的代码来处理的。因为我的实验结果就是没有初始值。

    #pragma section My_RAM1
    unsigned char hh1 = 0x88;
    #pragma section

    void main(void)
    {
      hh1 = 0x99; // 此处设断点
      while (1);
    }

    上面的代码,断点处通过Watch窗口,可见hh1初始值是0x88。继续运行程序使hh1变为0x99。然后reset CPU重新运行。断点处通过Watch窗口,可见hh1的值是0x99而不是初始值0x88。

Children