Даже не так. При применении _Pragma ("inline = forced") выдало warning что не может встроить мою функцию (которая с модификатором __monitor, внтури содержит _BIC_SR_IRQ(LPM3bits)).
Вот отрывок заголовочного файла power.h:
Код
#define INLINE _Pragma("inline = forced")
. . .
class PWR
{
public:
static void init(void);
static void off(void);
. . .
INLINE static inline __monitor void wakeUp(void)
{
_BIC_SR_IRQ(LPM3bits);
};
};
отрывок main.cpp:
Код
void OS::SystemTimerUserHook(void)
{
adc.read();
adc.start();
if(adc.reault[2] < 900)
{
PwrOffFlag.SignalISR();
}
else
{
wakeUp();
}
}
Код
OS_PROCESS void TPWRProc(void)
{
for(;;)
{
pwr.off();
}
}
Код
//-------------------------------------------
// Реакция на пропадание уровня питания
//-------------------------------------------
void PWR::off(void)
{
PowerOffFlag.Wait();
...
//Выключение переферии
...
BIS_SR(LPM3_bits +GIE);
}
Warning:[G004]: Could not inline function "PWR::wakeUp"
... на всякий случай, чтобы понятно было - у меня проект написан на С под msp430f449 без опреционной системы...я его переписываю с применением ОС(так как его очень трудно стало сопровождать, необходимы стали средства межпроцессоного взаимодействия, оптимизировать ресурсы и логику работы)..scmRTOS очень понравилась, перерписал почти все драйвера на ней,демку для проверки наваял все работает.. кроме power down.
Цитата(dxp @ Jan 16 2010, 16:47)

Исходя из вышесказанного, применять этот интринсик всегда нужно только в прерывании безотносительно к тому, используется ОС или нет. ОС - это обычная программа, на логику применения обсуждаемого интринсика это влияния оказывать не должно.
И к хуку IdleProcess'а все это отношения не имеет.
Естественно не имеет . я ведь написал выше что использую хук системного таймера .А он работает по прерыванию. Устройство выключается пользователем, отключается основное питание . Устройство должно выключить узлы периферии (которые потребляют очень много, ток несколько ампер может быть) на плате, узлы перифери процессора и перейти в режим power down и работу от литиевой батареии. при этом отсаются рабочими только прерывания... гарантированным включенным прерыванием на этот момент может только системный таймер ОС . Вот я его хук и пользую.