Forum: Mikrocontroller und Digitale Elektronik Problem Flash...


von Daniel (Gast)


Lesenswert?

Habe folgendes Problem...
Hab meine Hardware mit einem c167 controller und einem externen flash.
als compiler verwende ich u3vision von keil.
Nun kann ich mein Programm problemlos mit dem u3v ins ram laden und 
debuggen.... funktioniert einwandfrei, soweit bin ich noch glücklich

lade ich das programm aber mit dem tool flashit ins Flash (AM29F010B),so 
das es von diesem starten sollte, läuft sogut wie gar nix mehr.
Lade ich nun ein Testprogrämmchen ins flash, welches nur über einen 
digitalen  IO eine LED zum blinken bringt, funktioniert dies ebenfalls 
einwandfrei. (heisst für mich, hardware ist i.O., die zumindest die 
register, welche für die kommunikantion zwischen c167 und flash 
zuständig sind sind richtig gesetzt...)

Hab nun festgestellt, das (so scheint es zumindest) der c167 an gewissen 
stellen im programmm abstürzt... (wenn ich gwisse programmteile 
ausklammere läuf der rest zumindest :-)...), weiter hab ich 
festgestellt, das in einem interrupt (hab nur einen) mindestens eine 
variable beim ersten durchlauf nicht auf dem wert steht, auf den sie 
eigentlich hätte initialisiert werden müssen... (hab dies rausgefunden, 
indem ich an gewissen orten im im interrupt einen ausgang setzte und 
damit eine led ansteuerte, die entsprechende varriable muss einen wert 
haben, den sie bei normalem programmablauf, unmöglich bekommen kann...)

So ganz schön kompliziert, :-) hat dennnoch jemand eine idee woran es 
liegen könnte/was ich ausprobieren könnte..???...???...???

danke für die mühe
Daniel

von Daniel (Gast)


Lesenswert?

niemand ne idee? :-(

von Daniel (Gast)


Lesenswert?

hmmm angenommen varriablen haben werte, die sie aufgrund der applikation 
nicht haben können, was gibts alles für gründe dafür?
da ich in C programmiere könnte es z.b. sein das ich einen wert in einen 
array schreibe, mit einem index der grösser ist als der höchste des 
arrays... gibts sonst noch möglichkeiten?????

von Joe (Gast)


Lesenswert?

Du hst ne Schaltung und einen Quellcode vor dir und bist nicht in der 
Lage den Fehler zu finden ...

Wir haben nichts dergleichen von dir bekommen also raten wir für dich ?? 
ist es das was du willst ??

Du sprichst von einem Interrupt. Wird da deine Variable versemmelt, ist 
die oder mehrere Variablen an der ISR beteiligt? volatile deklariert?

Keine lust mehr zu raten...

von Daniel (Gast)


Lesenswert?

danke für deine antwort... naja würde der quellcode so einfach auf ne a4 
seite passen hätt ich ihn sicher angehängt...

sind verschiedene varrialblen am interrupt beteiligt, auch globale..., 
der interrupt wird durch einen Input ausgelösst...

von Joe (Gast)


Lesenswert?

volatile deklariert?

Ne Datei reicht, brauchst kein Blatt anhängen ;-))

von Daniel (Gast)


Angehängte Dateien:

Lesenswert?

volantile... ne hab ich nicht, aber hab ich nach deinem ersten statement 
mal gemacht, konnte leider keinen unterschied feststellen...

ok, hab mla das *.c file mit dem interrupt angehängt... hat einige 
variablen drin die ich zum debuggen brauche, also von diesem punkt nicht 
zu kritisch anschauen gg

also in zeile 270 ist eine if anweisung. beim ersten mal wo der 
interrupt durchlaufen wird, ist die varriable uwstate > 5 bei dieser if 
anweisung , was eigentlich unmöglich ist, da sie erstens mit 0 
initialisiert wurde, zuvor mit sicherheit nicht verändert wird, und 
sowiso in zeile 250 (beim ersten interrupt!) nochmal auf 0 gesetzt 
wird... dies ist übrigens eine globale variable, welche aber 
ausschliesslich in diesem interrupt geschrieben wird...

hmmm ja so schauts leider immer noch aus...

von Daniel (Gast)


Lesenswert?

oder wie ist das mit den volantile genau, finde nix genaues darüber...

von uu (Gast)


Lesenswert?

in C muss man eine variable , die von einem Interrupt veraendert, oder 
abgefragt wird als "volatile" deklarieren. Dies verhindert, dass der 
compiler sie wegoptimiert, wenn er meint, sie bringe nichts.

In einem C manual muesste das beschrieben sein.

rene

von Daniel (Gast)


Lesenswert?

ah ja habs gefunden... leider war das nicht das problem...

von Daniel (Gast)


Lesenswert?

Hab nun rausgefunden, dass wenn ich vom Flash aus boote, mein externes 
Ram überhaupt nicht angeprochen wird... (kein cs nix...)
nur ist mir nicht klar wiso... das naheliegenste wäre, wenn die 
entsprechendne Register (Buscon1, ADDRSEL1) nicht richtig gesetzt 
sind...
diese kann ich ja im start167.A66 konfigurieren, und da bin ich der 
meinung stimmt. (Dies, da ich beim debuggen mit u3v die entsprechenden 
registerwerte von Buscon1 und addsel1 angeschaut habe, diese stimmmen 
mit den werten überein die ich im start167.A66 file habe...)

sehe keine möglichkeit die tatsächlichen werte dieser beiden register zu 
überprüfen, wenn ich vom flash boote... (habe versucht mir diese über 
die serielle schnittstelle zu schicken, aber zu wenig ram, damit dies 
funktioniert...)...

gibts da ne möglichkeit dies nachzuprüfen?
wenn das ganze im debuggingmodus mit u3v funktioniert, kann ich davon 
ausgehen dass die hardware ok ist?
sonst ein vorschlag?

mfg Daniel

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.