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 (;;)
{
}
}
Um dem Kompiler klarzumachen, das ein Byte im EEPROM landen soll, bzw, steht, geht in GCC sowas:
1 | |
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.
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
Gast
#4713643
Hans R. schrieb: > ISR(ANALOG_COMPARATOR_ENABLE) Da müßte ISR(ANALOG_COMP_vect) stehen, wenn ich nicht irre.
Ja, hast natürlich recht, danke
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.