Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Глюк оптимизатора ИАР МСП в.3.30а
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > MSP430
VAI
Нашел ошибку оптимизатора при установленой оптимизации "Function inlining"
Пример и как обойти.
Чтоб не загружать топик все написал во вложеном файле.
ig_z
И еще один баг
Пример на базе исходников scmRTOS

Имеем классы

Код
class TCritSec
{
public:
   TCritSec () : StatusReg(__get_interrupt_state()) { __disable_interrupt(); }
   ~TCritSec() { __set_interrupt_state(StatusReg); }

private:
   istate_t StatusReg;
};


   class TEventFlag
   {
       enum TValue { efOn = 1, efOff= 0 }; // prefix 'ef' means: "Event Flag"

   public:
       void Clear() { TCritSec cs; Value = efOff; }

   private:
       TValue Value;
   };


TEventFlag evFlag1;
TEventFlag evFlag2;


Если в встречаются две критические секции подряд, то оптимизатор соершенно справедливо пытается их объединить.

evFlag1.Clear();
evFlag2.Clear();

Но подавив деструктор cs в evFlag1, оптимизатор забывает подавить контруктор cs в evFlag2.
В результате прерывания гарантированно запрещены после evFlag2.Clear();
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.