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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.