Kommentar: Einfügen von HTML im Kommentar: Link einfügen: <a href="LINKURL" target="_blank">LINKTITEL</a> Bild einfügen: <img src="BILDURL"> Text formatieren: <b>fetter Text</b> <i>kursiver Text</i> <u>unterstrichener Text</u> Kombinationen sind auch möglich z.B.: <b><i>fetter & kursiver Text</i></b> C Quellcode formatieren: <code>Quellcode</code> BASIC Quellcode formatieren: <basic>Quellcode</basic> (Innerhalb eines Quellcodeabschnitts ist kein html möglich.) Wichtig: Bitte mache Zeilenumbrüche, bevor Du am rechten Rand des Eingabefeldes ankommst ! -> I > > > Ich brauche eine möglichst schnelle Datenausgabe über die RS232. > > > Beim 1.Progr. mit IRQ funkt. die Datenausgabe nur mit Warteschleife. Das ist > > > unschön - kostet wertvolle Rechenzeit. > > > Kann man da noch was machen ? > > > > > > > > > Das 2. Programm ohne IRQ funktioniert. > > > > > > > > > > > > > > > > > > /* > > > Datenausgabe über die RS232 mit IRQ > > > Die Ausgabe funktioniert nur mit der Warteschleife nach Serial_WriteText > > > Nach dem Übertragen muß das Programm mit einem Hardware Reset gestartet werden > > > > > > */ > > > > > > byte buffer[SERIAL_BUF(25,20)]; > > > > > > void main(void) > > > { > > > char text1[20], text2[20]; > > > text1= "Hello World! "; > > > text2= "1234567890 "; > > > word counter; > > > > > > // Init Schnittstelle mit xx baud, 8 Bit, 1 Stop Bit, keine Parität > > > // 25 byte Empfangspuffer - 20 byte Sendepuffer > > > Serial_Init_IRQ(0,buffer,25,20,SR_8BIT|SR_1STOP|SR_NO_PAR,SR_BD38400); > > > > > > while(1) > > > { > > > Serial_WriteText(0,text1); > > > counter=400; while(counter--); // Warteschleife ca. 5ms > > > Serial_WriteText(0,text2); > > > counter=400; while(counter--); // Warteschleife ca. 5ms > > > > > > > > > } > > > > > > > > > } > > > > > > ------------------------------------------------------------------------------- > > > > > > /* > > > Datenausgabe über die RS232 ohne IRQ > > > > > > */ > > > > > > > > > void main(void) > > > { > > > char text1[20], text2[20]; > > > text1= "Hello World! "; > > > text2= "1234567890 "; > > > > > > Serial_Init(0,SR_8BIT|SR_1STOP|SR_NO_PAR,SR_BD38400); > > > > > > while(1) > > > { > > > Serial_WriteText(0,text1); > > > Serial_WriteText(0,text2); > > > > > > } > > > > > > > > > } > > > > > > > > > > > > > > > Hallo Hannes, > > > > Vielleicht lässt sich das mit einem Timerinterrupt lösen. > > > > Gruß Torsten > > > > <code> > > > > /*** SendSerialFast.cc ***/ > > //------------------------------------------------ > > > > #define BOOL byte > > > > //------------------------------------------------ > > > > byte gaby_buffer[SERIAL_BUF(25,20)]; > > char gac_text_1[20]; > > char gac_text_2[20]; > > BOOL gbo_state; > > BOOL gbo_ready; > > > > //------------------------------------------------ > > > > void SendSerialValue(void) > > { > > int i_irqcnt; > > > > if(gbo_ready) > > { > > gbo_state = gbo_state ^ 0x01; > > > > if(gbo_state) > > Serial_WriteText(0, gac_text_1); > > else > > Serial_WriteText(0, gac_text_2); > > > > gbo_ready = false; > > } > > > > i_irqcnt = Irq_GetCount(INT_TIM0COMP); > > } > > > > //------------------------------------------------ > > > > void main(void) > > { > > word w_counter_1; > > word w_counter_2; > > > > gac_text_1 = "text 1 value: 00000"; > > gac_text_2 = "text 2 value: 00000"; > > > > // Init Schnittstelle mit xx baud, 8 Bit, 1 Stop Bit, keine Parität > > // 25 byte Empfangspuffer - 20 byte Sendepuffer > > Serial_Init_IRQ( > > 0, > > gaby_buffer, > > 25, > > 20, > > SR_8BIT | SR_1STOP | SR_NO_PAR, > > SR_BD38400 > > ); > > > > // Interrupt Routine definieren > > Irq_SetVect(INT_TIM0COMP, SendSerialValue); > > > > // Zeit festlegen und Timer0 starten > > Timer_T0Time(85, PS0_1024); > > > > while(1) > > { > > if(gbo_ready) > > continue; > > > > if(gbo_state) > > { > > w_counter_2++; > > Str_Printf(gac_text_2, "text 2 value: %5u", w_counter_2); > > gbo_ready = true; > > } > > else > > { > > w_counter_1 = w_counter_1 + 10; > > Str_Printf(gac_text_1, "text 1 value: %5u", w_counter_1); > > gbo_ready = true; > > } > > > > } > > } > > > > //------------------------------------------------ > > </code> > > > > Hallo Torsten, > > das Programm bringt im Prinzip nichts. Ich will ja nicht nur 2 Strings timerverzögert > ausgeben, sondern eine Vielzahl von Ausgaben in mehreren Funktionen machen. > > Wie es scheint muss die Ausgabe eines Strings erst beendet sein, bevor der nächste > ausgegeben wird. Dazu müsste ich wissen, wann die Ausgabe abgeschlossen ist. > Mich würd auch interessieren, ob während der seriellen Ausgabe das Hauptprogramm weiter > abgearbeitet wird oder in der Zeit still steht. Im Manual steht dazu herzlich wenig. > >