» Willkommen auf Elektronik «

jmoney
aus St. Ingbert
offline


OC Profi
20 Jahre dabei !


So, ich hab jetzt endlich nochmal Zeit/Lust zum proggen gehabt und das Programm zum 3. mal von vorne geschrieben. Diesmal mit Microchip's application note AN556, Ex.5 als Grundgerüst.
Ich will's ein bisschen kurz fassen: Es funktioniert wunderbar, wenn ich die Tabelle per org-Befehl bei Adresse 0x320 anfangen lasse (was immer noch in der ersten von 4 Speicherpages liegt) aber es bricht meistens, wohlgemerkt nicht immer, ab, wenn ich die Tabelle einfach hinter den 200-Zeilen Code schreibe. Hab ich da was übersehen in der PIC-Architektur oder isser doch kaputt? Mit dem Simulator komm ich nicht so richtig klar.
Das ärgerliche ist, dass, obwohl es jetzt funktioniert, ich nicht verstehe, warum und dass die ersten beiden Versionen der Routine vielleicht auch funktioniert hätten wenn ich die Tabelle einfach weiter nach hinten gesetzt hätte. Also ein Haufen Arbeit für den A***..

Beiträge gesamt: 866 | Durchschnitt: 0 Postings pro Tag
Registrierung: Dez. 2003 | Dabei seit: 7432 Tagen | Erstellt: 1:04 am 11. Mai 2004
Ratber
offline


Real OC or Post God !
22 Jahre dabei !


wo ist denn meine Antwort von gestern hin ? :noidea:

Hat das Forum nun Alzheimer ?

Egal.

Wie legste denn deine Tabellen ab ?

Geschützter Bereich oder über läst du das dem Compiler/Editor ?

Beiträge gesamt: 41451 | Durchschnitt: 5 Postings pro Tag
Registrierung: Mai 2001 | Dabei seit: 8377 Tagen | Erstellt: 11:20 am 11. Mai 2004
jmoney
aus St. Ingbert
offline


OC Profi
20 Jahre dabei !


wenn ich es dem assembler überlasse, geht es manchmal, manchmal aber eben nicht. wenn ich es per org 0x320 auf diese adresse lege, geht es. meinst du es könnte daran gelegen haben, dass der die tabelle zerstückelt zwischen den anderen befehlen abgelegt hat oder wie? glaube ich eigentlich nicht..

Beiträge gesamt: 866 | Durchschnitt: 0 Postings pro Tag
Registrierung: Dez. 2003 | Dabei seit: 7432 Tagen | Erstellt: 15:03 am 11. Mai 2004
Ratber
offline


Real OC or Post God !
22 Jahre dabei !


Gut möglich.

Ich vermute mal das die Tabelle in 2 Segmenten liegt und daher das Problem entsteht weil der Compiler nicht ganz mitkommt.

Kann aber auch alles andere sein

Beiträge gesamt: 41451 | Durchschnitt: 5 Postings pro Tag
Registrierung: Mai 2001 | Dabei seit: 8377 Tagen | Erstellt: 23:34 am 11. Mai 2004
jmoney
aus St. Ingbert
offline


OC Profi
20 Jahre dabei !


Was genau meinst du mit Segmente? Soweit ich weiß sind die 8k Programmspeicher in 4 2k große pages unterteilt. Das macht dann im PC 11bit+2bit für Pageauswahl. Über die erste page geht er so oder so nicht raus. Und der Assembler schreibt alle Befehle brav hintereinander, sonst würde bei der Abarbeitung der PC durcheinanderkommen, weil der ja nach jedem normalen Befehl nur inkrementiert wird. Von daher kann ich mir das mit der geteilten Tabelle auch nicht vorstellen. Weißt du da mehr oder kennst du dich mit PICs nicht so gut aus?

Beiträge gesamt: 866 | Durchschnitt: 0 Postings pro Tag
Registrierung: Dez. 2003 | Dabei seit: 7432 Tagen | Erstellt: 20:40 am 12. Mai 2004
Ratber
offline


Real OC or Post God !
22 Jahre dabei !


Jaein.

Ich arbeite nicht oft mit PIC's weil mir die Teile noch zu umständlich sind (Liegt in der History der Controller) und die Segmentierung des Speichers ist ein Primärer Grund dafür weils dort schnell mal ärger gibt.

Die Frage ist eben ob die Segmentierung im Programm berücksichtigt ist und "wo" die Tabelle abgelegt wird.

Manche Compiler legen die einfach nach hinten wo se keiner suchen würde.

Versuch einfach mal mehrere Blinde Zeilen einzufügen (Irgendwelche Operationen ohne Effekt aber mit Platzverbrauch) um den Code zu verschieben.

Beiträge gesamt: 41451 | Durchschnitt: 5 Postings pro Tag
Registrierung: Mai 2001 | Dabei seit: 8377 Tagen | Erstellt: 23:43 am 12. Mai 2004
jmoney
aus St. Ingbert
offline


OC Profi
20 Jahre dabei !


wenn ich nix sage legt er sie direkt hinter den code, wenn ich es per org-befehl woanders hinlege, legt er es auch dort hin. das sehe ich im brenner-programm. außerdem sollte die routine page-umbrüche eigentlich berücksichtigen. deshalb ja der ganze aufwand.. ich probier das nachher mal, die tabelle kurz vor page-ende zu legen.

Beiträge gesamt: 866 | Durchschnitt: 0 Postings pro Tag
Registrierung: Dez. 2003 | Dabei seit: 7432 Tagen | Erstellt: 17:20 am 13. Mai 2004
jmoney
aus St. Ingbert
offline


OC Profi
20 Jahre dabei !


Ok ich hab jetzt mal verschiedene Anfangsadressen für die Tabelle ausprobiert. Wenn ich sie kurz vor Ende der page stelle, bleibt er hängen. Wenn ich sie an 0x0320 stelle, läuft er durch und nach dem letzten Eintrag fängt er das Programm wie erwartet wieder von vorne an. Jetzt das interessante: Wenn ich sie kurz vor 0x0320 stelle, zB. 0x03F0, bricht er auch ab und bleibt hängen. Also muss es außer den pages noch eine andere Art der Segmentierung geben (wie du schon angedeutet hast). Ich konnte darüber aber nichts im Datenblatt finden. Wie funktioniert diese Segmentierung und wieso gerade 0x0320? Das ist D800 und B1100100000. Daraus kann ich keinen Zusammenhang mit irgendwas aus dem Datenblatt erkennen. Die Zahl hab ich übrigens aus der oben erwähnten Application Note. Auch Google hilft nicht weiter. Da erfahr ich nur dauernd, dass PICs segmentiert sind, aber nicht wie. Ich wäre sehr dankbar für einen guten Link oder eine Erklärung..

Beiträge gesamt: 866 | Durchschnitt: 0 Postings pro Tag
Registrierung: Dez. 2003 | Dabei seit: 7432 Tagen | Erstellt: 20:45 am 13. Mai 2004
Ratber
offline


Real OC or Post God !
22 Jahre dabei !


Tja,jetzt weißte warum ich PIC's nur selten nutze wenn es nicht anders geht oder ich keinen Bock habe ne fertige Idee für nen AVR umzusetzen ;)

Ich will beim Prggen meine Ideen umsetzen und nicht die halbe Zeit damit verbringen irgendwelche Fehler zu suchen die eigentlich der Hersteller verbockt hat weil er nicht fähig ist mal nen Technischen Schritt zu tun und einzusehen das die Konkurenz doch ne gute Idee hatte.

Erst vor kurzem hat Microsys. erst die Controller auf Flashhmodelle erweitert.
Vorher gabs allenfalls EEProm was eben nicht das gleice ist und auch der Grund für die immernoch Segmentierte Organisierung ist denn EEProms sind meist nur Segmentiert ansprechbar (Geschrieben werden gante Segmente und keine Einzelnen Bytes).

Ich hab das beste für meine Nerven getan und bin auf ne andere Marke umsgestiegen denn Ärgen lassen kann ich mich auch hier im Forum ;) :lol:

Beiträge gesamt: 41451 | Durchschnitt: 5 Postings pro Tag
Registrierung: Mai 2001 | Dabei seit: 8377 Tagen | Erstellt: 0:39 am 14. Mai 2004
jmoney
aus St. Ingbert
offline


OC Profi
20 Jahre dabei !


hmpf ja. jetzt hab ich sber schon die hälfte meines projekts.. wo krieg ich infos, wie diese segmentierung funktioniert?

Beiträge gesamt: 866 | Durchschnitt: 0 Postings pro Tag
Registrierung: Dez. 2003 | Dabei seit: 7432 Tagen | Erstellt: 14:10 am 14. Mai 2004