- Labornetzteil AliExpress         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 18 von 18

Thema: Feste Größe ändert sich beim Programmablauf (="Suchspiel" Memoryüberschneidung)

  1. #11
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.220
    Anzeige

    E-Bike
    Hallo Joe
    In deiner *com*.h da hast du so was definiert

    volatile s16 M12ocr;
    hier wirst du wohl ein int brauchen, aber bei allen anderen Variablen auch?
    Mit so was habe ich mich schon einige male in ein Schlamassel gebracht und bin daher sehr vorsichtig.
    Wenn nach dem compile Data mehr als 60% braucht werde ich schon hellhörig.
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

  2. #12
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.694
    Zitat Zitat von sast Beitrag anzeigen
    Markus könntest du das mal bitte an einem konkreten Beispiel zeigen, was du meinst ...
    Ja, bitte, das würde mir auch helfen. Ich saß grad ne Weile an dem Vorschlag von sast - und bin natürlich und notwendigerweise schnell in die entsprechenden Tutorials vom RN und m-controller-net reingeschliddert. Zum Glück kam Markus - und ich hatte erstmal "Pause" gemacht - - - die Beispiele in RN und m-controller-net haben mich noch nicht zu ner funktionierenden Lösung gebracht.

    Zitat Zitat von Hubert.G Beitrag anzeigen
    ... volatile s16 M12ocr ... int brauchen, aber bei allen anderen Variablen auch? ...
    Hubert - mal mein "warum so" dazu.
    Die MotorPWM wird aktuell mit 8 Bit gefahren - am Timer 1 (*gg* - klingt nach weiterer Vergeudung von Ressourcen).
    Code:
      TCCR1B |=  (1<<WGM12);                // Fast PWM, 8 Bit TOP=0xFF=dez255     133
      TCCR1B |=  (1<<CS11);         // Prescaler ist clk/8 =>  9,8 kHz             135
            // theoretisch: 20 MHz / 8 / 255  =>  9,803922 kHz, DMM-Messung 9,78 kHz
    Code:
      volatile s16  M12ocr; // temporärer Stellwert für OCR1A        -255...255
    Beabsichtigt, vermutet, ist die spätere Verwendung von mehr als 8 Bit, weil die Regelung durchgehend von -fahrt (rechtsdrehend) bis +fahrt (linksdrehend) geplant ist - und da wären mir die verbleibenden 127 Ticks zu wenig. Die Lösung mit Fallunterscheidung "vor" oder "zurück" bzw. "re" oder "li" habe ich im MiniD0 und Dottie mit den vollen 255 Ticks praktiziert - sie gefällt mir eben nicht, weil ich wegen der Hin- und Herschalterei z.B. bei Langsamfahrt so etwas - - eben unschön finde. Um mir spätere Störmöglichkeiten durch vergessene Anpassungen zu ersparen, ist die Vorgabe der Fahr-PWM auf signed 16 ausgelegt (mehrere Größen). Ich hoffe, dass mir dieses Vorhaben gelingen wird. Ich versuche schon meist das Zahlenformat klein zu halten - - genau wegen des eher begrenzten SRAM-Platzangebots.

    Zitat Zitat von Hubert.G Beitrag anzeigen
    ... Wenn nach dem compile Data mehr als 60% braucht werde ich schon hellhörig ...
    Genau so gehts mir auch, ich wollte ja schon ne eigene Platine statt der RN-MotorControl bauen mit nem mega1284. Aber das gäbe schon wieder ne zusätzlichen Zeitaufwand ohne wirklichen Fortschritt . . . Sogar an einen 1284er-Huckepack-ersatz für den 328er hatte ich gedacht - aber nicht lange *gg*.

    Hubert - ich hoffe dass damit Deine Bedenken behoben sind?
    Ciao sagt der JoeamBerg

  3. #13
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    20.08.2008
    Ort
    Karlsruhe
    Alter
    37
    Beiträge
    1.225
    Zitat Zitat von sast Beitrag anzeigen
    Markus könntest du das mal bitte an einem konkreten Beispiel zeigen, was du meinst?
    Naja, die enum-Variante ist einfach. Im wesentlichen dein Code, nur statt uint16_t strnum ein strnum_t str. Und dann eben
    PHP-Code:
    typedef enum {
       
    str_info 0,
       
    str_space,
       
    str_menu1,
       ...
    strnum_t

    // Verwendung dann so:
    get_str_from_flash(str_infostr); 
    Damit gewinnst du etwas mehr Übersichtlichkeit, hast aber immer noch die unnötige Indirektion strarray1->*str->Flash. Der direkte Weg wäre einfach, die Strings direkt mit sprechenden Namen zu versehen und dann zu referenzieren. Damit scheidet dann auch die Möglichkeit weg, versehentlich einen nicht existierenden String zu referenzieren.
    PHP-Code:
    const char str_info[] PROGMEM "INFO allgemein";
    const 
    char str_space[] PROGMEM "              ";//14 Leerzeichen
    const char str_menu1[] PROGMEM "Menue 1";

    ...

    // Verwendung, get_str_from_flash wird überflüssig
    strcpy_P(str, &str_menu1); 
    mfG
    Markus
    Tiny ASURO Library: Thread und sf.net Seite

  4. #14
    Erfahrener Benutzer Roboter-Spezialist Avatar von sast
    Registriert seit
    30.11.2004
    Alter
    54
    Beiträge
    502
    Hallo Markus,

    die erste Variante unterscheidet sich ja nicht wirklich von meiner, bis auf die Namen. Ursprünglich war bei mir auch angedacht, z.B. über eine Zählschleife einen Block aufzurufen. Da das jetzt nicht mehr so ist, gefällt mir deine Variante 2 sogar noch besser.

    Danke für die Ausführung
    sast

    雅思特史特芬
    开发及研究

  5. #15
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    06.08.2008
    Ort
    Graz
    Beiträge
    521
    Ich habe die Strings ins Flash einfacher gehalten, mit PSTR:
    zB.:
    String im SRAM:
    lcd_puts(" Warte GPS");

    String im Flash:
    #include <avr/pgmspace.h>

    lcd_puts_p(PSTR(" Warte GPS "));

    das "_p" zur Funktion dazuschreiben damit die Daten aus dem Flash geholt werden.

    Mit der Zeigertabelle spart man etwas mehr Flash Speicher, dafür kann man hier ohne große Änderungen alles ins Flash bringen, und da man den Text direkt im Code sieht weiss man auch was man rausschickt, und muss nicht in einer Tabelle den richtigen Text suchen.

    LG!
    alles über meinen Rasenmäherroboter (wer Tippfehler findet darf sie gedanklich ausbessern, nur für besonders kreative Fehler behalte ich mir ein Copyright vor.)

  6. #16
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    20.08.2008
    Ort
    Karlsruhe
    Alter
    37
    Beiträge
    1.225
    Zitat Zitat von sast Beitrag anzeigen
    die erste Variante unterscheidet sich ja nicht wirklich von meiner, bis auf die Namen.
    Habe ich auch nie behauptet Die enums sollen ja nur die Wartbarkeit durch sprechende Namen verbessern.

    @damfino: Danke für den Hinweis zu PSTR, damit hatte ich mich noch nicht beschäftigt.

    mfG
    Markus
    Tiny ASURO Library: Thread und sf.net Seite

  7. #17
    Erfahrener Benutzer Roboter-Spezialist Avatar von sast
    Registriert seit
    30.11.2004
    Alter
    54
    Beiträge
    502
    @damfino wird dann auch erkannt, wenn der gleiche String mehrmals verwendet wird, oder gibt es dann jedes mal einen neuen Eintrag?

    Der Vorteil einer Tabelle liegt für mich auch darin, dass ich im nachhinein nicht alle Strings im gesamten Quelltecxt suchen muss, um eine textliche Änderung vorzunehmen. Ich muss es nur einmal ändern und sofort sind alle ensprechenden Aufrufe angepasst.

    sast

    雅思特史特芬
    开发及研究

  8. #18
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    06.08.2008
    Ort
    Graz
    Beiträge
    521
    Ich gehe davon aus dass es jedesmal einen neuen Eintrag gibt, aber wenn so wie hier nur 33% vom Flash belegt sind ist das kein Problem.
    Wenn sich Textausgaben oft wiederholen kann man ja auch Makros oder inline-Funktionen benutzen.

    Meiner Meinung nach kann man mit PSTR schnell den vorhandenen Code umschreiben, einfach mal an unwichtigen Stellen ausprobieren, etwas RAM freischaufeln, vielleicht geht es dann schon fehlerfrei. Dann kann man immer noch elegantere Lösungen einführen.

    Habe selber auch Tabelle für zB Fehlermeldungen, aber kurz mal zum debuggen erweitern geht einfacher mit PSTR.

    LG!
    alles über meinen Rasenmäherroboter (wer Tippfehler findet darf sie gedanklich ausbessern, nur für besonders kreative Fehler behalte ich mir ein Copyright vor.)

Seite 2 von 2 ErsteErste 12

Ähnliche Themen

  1. per TV-remote ein "move" programmablauf auslösen..
    Von carlitoco im Forum Robby RP6
    Antworten: 4
    Letzter Beitrag: 01.04.2008, 20:59
  2. Stecker in "Computer-Größe"
    Von danst im Forum Elektronik
    Antworten: 1
    Letzter Beitrag: 13.01.2007, 15:19
  3. "Leser stellen sich vor" - Was haltet ihr davon?
    Von Florian im Forum Umfragen
    Antworten: 31
    Letzter Beitrag: 17.03.2006, 16:52
  4. IO-Pins lassen sich nicht richtig mit "bsf"/"
    Von keiang im Forum PIC Controller
    Antworten: 3
    Letzter Beitrag: 21.07.2005, 19:12
  5. AT90S2313 - RX-Interupt - Der "hängt sich auf"
    Von Gottfreak im Forum AVR Hardwarethemen
    Antworten: 10
    Letzter Beitrag: 13.05.2004, 23:32

Berechtigungen

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

Labornetzteil AliExpress