首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sbss2 2/sdata2 2的意义是什么?

sbss2 2/sdata2 2的意义是什么?
EN

Stack Overflow用户
提问于 2020-04-20 09:51:53
回答 2查看 1.5K关注 0票数 3

我正在使用GCC为基础的编译器使用PPC微控制器(e200z4 )。如果我们定义一个小于定义数的变量(我的情况是8),那么PPC支持小数据分配。我了解到:

  • sdata用于小的初始化数据,并且它是可修改的(将位于RAM部分)。
  • sbss与将位于RAM中的sdata相同,但它用于单变量或零变量。
  • 这2节仅由16位符号偏移量+基寄存器引用的一条指令访问。

我不知道的是,通过阅读PPC规范,sbss2sdata2的意义?它们是内存或闪存上的小变量吗?如果它们与sdatasbs不同

EN

回答 2

Stack Overflow用户

发布于 2020-04-20 10:12:55

来自EABI

外部变量是8个或更少字节的标量,其值可能被程序更改,且其值不会在程序之外更改,这些变量将作为.sdata或.sbss条目访问. 当对象文件不是共享对象文件的一部分时,将以.sdata2或.sbss2条目的形式访问外部变量,这些变量是8个或更少字节的标量,其值不能被程序更改,并且其值不会在程序之外更改。 特殊部分.sdata2用于保存初始化的只读小数据,这些数据有助于程序内存映像。但是,该节可用于保存可写数据。特殊部分.sbss2用于保存可写入的小数据,这些数据有助于程序内存映像,其初始值为0。

票数 1
EN

Stack Overflow用户

发布于 2020-04-21 22:44:35

我以前的e200项目就是这样设置的:

代码语言:javascript
复制
             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
         |          |
         +----------+
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61319596

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档