hallo! zum prüfren meine Rechnungen im Program habe ich daten per UART am Hyper T ausgegeben. daten könne schon am Terminal ankommen. aber die Routine läuft in ein interrupt, das 1ms zykluszeit haben soll. die Ausgabecode dauer schon 0,4s und damit ann das programm nicht gut laufen. die Baudrate habe ich 9600 ,8 Datenbit und 1 stopbit und keine parität wurde eingestellt. 1. ich will die die code für ausgabe von dem routine wo anders schreiben (in main z.B) , damit die routine für meine berechnung seine zykluszeit richtig macht.meine einstellung sind Baudrate 9600, 8 datenbit, 1 stopbit muss unbedingt echtzeit programmiert? oder kann mann anders in main schreiben, so dass sogar die daten richtig am hyper T und die zykluszeit des Interrupt(1ms) richtig funktioniert.? 2.muss unbedingt die Baudrate auf 19200 ändern?
Sei so nett und lies Dir das noch mal durch. Meinst Du wirklich, daß andere Leute verstehen, was Du mitteilen willst?
Rufus t. Firefly schrieb: > Sei so nett und lies Dir das noch mal durch. Meinst Du wirklich, daß > > andere Leute verstehen, was Du mitteilen willst? hallo Rufus, entschuldigung wenn ich mich nicht richtig erklärt habe. nicht schlimm anders könnte ich o formulieren. ich benutze ein Timer-interrupt , das alla 1ms ein Interrupt auslösen soll.in dieser Zeit wird ein Rechenprogrambearbeitet. von diesem program will ich die Daten bzw. Rechnungsergebnisse mit UART am Hyper Terminal von PC ausgeben. aus internet habe einige code dafür benutzt. und kann ich schon nach jeder rechnung was ausgeben mit folgende code. sprintf(array,"w=%d\n",w); write(0,array); #define CR 0x0D int putchar(int ch) { /* Write character to Serial Port */ if (ch == '\n') { while(!(0x020==(COMSTA0 & 0x020))) {} COMTX = CR; /* output CR */ } while(!(0x020==(COMSTA0 & 0x020))) {} return (COMTX = ch); } int getchar (void) { /* Read character from Serial Port */ while(!(0x01==(COMSTA0 & 0x01))) {} return (COMRX); } void write (int file, char * ptr ) { //int i; // for (i = 0; i < len; i++) while(!(*ptr == 0)) putchar (*ptr++); //return len; } damit bekommt man schon die ergebnisse im HT, nur dass, dieses Method viel zeit braucht ungefähr 0,5s für die ganze rutine. der timer-interrupt soll nur 1ms dauert. deswegen finde ich nicht richtig die ausgabe indem routine Berechnung zu machen. will in dem Main machen, aber soll irgendwie anpassen, damit es nich so viel zeit braucht oder anders schreiben? das sind meine gedanken. ich bin nicht so fit in softwareentwicklung. will aber gerne lernen. vielen dank
Bei nur 9600 baud klappt das nie in 1ms. Pobier mal aus, wie schnell dein rs232 Interface läuft - mit etwa Glück gehen 115200 baud oder so, das spart viel Zeit.
Überleg mal, wie lange die Übertragung eines Zeichens bei 9600 Baud braucht, und zähle mal, wieviele Zeichen Du in Deiner Interruptroutine ausgeben willst.
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.