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

оптимизация в EW430 4.20

наблюдаю интересное явление

 

 

при оптимизации 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 - локальная, две другие - глобальные. В чем подвох?

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


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

Здравствуйте. У меня 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) "Путь к файлу"

 

Как же к адресу обратиться?

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


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

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:

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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