Gast
#180839
Hallo, ich beschäftige mich bei einem kleinen Projekt mit dem Thema Interrupts. Um erkennen zu können, ob ich offene Interruptquellen im System habe, habe ich mir ein Paket an Interrupthandlern zusammengeschrieben, welche jeden IRQ auf meiner MCU (ATmega169) abfangen und merken. Dass sich im Moment das System nach einem IRQ in einer Endlosschleife befindet, soll für meine Frage nebensächlich sein. Der angehängte Sourcecode sollte recht verständlich sein. Sobald ein IRQ auftritt, ruft die zugehörige ISR (SIGNAL(IRQ)) die einen dummyHandler mit der Interruptquelle als Parameter auf. Danach läuft das System in eine Endlosschleife und man kann sich in Ruhe den letzten IRQ mit einem Debugger anschauen. Soweit so gut. An der ganzen Sache sind mir zwei Sachen (unangenehm) aufgefallen: 1. avr-gcc meckert bei Compilieren über die an das SIGNAL()-Makro übergebenen Parameter (warning: `SIG_xxx' appears to be a misspelled signal handler) 2. Der Objektcode ist nahezu explodiert. Wenn ich o.g. Verfahren für alle Interrupts des ATmega169 einsetze, wächst der Code um ~1700Bytes: ohne isr.c: AVR Memory Usage: ----------------- Device: atmega169 Program: 462 bytes (2.8% Full) (.text + .data + .bootloader) Data: 42 bytes (4.1% Full) (.data + .bss + .noinit) mit isr.c: AVR Memory Usage: ----------------- Device: atmega169 Program: 2174 bytes (13.3% Full) (.text + .data + .bootloader) Data: 44 bytes (4.3% Full) (.data + .bss + .noinit) Ist das normal? Gibt es evtl. einen resourcenfreundlichen Weg, den ich bis jetzt noch nicht sehe? Gruß, z0ttel