Hallo, ich hab gerade festgestellt, dass die Hex-Codes, die beim uC51 Compiler von Wickenhäuser mitgeliefert werden nicht zum mitgelieferten C-Quelltext passen. Ich hab das Programm msc1210/elmet/elm_volt.hex auf meinen uC gebrannt und das Programm hat das gemacht was es machen soll. Als ich den dazugehörigen C-Quelltext aber selber kompiliert und gebrannt hab ging plötzlich gar nichts mehr (z.B. wurden kein Text über die serielle Schnittstelle geschickt). Laut Quelltext muss nur die printf-Funktion aufgerufen werden um die serielle Schnittstelle zu benutzen, die Schnittstelle wird nicht konfiguriert. Das funktioniert allerdings nur beim fertigen Hex-File. Bei meinen eigenen Compilaten kann ich keine Datenübertragung feststellen (über der Konsole des TI Downloaders). Weiß jemand woran das liegen könnte? Muss ich da noch irgendwas beim Compiler einstellen? Ich hab an den Programm nichts verändert außer die benötigten Source-Dateien in einen Ordner kopiert.
Gast
#1802937
> Weiß jemand woran das liegen könnte?
Läuft da noch ein zusätzliches Programm auf dem µC? So eine Art
Monitorprogramm o.ä?
Ralf
Nein, nur dieses eine Programm.
Vielleicht ist das falsche Projekt offen oder irgend etwas in dieser Richtung, was den falschen Quelltext übersetzt. Es wird ja nicht zwingend der Quelltext übersetzt, der gerade im Editor geöffnet ist, sondern der der im Makefile bzw. Projektfile steht. Grüße, Peter
Gast
#1803233
> Laut Quelltext muss nur die printf-Funktion aufgerufen werden um die > serielle Schnittstelle zu benutzen, die Schnittstelle wird nicht > konfiguriert. Ich kenne deinen Controller nicht, aber ich bezweifle, dass die Schnittstelle nach einem Reset genau dem entspricht, was du auf der Gegenseite eingestellt hast :) Hast du das originale HEX-File noch? Lade das mal in einen HEX-Editor, vielleicht sieht man ja doch irgendwelche "Spuren" eines Monitorprogrammes o.ä. Oder poste die Datei hier, zusammen mit dem laut Beschreibung angeblich passenden Quellcode. Warnungen beim Neucompilieren/Linken gab's keine? Ralf
Das Problem kenne ich. Es hatte etwas damit zu tun, dass Wickenhäuser zuerst mit Putc() auf die Schnittstelle schreibt, danach funktioniert die Printf() normalerweise. Das läßt sich aber vermeiden, wenn man den Prozessor vernünftig initialisiert. Außerdem optimiert der Wickenhäuser-Compiler Deinen Code recht stark. Da muß man recht gut aufpassen, dass nicht auch "sinnvoller " Code entfernt wird... Ach ja nochwas: Wenn du die Sourcen in einen anderen Ordner kopierst, achte darauf, das diese wieder in C:/yc51/src/msc1210 liegen. Und: Der Ordner darf keine Ö/Ü´s etc. enthalten und am besten auch keine Leerzeichen. Sonst schmeisst es das umshell-Programm.
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
44 | |
45 | |
46 | |
@frankman Deine Initialisierungsroutine funktioniert bei mir leider genauso wenig wie die des Beispielprogramms. Ich hab zu Testzwecken mal ein HalloWelt-Programm geschrieben, das einzelnen LEDs auf dem Controller leuchten lässt. Wenn ich die Initialisierungsroutine von dir nutze, dann werden alle LEDs bis vor dem Aufruf von puts/printf eingeschaltet - beim Aufruf der Funktionen bricht das Programm offenbar ab. Bei der Initialisierungsroutine des Beispielprogramms leuchten hingegen alle LEDs - eine Ausgabe über die serielle Schnittstelle erhalte ich aber trotzdem nicht. Hier mal die Initialisierungsroutine des Beispielprogramms:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
Kompilieren tut das alles ohne Warnings. @Ralf Die Hex-Files vom vorgefertigten Beispielprogramm und dem selbst kompilierten Code sind fast gleich groß - sie unterscheiden sich nur um ein paar Bytes. Ich hatte leider keine Ahnung nach was ich vergleichen soll - der Hex-Editor MX hat auch mehr als 3000 Unterschiede gefunden. Ich hab die beiden Hex-Dateien mal angehängt. Ich glaub aber nicht, dass das was bringt. Ich hab jetzt einen User Guide gefunden, in dem beschrieben steht wie man die serielle Schnittstelle konfigurieren muss. Ich werd mir den mal durchlesen. Vllt. finde ich ja so eine Lösung.
Juhu, es geht! Ich hab ein weiteres Beispielprogramm gefunden, in dem beschrieben steht welche Register für den UART gesetzt werden müssen. Das hat zwar zuerst auch nicht funktioniert, nachdem ich aber noch ein wenig in dem User Guide gestöbert hab ist es mir dann doch noch gelungen Daten zu übertragen:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
Hab das mit der Baudrate aber noch nicht verstanden. Muss ich nochmal nachlesen. Außerdem wird mir der Output zweimal auf der Konsole angezeigt. Aber das kann auch sein, dass das an der Konsole liegt. Muss ich noch nachprüfen... Danke für eure Hilfe!
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.