ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Вторник
23 июля
1239748
Constantin24 (15.09.2022 14:21 - 15:42, просмотров: 4778) Evgeny_CD
Каким образом на gcc при оптимизации -O2 переменная i = 1: 
void Test(void)
{
  /* __CACHE_REGION_SIZE are defined in the linker file */
  extern uint32_t __CACHE_REGION_SIZE[];
  uint32_t size       = (uint32_t)__CACHE_REGION_SIZE; // __CACHE_REGION_SIZE = 0
  uint32_t i          = 0;

  printf( "BEFORE: size=%i, i=%i\r\n", size, i );
  while ((size >> i) > 0x1U)
  {
      i++;
  }
  printf("AFTER: size=%i, i=%i\r\n", size, i );
}

Вывод:

BEFORE: size=0, i=0

AFTER: size=0, i=1


Дополнение 1:

__CACHE_REGION_SIZE объявлен в скрипте линкера таким образом:

__CACHE_REGION_SIZE = 0;