Hallo,
ich habe gerade was herausgefunden. Wenn ich die Defines der IO's tausche von
zuCode:#define RelaisStrobe0 PORTB = ~(~PORTB | (1<<PB0)) #define RelaisStrobe1 PORTB = (PORTB | (1<<PB0)) #define RelaisData0 PORTB = ~(~PORTB | (1<<PB1)) #define RelaisData1 PORTB = (PORTB | (1<<PB1)) #define RelaisCLK0 PORTB = ~(~PORTB | (1<<PB2)) #define RelaisCLK1 PORTB = (PORTB | (1<<PB2)) #define PowerLED1_0 PORTB = ~(~PORTB | (1<<PB3)) // rot #define PowerLED1_1 PORTB = (PORTB | (1<<PB3)) #define PowerLED2_0 PORTB = ~(~PORTB | (1<<PB4)) // grün #define PowerLED2_1 PORTB = (PORTB | (1<<PB4))
spart mir das fast 10% Platz im AVR. Ist dies eventuell auch mit den Variablen möglich? Kann man z.B. Eine Variable in C direkt an ein Register binden und dann auch solche Optimierungen mit cbr und sbr durchführen:Code:#define RelaisStrobe0 asm volatile ("cbi 0x18, 0") #define RelaisStrobe1 asm volatile ("sbi 0x18, 0") #define RelaisData0 asm volatile ("cbi 0x18, 1") #define RelaisData1 asm volatile ("sbi 0x18, 1") #define RelaisCLK0 asm volatile ("cbi 0x18, 2") #define RelaisCLK1 asm volatile ("sbi 0x18, 2") #define PowerLED1_0 asm volatile ("cbi 0x18, 3") // rot #define PowerLED1_1 asm volatile ("sbi 0x18, 3") #define PowerLED2_0 asm volatile ("cbi 0x18, 4") // grün #define PowerLED2_1 asm volatile ("sbi 0x18, 4")
Viele GrüßeCode:U8 ShiftByte = 0; #define RelSigLinks0 ShiftByte = ~(~ShiftByte | (1<<RelSigLinks)) #define RelSigLinks1 ShiftByte = (ShiftByte | (1<<RelSigLinks)) #define RelSigRechts0 ShiftByte = ~(~ShiftByte | (1<<RelSigRechts)) #define RelSigRechts1 ShiftByte = (ShiftByte | (1<<RelSigRechts)) #define RelPhaseLinks0 ShiftByte = ~(~ShiftByte | (1<<RelPhaseLinks)) #define RelPhaseLinks1 ShiftByte = (ShiftByte | (1<<RelPhaseLinks)) #define RelPhaseRechts0 ShiftByte = ~(~ShiftByte | (1<<RelPhaseRechts)) #define RelPhaseRechts1 ShiftByte = (ShiftByte | (1<<RelPhaseRechts)) #define RelSubLinks0 ShiftByte = ~(~ShiftByte | (1<<RelSubLinks)) #define RelSubLinks1 ShiftByte = (ShiftByte | (1<<RelSubLinks)) #define RelSubRechts0 ShiftByte = ~(~ShiftByte | (1<<RelSubRechts)) #define RelSubRechts1 ShiftByte = (ShiftByte | (1<<RelSubRechts)) #define LEDSub1_0 ShiftByte = ~(~ShiftByte | (1<<LEDSub1)) #define LEDSub1_1 ShiftByte = (ShiftByte | (1<<LEDSub1)) #define LEDSub2_0 ShiftByte = ~(~ShiftByte | (1<<LEDSub2)) #define LEDSub2_1 ShiftByte = (ShiftByte | (1<<LEDSub2))
Andreas







Zitieren

Lesezeichen