Какое значение имеет sbss2 / sdata2? - PullRequest
3 голосов
/ 20 апреля 2020

Я работаю с микроконтроллером PP C (в частности, e200z4) с использованием компилятора на базе G CC. PP C EABI поддерживает небольшое распределение данных, если мы определяем переменную, размер которой меньше определенного числа (мой случай 8). Я понимаю, что:

  • sdata предназначен для небольших инициализированных данных и может быть изменен (будет находиться в разделе RAM).
  • sbss - это то же самое, что sdata, который будет находиться в RAM , но это для унитарной или нулевой переменной.
  • эти 2 раздела - это доступ только одной инструкцией, на которую ссылается 16-битное смещение со знаком + базовый регистр.

Что я не знаю Значит ли это значение sbss2 и sdata2 , прочитав спецификацию PP C EABI? Будут ли они небольшими переменными в ОЗУ или Fla sh и если они отличаются от sdata и sbss ?

Ответы [ 2 ]

1 голос
/ 22 апреля 2020

Мои предыдущие проекты 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
         |          |
         +----------+
1 голос
/ 20 апреля 2020

Из EABI

Внешние переменные, которые являются скалярами из 8 или менее байтов, значения которых могут быть изменены программой, и значения которых не будут изменены вне программа должна быть доступна как записи .sdata или .sbss ...

Когда объектный файл не должен быть частью общего объектного файла, внешние переменные, которые являются скалярами из 8 или менее байтов, чьи значения не может быть изменено программой, и значения которой не будут изменены вне программы, должны быть доступны как записи .sdata2 или .sbss2 ...

Специальный раздел .sdata2 предназначен для хранения инициализированных только небольшие данные, которые вносят вклад в образ памяти программы. Раздел может, однако, использоваться для хранения доступных для записи данных. Специальный раздел .sbss2 предназначен для хранения доступных для записи небольших данных, которые вносят вклад в образ памяти программы и чьи начальные значения равны 0.

...