- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 4 von 4

Thema: volatile static const char *sram_data; ist das richtig?

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    21.04.2005
    Ort
    Hannover
    Beiträge
    190

    volatile static const char *sram_data; ist das richtig?

    Anzeige

    Praxistest und DIY Projekte
    Hallo Zusammen,

    ich schreibe gerade eine Routine um ein serielles SRAM per Interrupt im Page-Mode zu beschreiben.
    Dabei will ich in einer routine "sram_write_array(volatile static const char *sram_data) aufrufen in der der eben deklarierte Pointer mit einer Anfangsadresse eines structs geladen wird.
    Das Interrupt flag wird aktiviert und die ISR bedient sich dann dieses Pointers.
    Geht das so?
    Und warum ist es eigentlich sinnvoll den Modifier "const" zu benutzen?
    (habe das von der UART-Routine)

    Vielen Dank!

    MfG,
    Marten83

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    25.03.2006
    Ort
    Darmstadt
    Alter
    33
    Beiträge
    522
    Hallo Marten83,

    'const' signalisiert dem Compiler, dass die Funktion keine Veränderungen an den Chars machen wird auf die 'sram_data' zeigt, sodass er in bestimmten Fällen effizienteren Code produzieren kann. 'static' ist komplett sinnlos, weil 'static' ein Qualifier ist und nichts damit zu tun hat, wie man auf die Variable zugreift, auf die 'sram_data' zeigt.

    Warum da zusätzlich 'volatile' benutzt wird ist mir unverständlich, weil es ja bedeuten würde, dass sich die Daten hinter 'sram_data' jederzeit ändern könnten, was aber wohl nicht der Fall ist, wenn die Funktion in einer ISR aufgerufen wird.

    MfG Mark

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    21.04.2005
    Ort
    Hannover
    Beiträge
    190
    Hi p_mork,

    danke für die Antwort.
    Das mit 'const' ist gut zu wissen, allerdings denke ich, dass zumindest 'volatile' doch einen Sinn hat gerade weil 'sram_data' in einer ISR benutzt wird und sonst einfach wegoptimiert werden würde, nicht?
    Eigentlich war ich mir bisher nur über das 'static' nicht ganz sicher. Aber ich denke es wird benötigt, weil ja sonst beim Verlassen der Funktion die Variable (Pointer) wieder aus dem RAM verschwindet, oder?

    MfG, Marten83

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    02.11.2005
    Alter
    49
    Beiträge
    1.146
    Wenn Du const benutzt, sind sowohl volatile als auch static völlig überflüssig.

    volatile benötigst Du nur dann, wenn eine Variable in einer ISR verändert wird, nicht wenn sie nur ausgelesen wird.

    static brauchst Du hier auch nicht, da Konstanten entweder in einen reservierten Speicherbereich des RAMs oder ins Flash geschrieben werden und dort auch fest stehen bleiben.

    [edit]
    Wenn ich das richtig verstehe, willst Du den Pointer erst zur Laufzeit des Programms initialisieren. Dann kannst Du natürlich nicht mit const arbeiten. const kannst Du nur dann verwenden, wenn der Compiler schon weiß, auf welche Adresse der Zeiger zeigen soll. In Deinem Fall würde ich den Zeiger dann mit
    static char *sram_data
    deklarieren.
    [/edit]

    Gruß,
    askazo

Berechtigungen

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

LiFePO4 Speicher Test