Перейти к содержанию
    

Неинициализируемая область ОЗУ .noinit. Keil 5. Решено.

Создаю свой скаттер с областью ОЗУ которая не будет забиваться нулями.

 

LR_IROM1 0x08000000 0x00100000  {    ; load region size_region
  ER_IROM1 0x08000000 0x00100000  {  ; load address = execution address
   *.o (RESET, +First)
   *(InRoot$$Sections)
   .ANY (+RO)
  }
  RW_IRAM1 0x20000000 UNINIT 0x0000020  { ;no init section
  *(.noinit )}
  RW_IRAM2 0x20000020 0x18000-20  {  ; RW data
   .ANY (+RW +ZI)
  }
}

Смотрю MAP файл:

    Execution Region RW_IRAM1 (Base: 0x20000000, Size: 0x00000008, Max: 0x00000020, ABSOLUTE, UNINIT)

    Base Addr    Size         Type   Attr      Idx    E Section Name        Object

    0x20000000   0x00000008   Zero   RW           19    .noinit             main.o


    Execution Region RW_IRAM2 (Base: 0x20000020, Size: 0x00002030, Max: 0x00017fec, ABSOLUTE)

Пишу проверочный код:

static long long int s_val __attribute__ ((section (".noinit")));

	printf ("Fist: %02llX: \r", s_val);	//
	s_val = 0x223456789ABCDEF;
	printf ("Second: %02llX: \r", s_val);//

И нифига не работает:

Quote

Fist: 00: 
Second: 223456789ABCDEF: 

По прежнему переменная обнуляется. Потому что:

Quote

When using Arm Compiler 5, add the zero_init attribute to the variable in order to prevent the optimization. This keeps the variable as ZI data which will not be initialized.

Нужно так:

Quote

static long long int s_val __attribute__ ((section (".noinit"),zero_init));

И получатся:

Quote

Fist: 223456789ABCDEF: 
Second: 223456789ABCDEF: 

Потому что аттрибут zero_init имеет нелогичное название. Чтобы секция НЕ забивалась нулями, нужно пользовать zero_init. А не какой - нибудь ...no_init. Может кому пригодится.

Изменено пользователем Димон Безпарольный

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...