Rechenzeitbedarf beim Zahlenausgabe
Das hatte mich nun doch überrascht. Bei einem Testaufbau hatte ich schnell eine Dummyausgabe geschrieben, die mir in Abständen etwas über UART aufs Terminal ausgibt. Der Code im Hauptprogrammabschnitt als Auszug und dazu die Subroutine für die Zahlenausgabe:
Code:
/ - - - - - - - - - - - - - - -
...
if ( Isec_lk2 == sd ) // Testweise Zeitanzeige und Wobbeln der irLED
{ //
Isec_lk2 = 0; //
uputs0 ("\r\tBoardzeit [sek]\t"); //
uputs0u ( Isecundn ); //
uputs0 ("\ttupsi = "); //
uputs0u ( Izeit_1 ); //
if ( Isecundn == 60 ) sd = 60; // Ab hier Anzeige alle Minuten
if ( Isecundn == 10 ) IRLEDset(275); //
if ( Isecundn == 20 ) IRLEDset( 10);
if ( Isecundn == 30 ) IRLEDset(127);
if ( Isecundn == 300 ) sd = 300; // Ab hier Anzeige alle fünf Minuten
} // Ende if
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// ============================================================================== =
// ============================================================================== =
// Hilfsfunktion, um Zahlen über das UART auszugeben
void uputs0u (uint16_t val) // Zahlen unsigned_Int_16 über UART0 ausgeben
{
char buffer[8];
uputs0 ( utoa(val, buffer, 10) );
}
// ============================================================================== =
// ============================================================================== =
Und siehe da, der Controller braucht für eine Zehnerpotenz mehr gleich etliche Mikrosekunden mehr. Zur Zeitberechnung: mega168/20MHz, ein tupsi ist eine Zeitscheibe (des internen heart beat) von 50 µs - - also tausend Maschinenzyklen!! Und wenn ich eine Zehnerpotenz mehr über UART ausgeben möchte, rechnet der Ärmste gleich drei von diesen Zeitscheibchen länger . . . das hätte ich nicht gedacht:
Code:
Boardtimer on
C506x00 CiCo m168/babyo/20MHz 14. Sep 2013 18:20
CIR-Controller, irLED auf PB1
UART (PD) mit 57 k Boardzeit [sek] 10 tupsi = 19958
Boardzeit [sek] 20 tupsi = 19958
Boardzeit [sek] 30 tupsi = 19958
Boardzeit [sek] 40 tupsi = 19958
Boardzeit [sek] 50 tupsi = 19958
Boardzeit [sek] 60 tupsi = 19958
Boardzeit [sek] 120 tupsi = 19954
Boardzeit [sek] 180 tupsi = 19954
Boardzeit [sek] 240 tupsi = 19954
Boardzeit [sek] 300 tupsi = 19954
Boardzeit [sek] 600 tupsi = 19954
Boardzeit [sek] 900 tupsi = 19954
Boardzeit [sek] 1200 tupsi = 19951
Boardzeit [sek] 1500 tupsi = 19951
Boardzeit [sek] 1800 tupsi = 19951
Boardzeit [sek] 2100 tupsi = 19951
Boardzeit [sek] 2400 tupsi = 19951
Boardzeit [sek] 2700 tupsi = 19951
Boardzeit [sek] 3000 tupsi = 19951
Boardzeit [sek] 3300 tupsi = 19951
Boardzeit [sek] 3600 tupsi = 19951
Boardzeit [sek] 3900 tupsi = 19951