我正在使用GCC为基础的编译器使用PPC微控制器(e200z4 )。如果我们定义一个小于定义数的变量(我的情况是8),那么PPC支持小数据分配。我了解到:
我不知道的是,通过阅读PPC规范,sbss2和sdata2的意义?它们是内存或闪存上的小变量吗?如果它们与sdata和sbs不同
发布于 2020-04-20 10:12:55
来自EABI
外部变量是8个或更少字节的标量,其值可能被程序更改,且其值不会在程序之外更改,这些变量将作为.sdata或.sbss条目访问. 当对象文件不是共享对象文件的一部分时,将以.sdata2或.sbss2条目的形式访问外部变量,这些变量是8个或更少字节的标量,其值不能被程序更改,并且其值不会在程序之外更改。 特殊部分.sdata2用于保存初始化的只读小数据,这些数据有助于程序内存映像。但是,该节可用于保存可写数据。特殊部分.sbss2用于保存可写入的小数据,这些数据有助于程序内存映像,其初始值为0。
发布于 2020-04-21 22:44:35
我以前的e200项目就是这样设置的:
ROM
+----------+
| |
| .text | code
| |
- +----------+
^ | |
| | .sdata2 | constant small initialized data (max 32k)
| | |
max 64k +----------+ <~~ _SDA2_BASE_ (r2)
| | |
| | .sbss2 | constant small not (or zero) initialized data (max 32k)
v | | ALWAYS EMPTY!
- +----------+
RAM
+----------+
| |
| .data | normal initialized data
| |
- +----------+
^ | |
| | .sdata | normal small initialized data (max 32k)
| | |
max 64k +----------+ <~~ _SDA_BASE_ (r13)
| | |
| | .sbss | normal small not (or zero) initialized data (max 32k)
v | |
- +----------+
| |
| .bss | normal not (or zero) initialized data
| |
+----------+https://stackoverflow.com/questions/61319596
复制相似问题