- LiFePO4 Speicher Test    Werbung      
Ergebnis 1 bis 10 von 16

Thema: Pinkompatibel zu ATTiny2313 mit mehr Flash?

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    02.08.2006
    Ort
    Würzburg, Germany
    Beiträge
    716
    Hallo Besserwessi,

    der 4313 ist der richtige Tipp. Danke! Die zwei teilen sich ja mittlerweile sogar das gleiche Datenblatt. Nur ich habe leider keine Bezugsquelle dafür gefunden. (Brauche ja nur einen...)
    Hast du noch einen Tipp, wo man den 4313 kaufen kann?

    Viele Grüße
    Andreas

  2. #2
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    Bei dem Code kann man vermutlich noch einiges Optimieren. Es ist aber durch die vielen Defines etwas schlecht zu sehen.

    Ein mögliche Quelle wäre:
    http://www.tme.eu/de/katalog/#idp%3D...rch%3Dtiny4313

    Angeblich haben die jetzt auch eine Niederlassung in Deutschland, also kleine Polnische Mwst. mehr.

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    25.04.2010
    Beiträge
    1.249
    Es gibt ihn auch noch bei Farnell, 2,85€ der IC und 7,95€ Versand Bild  

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    02.08.2006
    Ort
    Würzburg, Germany
    Beiträge
    716
    Hallo,

    ich habe gerade was herausgefunden. Wenn ich die Defines der IO's tausche von

    Code:
    #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))
    zu

    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")
    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:
    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))
    Viele Grüße
    Andreas

  5. #5
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    In der Regel ist der Compiler bei der verwendung der Register schon nicht so schlecht - wenn man da was von Hand macht, wird es oft schlecher.

    Was ist denn an Optimierung eingestellt. Ich dachte GCC mach die oben von Hand eingefügte Optimierung auch schon automatisch, wenn man mit -o2 oder -os compiliert.

  6. #6
    Erfahrener Benutzer Roboter Genie Avatar von BMS
    Registriert seit
    21.06.2006
    Ort
    TT,KA
    Alter
    35
    Beiträge
    1.192
    Hallo,
    nützt es vielleicht noch etwas, wenn du die Wait-Funktion als "inline" machst? Gerade bei so kurzen Methoden bietet sich das an. Eventuell spart das noch ein paar Bytes ein.
    Kannst du vielleicht an der switch-Anweisung noch etwas kürzen?
    Grüße, Bernhard

  7. #7
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    Inline wird bei einer so häufig genutzen Funktion kaum einen kürzeren Code bringen. Eventuell bringt es etwas die Funktion als static zu deklarieren.

  8. #8
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    02.08.2006
    Ort
    Würzburg, Germany
    Beiträge
    716
    Hallo,

    ich habe mir heute bei Farnell ein paar Tiny4313 bestellt. Aber trotzdem wollte ich das Thema Optimierung noch mal ansprechen, da ich bis jetzt nicht darauf eingegangen bin.

    Ich bin davon ausgegangen, dass die Optimierungen automatisch durchgeführt werden.

    @TobiKa: Wie hast du diese Optimierung aktiviert, um deine oben genannte Ersparnis zu erreichen?

    Zitat Zitat von Besserwessi Beitrag anzeigen
    Was ist denn an Optimierung eingestellt. Ich dachte GCC mach die oben von Hand eingefügte Optimierung auch schon automatisch, wenn man mit -o2 oder -os compiliert.
    Scheinbar ist dies nicht der Fall. Ich habe nach den Einstellungen für die Optimierung gesucht, aber leider nichts gefunden. Die einzig für mich sinnvolle Position für deine Änderungsvorschläge war im Menü unter Project/Configure Options und dort unter Custom Options in der rechte Liste mit add -o2 oder -os einzufügen. Leider wird dadurch das Projekt gar nicht mehr kompiliert. Ich erhalte die Fehlermeldung "avr-gcc.exe: StereoSubWeiche.o: No such file or directory"

    Was mache ich falsch?

    Viele Grüße
    Andreas

  9. #9
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    Die Optimierung kann man bei AVRStudio mit GCC bei Project/Configure Options unter General einstellen. Da gibt es ein extra Feld für.

    Das GCC die Optimierung so nicht erkennt, wundert mich etwas. Bei der Schreibweise PORTB |= (1<<test) tut er das angeblich schon.

Ähnliche Themen

  1. Antworten: 18
    Letzter Beitrag: 06.05.2012, 18:40
  2. Attiny2313 mit mehr Flash?
    Von Tido im Forum Suche bestimmtes Bauteil bzw. Empfehlung
    Antworten: 6
    Letzter Beitrag: 18.01.2010, 22:00
  3. kein Flash mehr möglich
    Von frank1210 im Forum Asuro
    Antworten: 2
    Letzter Beitrag: 27.12.2009, 02:03
  4. Je mehr ich Lese desto mehr komme ich mit dem durcheinander
    Von becki133 im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 9
    Letzter Beitrag: 05.07.2008, 13:39
  5. page 12 nicht mehr flash-fähig
    Von Weiti im Forum Asuro
    Antworten: 9
    Letzter Beitrag: 04.11.2007, 22:25

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

    Werbung      fchao-Sinus-Wechselrichter AliExpress