RAM-Wert nach SW-Reset

Gast #1399985
Lesenswert?
• ▲
▼
Hallo,

seit heute morgen versuche ich vergebens Werte im RAM abzulegen die auch 
nach einem Reset noch vorhanden sind.
Weiß jemand rat, denn in Büchern fand ich die Information, dass ein 
Reset keine Auswirkung auf den Ram hat, nur ein Spannungsverlust.

MC: ATmega16
IDE: Codevision

Testprogramm:
1
.......
2
#pragma regalloc-        /* Deaktivierung der automatischen Vergabe von Adressen an Variablen*/
3
register unsigned char   led_status      @0x0002;
4
register unsigned char   led_wert        @0x0003;
5
#pragma regalloc+        /* Aktivierung der automatischen Vergabe von Adressen an Variablen*/
6
.......
7

8
void main(void)
9
{
10
//Initialisierung
11
.......
12
     putchar(0xAA);                               //Neustart
13
     putchar(led_status);
14
     putchar(led_wert);
15
     i=0;
16
     while (1)
17
     {
18
          #asm("wdr");
19
          if(rx_counter>0)
20
          {
21
               if(i==0)led_status = getchar();
22
               if(i==1)led_wert   = getchar();
23
               if(i==2)
24
               {
25
                    putchar(led_status);
26
                    putchar(led_wert);
27
                    while(1);                     //Watchdogreset
28
               }
29
               i++;
30
               
31
          }
32
          
33
     };
34
}
Moderator Persönliche Seite #1399995
Lesenswert?
• ▲
▼
Frank Erdrich schrieb:

> Hübsch. Du legst dir die Variablen direkt in die Interrupt Vector
> Tabelle.

Du weißt aber, was eine Harvard-Architektur ist? ;-)

Aber in einem Punkt hast du Recht: er legt sie sich direkt in zwei
CPU-Register...

Ansonsten werden bei C vor dem Start von main() gemäß dem C-Standard
alle globalen Variablen initialisiert.  Daniel, du musst mal ins Manual
deines Compilers gucken, ob man das für einen Teil der Variablen
abschalten kann.  Beim AVR-GCC wäre das der Fall, indem man die
Variablen in der Section .noinit unterbringt.

Vergiss aber nicht, beim regulären Programmstart dann sinnvolle
Werte zuzuweisen.
#1399996
Lesenswert?
• ▲
▼
Frank Erdrich schrieb:

> Hübsch. Du legst dir die Variablen direkt in die Interrupt Vector
> Tabelle.

Ich habe zwar keine spezielle Ahnung von CV, aber ich denke mal, dass 
ohne entsprechende Kennzeichnung eine Datenadresse gemeint ist, keine 
Codeaddresse. Und da sitzen bei AVRs die Schattenadressen der Register, 
nicht die Vektoren. Was wohl auch beabsichtigt war. Könnte aber sein, 
dass er damit dem Compiler in die Suppe spuckt.
Gast #1400000
Lesenswert?
• ▲
▼
Interrupt Vector Tabelle??

Warum?

Auszug Help-Funktion Codevision
1
/* disable automatic register allocation */
2
#pragma regalloc-
3
/* allocate the variable ‘alfa’ to a register */
4
register int alfa;
5
/* allocate the variable ‘beta’ to the register pair R10, R11 */
6
register int beta @10;
Gast #1400023
Lesenswert?
• ▲
▼
Ohhhhhhhhhh Mann, das war ja einfach.

Wer lesen kann ist klar im Vorteil(sag ich sonst zu anderen;-)
1
Program variables can be global (accessible to all the functions in the program) or local (accessible only inside the function they are declared).
2
If not specifically initialized, the global variables are automatically set to 0 at program startup.
3
The local variables are not automatically initialized on function call.
Gast #1400347
Lesenswert?
• ▲
▼
Ich kenne deine Entwicklungsumgebung nicht darum beschreibe ich es 
allgemein.

Du kannst sicher in den Linker Einstellungen festlegen wo und wie gross 
dein RAM ist. Mache diese Etwas kleiner als dein reelles RAM, somit wird 
der Rest nicht von den C Startup  Routinen auf 0 gesetzt. Jetzt hast du 
einen „freien“ ram bereich, den du allerdings selber verwalten musst.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.