Димон Безпарольный 2 8 февраля, 2021 Опубликовано 8 февраля, 2021 (изменено) · Жалоба Создаю свой скаттер с областью ОЗУ которая не будет забиваться нулями. 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. Может кому пригодится. Изменено 8 февраля, 2021 пользователем Димон Безпарольный 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться