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
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?????
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...
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...
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...
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
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