Code von IAR-Compiler für GCC convertieren

OP #4713585
Lesenswert?

Hallo Leute,

ich würde gerne den Code aus der AtmelAplication Note (AVR444) im 
AtmelStudio mittels GCC-Compiler zum Laufen bekommen.

Könnte mir jemand für den folgenden Auszug aus dem Quelltext sagen, 
wordurch ich die IAR Befehle ersetzen muss?

Im Grunde geht es um die Zeilen:

  __eeprom unsigned static int restartAttempts;

sowie

__disable_interrupt();
  __watchdog_reset();

Danke euch




Vollständige Funktion:

static void ResetHandler(void)
{
  __eeprom unsigned static int restartAttempts;
  // Temporary variable to avoid unnecessary reading of volatile 
register MCUSR.
  unsigned char tempMCUSR;

  tempMCUSR = MCUSR;
  MCUSR = tempMCUSR & ~((1 << WDRF) | (1 << BORF) | (1 << EXTRF) | (1 << 
PORF));

  // Reset watchdog to avoid false stall detection before the motor has 
started.
  __disable_interrupt();
  __watchdog_reset();
  WDTCSR |= (1 << WDCE) | (1 << WDE);
  WDTCSR = 0x00;

  // Examine the reset source and take action.
  switch (tempMCUSR & ((1 << WDRF) | (1 << BORF) | (1 << EXTRF) | (1 << 
PORF)))
  {
  case (1 << WDRF):
    restartAttempts++;
    if (restartAttempts >= MAX_RESTART_ATTEMPTS)
    {
      // Do something here. E.g. wait for a button to be pressed.
      for (;;)
      {

      }
    }
(Firma: matzetronics) #4713589
Lesenswert?

Um dem Kompiler klarzumachen, das ein Byte im EEPROM landen soll, bzw, 
steht, geht in GCC sowas:
1
unsigned static int restartAttempts __attribute__((section(".eeprom"))) = 0;
Die Null am Ende kann dazu benutzt werden, um einmalig ins EEPROM 
geschrieben zu werden und landet im *.eep File des Projektes.
Das Schreiben ins EEPROM macht man bei der avrlibc mit den dafür 
vorgesehenen Funktionen.
Die Hilfe zu GCC gibt auch Tipps zur Portierung von IAR. Schau da mal 
rein.
OP #4713632
Lesenswert?

Danke Matthias,

mittlerweile hab ich es fast soweit. Probleme macht nur noch die ISR.

Habe an entprechnenden Stellen

#pragma vector=WDT_vect
__interrupt void WatchdogISR()

auskommentiert und durch z.B. ISR(WDT_vect) ersetzt.

Nur an der Stelle (ISR(ANALOG_COMPARATOR_ENABLE) meckert der Compiler 
noch mit der Meldung:

Error: expected identifier or '(' before 'void'


#ifdef ANALOG_COMPARATOR_ENABLE
//#pragma vector=ANA_COMP_vect
//__interrupt void OverCurrentISR()
ISR(ANALOG_COMPARATOR_ENABLE)
{
  DISABLE_DRIVING;
  for(;;)
  {
    ;
  }
}
#endif

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren