Speicherbereich für Zeiger

Gast #2533721
Lesenswert?

Hey!

ich bin gerade dabei meine erstelltes (funktionsfähiges) Programm 
modular zu gestellten und will somit Zeiger an Funktionen Übergeben, um 
dort den Wert zu ändern.
Nur komme ich gerade mit dem initialisieren der Zeiger nicht klar. In 
anderem Kontext benutze ich immer:
1
int *px = new int;
2
*px = 99;

Im Compiler vom AVR Studio von ist "new" jedoch nicht implementiert.

Muss ich dem Zeiger bewusst einen Speicherbereich aus dem Flash 
zuweisen?
Wenn ja, wie finde ich heraus welche Adressen ich nehmen kann?

Mir wäre es am liebsten wenn der Compiler das zuweisen des Speichers 
übernehmen könnte!

Das Folgende geht ja auch nicht, weil dann ja der Speicherbereich 
garnicht klar ist...
1
int main(void)
2
{
3
  uint8_t *pstate, *pswReadSave;
4
  *pstate = 0;
5
  *pswReadSave = 0;    //beide mit Startwert 0 initialisieren
6
[...]
7
        
8
  while(1)
9
  {    
10
    
11
    while (menu == 1)
12
    {
13
      sw_read (pstate, pswReadSave);   //Zeiger an Funktionen übergeben
14
      main_menu(pstate);
15
    }
16
  } 
17
}

Gruß
Mike
Gast #2533782
Lesenswert?

1
int main(void)
2
{
3
  uint8_t pstate, pswReadSave;
4
  pstate = 0;
5
  pswReadSave = 0;    //beide mit Startwert 0 initialisieren
6
[...]
7
        
8
  while(1)
9
  {    
10
    
11
    while (menu == 1)
12
    {
13
      sw_read (&pstate, &pswReadSave);   //Zeiger an Funktionen übergeben
14
      main_menu(&pstate);
15
    }
16
  } 
17
}

Das könnte gehen, hab's aber nicht getestet...
Gast #2533788
Lesenswert?

ja das untere geht sicher und ist als Lösung in meinem Hinterkopf :D!

hätte nur gern im main auch mit den Zeiger hantiert!

wenn ich
1
int x = 1;
2
int* px = &x;
mache, dann hab ich ja zwei Variablen im main die eigentlich die selbe 
sind, nur einmal als Pointer und ein mal nicht.
Das ist doch etwas unschön?!

die malloc funktion werde ich gleich mal ausprobieren
#2535970
Lesenswert?

Mike schrieb:
> ja das untere geht sicher und ist als Lösung in meinem Hinterkopf :D!
>
> hätte nur gern im main auch mit den Zeiger hantiert!

Warum? Über einen Zeiger ist der Zugriff doch umständlicher als direkt.

> wenn ichint x = 1;
> int* px = &x;
> mache, dann hab ich ja zwei Variablen im main die eigentlich die selbe
> sind, nur einmal als Pointer und ein mal nicht.

Willst du jetzt den Zeiger oder nicht?

> die malloc funktion werde ich gleich mal ausprobieren

Welchen Vorteil versprichst du dir davon, außer daß du dir damit die 
Möglichkeit nimmst, direkt, also ohne den Zeiger zugreifen zu können? 
Dynamischer Speicher ist ressourcenintensiv und an dieser Stelle absolut 
unnötig.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren