Hallo Leute, der folgende Code arbeitet auf dem IAR-Compiler problemlos, wird aber anscheinend von dem avr-gcc nicht verstanden. IAAR: Char receiveed @ 15; gcc: #define received _SFR_IO8(0x15); Ist diese Aussage wirklich identisch? Eine Besonderheit des Tiny26 ist, das man dieses Register direkt auslesen muß und es nicht gepuffert wird. Bei den Präprozessordirektiven funktionieren anscheinend die folgenden Definitionen so einfach nicht. TIMER0_SEED0 hat immer den Wert 251, egal was ich für System_Clock und Baudrate einträge. #define USI_COUNTER_MAX_COUNT 16 #define USI_COUNTER_SEED_TRANSMIT (USI_COUNTER_MAX_COUNT - HALF_FRAME) #define INTERRUPT_STARTUP_DELAY (0x11 / TIMER_PRESCALER) #define TIMER0_SEED (256 - ( (SYSTEM_CLOCK / BAUDRATE) / TIMER_PRESCALER )) #if ( (( (SYSTEM_CLOCK / BAUDRATE) / TIMER_PRESCALER ) * 3/2) > (256 - INTERRUPT_STARTUP_DELAY) ) #define INITIAL_TIMER0_SEED ( 256 - (( (SYSTEM_CLOCK / BAUDRATE) / TIMER_PRESCALER ) * 1/2) ) #define USI_COUNTER_SEED_RECEIVE ( USI_COUNTER_MAX_COUNT - (START_BIT + DATA_BITS) ) #else #define INITIAL_TIMER0_SEED ( 256 - (( (SYSTEM_CLOCK / BAUDRATE) / TIMER_PRESCALER ) * 3/2) ) #define USI_COUNTER_SEED_RECEIVE (USI_COUNTER_MAX_COUNT - DATA_BITS) #endif #define UART_RX_BUFFER_MASK ( UART_RX_BUFFER_SIZE - 1 ) #if ( UART_RX_BUFFER_SIZE & UART_RX_BUFFER_MASK ) #error RX buffer size is not a power of 2 #endif Danke für Eure Hilfe !! Gruß
> Char receiveed @ 15; Keine Ahnung, was das beim IAR macht. > #define received _SFR_IO8(0x15); Ich denke, daß Du zumindest 15 vs. 0x15 vermasselt hast. Warum muß man das eigentlich so umständlich machen, warum kannst Du nicht einfach USIDR benutzen, wie's in der Headerdatei deklariert ist? > Eine Besonderheit des Tiny26 ist, das man dieses Register direkt > auslesen muß und es nicht gepuffert wird. Das ist dem Compiler doch aber wurscht. > #define INTERRUPT_STARTUP_DELAY ... Das mußt Du vermutlich anpassen. Sieht mir so aus, als hätte da jemand den Overhead des Prologs der ISR manuell ausgezählt und hinterlegt. Die anderen #defines sind erstens so gruselig umgebrochen, daß man sie nicht mehr durch den CPP ziehen kann, außerdem fehlt die Hälfte. Bedenke, daß Du u. U. die Konstanten als unsigned long deklarieren mußt (...UL), damit die Präprozessorarithmetik wie gewünscht funktioniert.
Hallo Jörg, erstmal Danke für Deine Antwort und Deine Hilfe! Sobald ich hier meine geätzte Platine durchgemessen habe, gebe ich mich an Deine Vorschläge. Wer das so verbockt hat? Leute, die den IAR auswendig kenne und meinten die Appnote 307 zu schreiben. Mein Versuch USIDR zu benutzen half leider nicht. Warscheinlich darf ich den ganzen Kram selbst neu "verbrechen", damit funktioniert. ist mir bei dem LCD und dem Interrupt Beispielen auch so gegangen. Der meiste App Code funktioniert leider nichtmal mit dem IAR auf dem tiny26. Viele Sachen dürfen anscheinend nicht umkopiert werden. Meld mich, sobald ich wieder ein paar Schritte weiter bin Danke Marcus
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.