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
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
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 ...
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;
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(); ?
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.
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
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...
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!
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!
>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........
@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... :-)
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
langsam erkenne ich wie nützlich software sein kann...
ich muss gestehen, dass ich die CAN inlude datei nicht geschrieben
habe... nur den hauptsteuerungsteil.
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