STATIC aber leider kein SRAM Was tun?

Gast #1222945
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
Gast #1222962
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
}
Gast #1222965
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 ...
#1222982
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.
Gast #1222984
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
Gast #1222995
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!
Gast #1223007
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!
Gast #1223014
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........
Gast #1223020
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... :-)
#1223021
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
Gast #1223033
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

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