msalov 0 15 июля, 2009 Опубликовано 15 июля, 2009 · Жалоба наблюдаю интересное явление при оптимизации Low/None // 45 Alarm_On &= ~alarm_bit; BIC.B R10, &Alarm_On // 46 Alarm_Off &= ~alarm_bit; BIC.B R10, &Alarm_Off при medium/high // 45 Alarm_On &= ~alarm_bit; MOV.B R10, R14 XOR.B #0xff, R14 AND.B R14, &Alarm_On // 46 Alarm_Off &= ~alarm_bit; AND.B R14, &Alarm_Off Все задействованные переменные типа uint8_t. alarm_bit - локальная, две другие - глобальные. В чем подвох? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KARLSON 1 11 августа, 2011 Опубликовано 11 августа, 2011 · Жалоба Здравствуйте. У меня IAR 5.10.1. Есть переменная в INFO памяти #pragma location = 0x101A const unsigned char CS_A[] = {0x98}; Она может измениться. У компилятора включена оптимизация Medium. в условии if(SS == CS_A[]) в место адреса где взять значение компилятор берёт значение. Пробовал так: volatile unsigned char gg; gg = *(volatile unsigned char *)&CS_A[0]; if(SS == gg) НЕ ПОМОГАЕТ. Если объявить так: #pragma location = 0x101A const volatile unsigned char CS_A[] = {0x98}; То появляется предупреждение: Warning[Pa034]: initialized variable can not have __no_init attribute, discarded "Путь к файлу" И ошибка Error[be022]: location address not allowed for initialized variables (writable variables without the __no_init attribute) "Путь к файлу" Как же к адресу обратиться? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rezident 0 11 августа, 2011 Опубликовано 11 августа, 2011 · Жалоба 2 KARLSON. Вот там я приводил пример "обходного пути". Естественно компилятор выдает предупреждение типа Warning[w18]: Segment DATA16_AC (seg part no 4, symbol "MyParInit" in module "main", address [8000-8016]) overlaps segment DATA16_AN (seg part no 5, symbol "MyPar" in module "main", address [8000-8016]) В программе везде использую имя и адрес структуры MyPar, которая объявлена с аттрибутом __no_init. Поскольку компилятор не имеет информации о значениях элементов этой структуры, то вынужден каждый раз считывать их по адресу данной структуры. Способ не очень корректный, но работает. :laughing: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KARLSON 1 12 августа, 2011 Опубликовано 12 августа, 2011 · Жалоба Спасибо, работает))) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться