Hallo!
ich verzweifel hier gleich...
ich hab hier das stk501 vor mir - ports/leds ansprechen funktioniert
schonmal..
nun wollt ich mir ne variable basteln in die ich einen wert speichere.
uint8_t var;
jetzt komms: wenn ich die variable global definiere ist alles ok!
sobald ich jedoch in meiner MAIN die variable deklariere hat sie immer
den gleichen wert?!?!? den ich auch nicht ändern kann....
hab den arbeitsplatz komplett neu installiert! was hab ich falsch
gemacht?
gruß,
d.
#include <avr/io.h>
#include <stdint.h>
#include <stdio.h>
#include "test.h"
volatile uint8_t var;
volatile uint32_t i;
int main (void)
{
DDRB = 0xFF; //init
PORTB = 0xFF; //ausschalten
DDRD = 0x00;
var = 0xAA;
do
{
PORTB = var;
for(i=0xAAAAAAAA; i=0; i--){;} //WAIT
var--;
}
while(1);
return(0);
}
also nochmal:
wenn ich die 2 variablen
volatile uint8_t var;
volatile uint32_t i;
in der main deklariere dann ist var immer 0xA5 und lässt sich auch nicht
ändern durch var = 0xAA;
> for(i=0xAAAAAAAA; i=0; i--){;}
Du meinst wahrscheinlich eher
> for(i=0xAAAAAAAA; i==0; i--);
Initialisiere Deine Variablen mal bei der Deklaration.
Wo genau (an welcher Stelle) liest Du var aus und erhaeltst den falschen
Wert?
Nochwas: Du hast eine Endlosschleife... d.h. Dein var laeuft Dir
natuerlich staendig unter auf die Art, das ist Dir klar?
Lg,
Michael
danke für die antwort...
aber das sind nicht meine probleme...
wenn ich var global deklariere, steht die variable auf adresse 0x0110
wenn ich sie lokal in der main deklariere ist diese variable auf adresse
0x1100 - hat der mega128 überhaupt soviel sram? hab ich irgendwelche
einstellungen im AVR-Studio vergessen? oder brücken auf dem stk-teil?!?
mfg,
d.
daniel wrote:
> danke für die antwort...> aber das sind nicht meine probleme...
Doch, das sind deine Probleme.
Stell erst mal dein Programm richtig.
>> wenn ich var global deklariere, steht die variable auf adresse 0x0110> wenn ich sie lokal in der main deklariere ist diese variable auf adresse> 0x1100 - hat der mega128 überhaupt soviel sram?
Du kannst dem Compiler schon vertrauen, dass er das richtig macht.
> hab ich irgendwelche> einstellungen im AVR-Studio vergessen?
Den korrekten Prozessor hast du doch ausgewählt, oder?
> oder brücken auf dem stk-teil?!?
Nein. Wenn dein Programm compiliert, der richtige Prozessor
eingestellt ist und das Programm fehlerfrei in den Prozessor
gebrannt werden kann, dann läuft es so wie du es programmiert
hast. Wenn sich dann das Programm nicht so verhält wie du
erwartest, dann liegt das daran, dass dein Programm fehlerhaft
ist.
Die Idee, dass der Compiler das verbockt, solltest du dir gleich
wieder abschminken. Klar haben Compiler auch Fehler, aber du wirst
noch lange Zeit programmieren, bevor du das erstemal einen
tatsächlichen Compilerfehler entdeckst.
> Klar haben Compiler auch Fehler, aber du wirst> noch lange Zeit programmieren, bevor du das erstemal einen> tatsächlichen Compilerfehler entdeckst.
Ich habe den gcc mit meinem Code schonmal zum Segfault bewegen koennen
und bin ueber ein Problem in der Stackverwaltung gestolpert... aber
natuerlich hast Du schon recht.
Und Daniel: Hier ist niemand "pissig". Allerdings solltest Du mal nicht
vergessen, wer hier das Problem hat, naemlich Du. Wenn Du also Hilfe
willst wirst Dir die entsprechenden Fragen schon gefallen lassen
muessen. Wenn Du glaubst, es besser zu wissen, poste nicht.
Michael
> for(i=0xAAAAAAAA; i=0; i--){;}
Du weist i einen Wert zu, der ungleich Null ist. Die Bedingung zum
Eintritt in die for-Schleife ist aber "i=0" (mal abgesehen davon, dass
da tatsächlich wenn überhaupt ein "==" stehen müsste, da "=" eine
Zuweisung macht). Diese Bedingung ist aber in dem Moment nie erfüllt.
Deshalb wird die Schleife auch nie betreten...
Jetzt ist die Sache komplett falsch, weil Dir Dein Programm abstuerzen
wird. Und im ersten Fall wurde die for-Schleife nicht ausgefuehrt und im
Zweiten wartest Du gerade zwei Iterationen, also so gut wie nichts.
> SO funktioniert alles
Was genau soll denn hier wie funktionieren?
> Und Daniel: Hier ist niemand "pissig". Allerdings solltest Du mal nicht> vergessen, wer hier das Problem hat, naemlich Du.
michael mein lieber - Du hast ein weit aus größeres problem als ich -
glaub mir!
> Du weist i einen Wert zu, der ungleich Null ist. Die Bedingung zum> Eintritt in die for-Schleife ist aber "i=0"
Blödsinn..
Wenn ich das im AVR-Studio mit dem gcc compiliere und dort
im Simulator laufen lasse (hab keinen Mega32 da) läuft
das Programm wie erwartet.
Die for-Schleife wird nie ausgeführt, ist klar, ist aber auch
so programmiert.
var ändert seinen Wert wie erwartet. Ebenso der Port.
daniel wrote:
>> Du weist i einen Wert zu, der ungleich Null ist. Die Bedingung zum>> Eintritt in die for-Schleife ist aber "i=0">> Blödsinn..
Bevor DU hier irgendwas als "Blödsinn" abtust, lern erst mal C! In C
wird in einer for-Schleife eine Einsprungbedingung angegeben und keine
Abbruchbedingung. Aber Du musst es ja wissen. Bye...
> Wenn ich das im AVR-Studio mit dem gcc compiliere und dort> im Simulator laufen lasse (hab keinen Mega32 da) läuft> das Programm wie erwartet.> Die for-Schleife wird nie ausgeführt, ist klar, ist aber auch> so programmiert.> var ändert seinen Wert wie erwartet. Ebenso der Port.
Danke Karl heinz! ich hab genau das selbe erfahren...
deshalb denk ich ja es liegt am stk501 oder irgendwelchen einstellungen
im AVR-Studio evtl macht mein selbstgebauter jtag auch probleme...
mom... *jtagice mkii rauskram
bis gleich...
Johannes: Daniel ist wohl nicht hier, um etwas zu lernen, sonst wuerde
er zuhoeren. Aber fuer das Interesse der Allgemeinheit, da es ein
haeufiger Anfaengerfehler ist:
> Bevor DU hier irgendwas als "Blödsinn" abtust, lern erst mal C! In C> wird in einer for-Schleife eine Einsprungbedingung angegeben und keine> Abbruchbedingung. Aber Du musst es ja wissen. Bye...
Das ist richtig. Der Ausdruck foo=bar liefert foo als Ergebnis zurueck.
i=0 liefert also 0, in C korrespondiert das mit "false", somit wird die
Schleife nie betreten. Endlosschleifen kann man auf die Art ebenfalls
erzeugen, indem man z.B. i=1 schreibt.
Michael
hehe... das du immer noch von der schleife redest... lustig...
also am JTAG liegts nicht... der mkII liefert das delbe ergebniss beim
debuggen.. globale variable funzt, lokale liegt im nirvana... arg..
LÖSUNG:
Das verdammte mega103 compatiblitäts bit war noch gesetzt! der sram des
mega103 sitzt an einer andern stelle als beim 128 somit wurden meine
daten in's nirvana geschickt...
Gruß,
d.