0

MCUCSR レジスタを読み取り、PORF、EXTRF、WDRF の 3 ビットからアラームを生成するコードを次に示します。これは些細なことだと思っていましたが、うまくいきません。

何か案が?

static uint8_t mcucsr __attribute__ ((section (".noinit")));

static volatile union
{
  struct
  {
    uint32_t watchdog:1;
    uint32_t powerfail:1;
    uint32_t reset:1;
    uint32_t startup:1;
  } b;
  uint32_t w;
} __attribute__ ((packed)) alarms;


static void wdinit ()
{
  mcucsr = MCUCSR;
  MCUCSR &= ~(1 << PORF);
  MCUCSR &= ~(1 << EXTRF);
  MCUCSR &= ~(1 << WDRF);
} __attribute__((naked)) __attribute__ ((section (".init3")))


int main ()
{
  alarms.b.startup = true;
  alarms.b.powerfail |= !!(mcucsr & (1 << PORF));
  alarms.b.reset     |= !!(mcucsr & (1 << EXTRF));
  alarms.b.watchdog  |= !!(mcucsr & (1 << WDRF));
  mcucsr = 0;
  ...
4

0 に答える 0