PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Asuro "kurzschließen" (wie ein Auto)



HermannSW
10.06.2007, 00:08
Hi,

ich hatte schon ab und zu bemerkt, daß der Asuro auch mal früher als 3 Sekunden nach dem Einschalten mit dem eigentlichen Programm startete.

In den Hilfstexten zu DoctorAsuro 1.0 von Arexx-Henk fand ich nun die Antwort:
Nur ... Infolge eines Softwarefehlers im ASURO-Bootloaderprogramm wird die orangefarbene SystemLed manchmal lediglich eine einzelne Sekunde und keine drei Sekunden aufleuchten. Sobald das ASURO-Bootloaderprogramm fehlerhafte Signale empfängt, startet das System das Benutzerprogramm bereits nach einer Sekunde und nicht nach 3 Sekunden. Diese Bedingung kann auftreten falls keine Registertaste aktiviert wurde. DoctorAsuro schickt dem ASURO zur Überprüfung der Kommunikation jede Sekunde eine Infrarotnachricht. Das Bootloaderprogramm wird diese Nachricht als falsches Flashkommando an das Bootloaderprogramm interpretieren und sofort das Benutzerprogramm starten.

Und so kann man seinen Asuro einfach "kurzschließen" (sofort nach dem Einschalten des Asuro ausführen!):
C:\>echo "Los geht's" >com4(mein USB-Transceiver hängt an COM4)

Hier ein minimales Programm zum Testen:
#include <asuro.h>

int main(void)
{
Init();

StatusLED( OFF );
BackLED(ON,ON);

while (1) ;

return 0;
}

Asuro-n00b
10.06.2007, 02:37
Hey klasse hab meinen Asuro auch gerade über RS232(bei mir Com1) "kurzgeschlossen".
Interessant, weiß jemand wie man rausbekommt welchen Code das Flashprogramm zu Anfang sendet, damit der Asuro es nicht als "Fehlerhaften Code" wertet?

Edit:
Ich hab's rausgefunden.
Wenn man im Flashprogramm auf "Programm" klickt, dann sendet es sehr schnell hintereinander das Wort "Flash".
Das konnte ich über einen zweiten Tranceiver rausfinden. Dabei war auch gut zu beobachten, wie er den Programmcode an Asuro sendet.
Leider nur komische Zeichen. In der hex-Datei sind nur Zahlen enthalten.

:1000000012C02BC02AC056C028C027C026C025C099
:1000100024C023C022C021C020C01FC01EC01DC0DC

Die letzte Zeile heißt in jeder Asuro hex file
00000001FF.
Die sagt bestimmt dem Prozessor, dass das Programm fertig reingeladen ist.
Was sind das für Zeichen, die das flashtool da sendet? Ist das Maschinencode?

Wenn ein "t" gesendet wird, hat das Flashtool keine Rückmeldung bekommen und sendet es daher noch einmal.
Die Zeichenfolge pro gesendete page beträgt bei mir zwischen 62-65 Zeichen.

Edit:
Der Asuro antwortet sobald er "Flash" empfangen hat mit "ASURO" (er gibt sich also zu erkennen ;) ) Das Flash-Programm schreibt dann
Connect to ASURO --> OK !
Dann sendet es nocheinmal "Flash" an Asuro und beginnt dann Paketweise die Zeichen zu senden.

HermannSW
10.06.2007, 06:42
Hallo,
...
Die letzte Zeile heißt in jeder Asuro hex file
00000001FF.
Die sagt bestimmt dem Prozessor, dass das Programm fertig reingeladen ist.Ja.

Was sind das für Zeichen, die das flashtool da sendet? Ist das Maschinencode?
Ja, für mehr Informationen siehe:
http://www.asurowiki.de/pmwiki/pmwiki.php/Main/AsuroHexfiles

radbruch
10.06.2007, 09:44
Hallo

Lustig was der Kleine so alles kann. Mit einer IR-Fernbedienung kann man ihn auch "kurzschliesen".

Am Ende der Übertragung kommt noch ein "ok", vermutlich vom asuro.
(https://www.roboternetz.de/phpBB2/zeigebeitrag.php?p=287985#287985)

Gruß

mic

[Edit]
Einfache Versuche den Startzeitunterschied zu messen scheiterten daran, dass kein mir bekannter Timerwert das Init() von asuro.c überlebt. Eigenlich müste ja ein Timer im Bootlader gestartet werden um die IR-Kommunikation zu ermöglichen und um die Start-Wartezeit zu messen. Aber wo ist der Wert gespeichert und wie greift man nach dem eigentlichen Programmstart darauf zu?

HermannSW
10.06.2007, 12:54
Hallo

Lustig was der Kleine so alles kann.:)

...
[Edit]
Einfache Versuche den Startzeitunterschied zu messen scheiterten daran, dass kein mir bekannter Timerwert das Init() von asuro.c überlebt. Eigenlich müste ja ein Timer im Bootlader gestartet werden um die IR-Kommunikation zu ermöglichen und um die Start-Wartezeit zu messen. Aber wo ist der Wert gespeichert und wie greift man nach dem eigentlichen Programmstart darauf zu?

Auf S. 109(114) der Datei Doc/AVRInstructionSet.pdf von der Asuro-CD findet man in Abschnitt 7.6.6 The .initN Sections, wie man etwas direkt nach einem Reset noch vor Aufruf von main() ausführen lassen kann [__init()].

Außerdem mußt Du ja auch nicht die Asuro-Library für diesen Zweck verwenden, man kann auch ganz ohne Asuro-Library sinnvolle Dinge programmieren, siehe z.B.:
https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=29635

damaltor
13.06.2007, 14:40
die zeile

:000...1FF bedeutet, dass der programmcode hier zuende ist. darum 0000. das 1FF ist die prüfsumme zu 0000 oder?

das hexfile selbst ist schon maschinencode. es wird in der hexadezimalen form übertragen, da gibts halt auch die buchstaben A-F =)

Sternthaler
13.06.2007, 17:13
Hallo zusammen.
Das übertragen Zeug ":1000000012C02BC02AC056C028C027C026C025C099 " ist sogenanter Intel-Hex-Code und steht auch so in den test.hex-Dateien.

Folgender Aufbau:


: Konstant
10 Anzahl Datenbytes (HEXZ-Zahl, also dezimal 16 Byte)
0000 Adresse, an die das Erste Datenbyte zu speichern ist
00 (fast) konstant. Hier gibt es noch ein paar andere Codes
12 C0 2B C0 2A C0 56 C0 28 C0 27 C0 26 C0 25 C0 Daten: 16 * 2 Nibbel (Halbbyte)
99 Prüfsumme (Bin nicht sicher, meine aber mit 'Anzahl Datenbyte')

: Konstant
00 0 Datenbytes
0000 Adresse, hier ohne Bedeutung
01 <--- Stopcode
FF Prüfziffer