Forum: Mikrocontroller und Digitale Elektronik STATIC aber leider kein SRAM Was tun?


von Informatik_Gott (Gast)


Lesenswert?

Hallo liebe Forum Gemeinde,

ich hab ein riiiiiiiiiiiiiiiiiesen Problem!

ich muss, aber vorher gleich mal sagen, dass ich Elektrotechnik studiert 
habe bzw. noch dabei bin, also nicht über meine Informatik Kenntnisse 
klagen :-) Ich will ja was dazu lernen..

Ich will ein Programm schreiben, das brauch ich für meine Diplomarbeit.
Und in einer Funktion brauch ich einen Merker, der net "stack" gelöscht 
wird (stack is sowas wie der garbage collector in java, für die wo es 
nicht wissen).

also hab ich mich schlau gemacht, bin ja nicht dumm :-)

und das schlüsselwort ist STATIC !

aber nun habe ich ein problem, wenn ich eine variable als static 
definiere, wird sie vom compiler in den SRAM gelegt... is ja auch 
logisch... SRAM steht ja für STATIC Ram. Der statische RAM muss nicht 
refreshed werden wie der DRAM...

Nun habe ich aber ein Problem, mein System hat keinen SRAM !!!!

Was soll ich tun?? Ich kann jetzt nicht noch schnell nen anderen 
controller bestellen, solang hab ich auch nicht mehr Zeit für die 
diplomarbeit!!

wie kann ich einen merker in den ram legen oder in ein register??

echt scheisse, dass ich in C programmieren muss ...

Vielen Dank!!!

Bitte schnell um Hilfe :-)

hennes

von holger (Gast)


Lesenswert?

Welcher Controller?

von Gast (Gast)


Lesenswert?

So viel Text und doch so wenig Informationen.

von Teplotaxl X. (t3plot4x1)


Lesenswert?

Static sagt nur dem Compiler, dass die Variable nur 1x initialisiert 
wird.
siehe http://de.wikibooks.org/wiki/C-Programmierung:_static_&_Co.

Mit SRAM / DRAM hat das nix zu tun

von Informatik_Gott (Gast)


Lesenswert?

at90can128

von Maik F. (sabuty) Benutzerseite


Lesenswert?

Informatik_Gott wrote:
> at90can128

Das Datenblatt schonmal gelesen? Oder muss das Göttliche das nicht tun?

Wie kommst du darauf, dass der kein SRAM hat? :p

von Teplotaxl X. (t3plot4x1)


Lesenswert?

Der hat SRAM.
Ist aber ziemlich Wayne s. mein vorheriger Post.

von holger (Gast)


Lesenswert?

>at90can128

Ja, und? static kann der Compiler bei dem auch im RAM.
Du brauchst kein externes SRAM wie du wohl vermutest.

von Informatik_Gott (Gast)


Lesenswert?

warum geht dann der Kode nicht??
1
void Hauptsteuerung_Funktion (void)
2
{
3
  static merker = 10;
4
  CAN_FRAME frame = {0x10,0x00,0x00,0x12, 0x13,0xFb,0x12,0x43};
5
6
  if (CAN_Get_Frame() == frame)
7
  {
8
     merker = merker - 1;
9
10
     if (merker <= 0)
11
     {
12
        CAN_Werte_Frame_aus();
13
     }
14
     else
15
     {
16
        exit();
17
     }
18
  }
19
  else
20
  {
21
     sleep(1000); // Warte 1 Sekunde
22
  }
23
24
}

von holger (Gast)


Lesenswert?

>warum geht dann der Kode nicht??

>  static merker = 10;

Weil merker keinen Typ hat?
int,char,long,float,blond

von Informatik_Gott (Gast)


Lesenswert?

static ist doch schon ein Typ!

Warum muss ich das doppeln moppeln ?

damit alokiert der Compiler doch schon Speicher.. vermutlich ein Byte 
oder 2 Byte!

das problem muss irgendwo anders sein ...

von Maik F. (sabuty) Benutzerseite


Lesenswert?

Informatik_Gott wrote:
> static ist doch schon ein Typ!

Nein.

> Warum muss ich das doppeln moppeln ?

Tust du nicht.

> damit alokiert der Compiler doch schon Speicher.. vermutlich ein Byte
> oder 2 Byte!

Nein.

> das problem muss irgendwo anders sein ...

Nein.

Lösung zB: static char merker = 10;

von niemand (Gast)


Lesenswert?

Ja ne is klar....

von Informatik_Gott (Gast)


Lesenswert?

Ha!

habs gerade probiert und mit static unsigned char merker hängt er sich 
auf!

von Informatik_Gott (Gast)


Lesenswert?

wenn ich gewusst hätte, dass es so schwierig ist einen Static Ram zu 
programmieren hätte ich mir ein thema ohne software gesucht

von holger (Gast)


Lesenswert?

>habs gerade probiert und mit static unsigned char merker hängt er sich
>auf!

>        exit();

Mach einfach ein return.

von Maik F. (sabuty) Benutzerseite


Lesenswert?

Informatik_Gott wrote:
> Ha!
>
> habs gerade probiert und mit static unsigned char merker hängt er sich
> auf!

Solange er nicht anfängt zu brennen (hatten wir heute auch schon)...

Was macht exit(); ?

von (prx) A. K. (prx)


Lesenswert?

Maik F. wrote:

>> static ist doch schon ein Typ!
> Nein

Trotzdem ist
  static merker = 10;
identisch mit
  static int merker = 10;
weil das "static" ausreicht, um eine Deklaration zu erkennen, und ein 
fehlender Typ immer als "int" angenommen wird. GCC im C99 Modus ist 
immerhin so nett, eine Warnung zu liefern.

von Informatik_Gott (Gast)


Lesenswert?

alle anderen Variabln die nicht static sind werden doch in den stack 
speicher gelegt, oder?

ganz unten die globalen und oben drauf werden die lokalen gestappelt.. 
die konstanten kommen in den ROM und der SRAM is leer.. bis auf die eine 
variable. eigentlich ne richtige platzverschwendung ??

oder werden die variablen in die 128 k Flash gelegt ???

jetzt bin ich total verwirrt

von Fralla (Gast)


Lesenswert?

merker? bist wohl SPS verseucht?

von Maik F. (sabuty) Benutzerseite


Lesenswert?

Informatik_Gott wrote:
> alle anderen Variabln die nicht static sind werden doch in den stack
> speicher gelegt, oder?
>
> ganz unten die globalen und oben drauf werden die lokalen gestappelt..
> die konstanten kommen in den ROM und der SRAM is leer..

Jetzt überleg mal, wo der Stack gespeichert wird...

von (prx) A. K. (prx)


Lesenswert?

Der Unterschied zwischen globalen Variablen und "static" ist nur die 
Sichtbarkeit der Namen. Für die Speicherverwaltung sind sie gleich.

von Informatik_Gott (Gast)


Lesenswert?

ha, hast dass das ich meinen merker auch global machen kann? also 
einfach unter das include

int merker = 10;

???

dann brauch ich die ganzen lokalen ja gar nicht... mhm, müsste ja auch 
von der zugriffszeit her schneller sein, muss ja nix auf den stack 
geladen werden!

von (prx) A. K. (prx)


Lesenswert?

Oje. Für eine Diplomarbeit bei Adam und Eva anzufangen wird hart.

von Teplotaxl X. (t3plot4x1)


Lesenswert?

Nochmal: static in c hat überhaupt nichts mit SRAM zu tun!

von Informatik_Gott (Gast)


Lesenswert?

programmierung war nie meine stärke.. bin eher der Analog Typ :)

aber ich brauch den at90Can128 zur Auswertung von CAN Daten.. wenn 10 
mal der gleiche Frame eintrifft, setze ich einen bestimmten pin low und 
das ist das trigger signal für meine schaltung.

Die schaltung ist eine selbst regulierender Spannungsregler. Wenn die 
Spannung für mehr als 5 sekunden konstant bleibt, resette ich den 
controller und die schaltung ist wieder bereit!

von holger (Gast)


Lesenswert?

>aber ich brauch den at90Can128 zur Auswertung von CAN Daten.. wenn 10
>mal der gleiche Frame eintrifft, setze ich einen bestimmten pin low und
>das ist das trigger signal für meine schaltung.

>     merker = merker - 1;
>
>     if (merker <= 0)
>     {
>        CAN_Werte_Frame_aus();

        merker=10;

>     }
>     else........

von Informatik_Gott (Gast)


Lesenswert?

was willst du mir damit sagen???

von holger (Gast)


Lesenswert?

>was willst du mir damit sagen???

Das merker sich nicht von alleine wieder auf 10 setzt?

von Informatik_Gott (Gast)


Lesenswert?

@Holger..

sau cool! jetzt funktioniert die schaltung ohne timer getriggerten 
Reset!! Hättest du mir das vorher mal gesagt, dann hätte ich mir diese 
scheiss timer schaltung sparen können... :-)

von Peter D. (peda)


Lesenswert?

Informatik_Gott wrote:
> ganz unten die globalen und oben drauf werden die lokalen gestappelt..
> die konstanten kommen in den ROM und der SRAM is leer.. bis auf die eine
> variable. eigentlich ne richtige platzverschwendung ??

Nö, Du bist selber der Platzverschwender, wenn Du auf nem 8-Bitter ohne 
Grund int (16Bit) benutzt.


Peter

von Informatik_Gott (Gast)


Lesenswert?

langsam erkenne ich wie nützlich software sein kann...

ich muss gestehen, dass ich die CAN inlude datei nicht geschrieben 
habe... nur den hauptsteuerungsteil.

von Informatik_Gott (Gast)


Lesenswert?

@Peter

warum platzverschwendung?

ich hab doch nur 5 globale variablen ?

von Informatik_Gott (Gast)


Lesenswert?

or:  Teplotaxl X

ok akzeptiert, STATIC hat nix mit SRAM zu tun!
dachte einfach, dass es ja sinn macht eine static variable in den sram 
zu legen, weil sie ja dann refresehed werden muss... und die variablen 
auch im sleep mode erhalten bleiben

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.