Projekte
BirgerT
nibo2_fork#01
test_debugutil.h
Projekte
Forum
Doku
Öffentliche Projekte
Startseite
Beispielprogramme
Projekte von anderen
Welcome
Username
Passwort
Eingeloggt bleiben
Zugangsdaten vergessen?
Registrieren
Projektverwaltung
⇨ Please choose! ⇦
——————————————————
✎ Create new project...
★ Browse existing projects...
——————————————————
⚬ MotorTest#1
⚬ C Tutorial 8#1
⚬ NIBO2 C Project#1
⚙ C Tutorial 15#1
⚬ 2010_11_18_el_test001#1
nibo2_fork#01
BSD_license.h
bt_lib_debugutil.c
bt_lib_debugutil.h
bt_lib_glcd.c
bt_lib_glcd.h
bt_lib_grafix.c
bt_lib_grafix.h
bt_lib_terminal.c
bt_lib_terminal.h
bt_lib_uart.c
bt_lib_uart.h
bt_lib_utils.h
lumpylumpy.h
main.c
nibo2_audio.c
nibo2_audio.h
nibo2_copro.c
nibo2_copro.h
nibo2_copro_cmd.h
nibo2_font.h
nibo2_global.h
nibo2_main_menu.h
nibo2_pwm_leds.c
nibo2_pwm_leds.h
nibo2_register.c
nibo2_register.h
nibo2_sensors.c
nibo2_sensors.h
test_debugutil.h
test_gfx_draw.h
xmas1.h
Project details
Compiler settings
Nachrichten
Sie sind nicht eingeloggt.
Neuigkeiten
★
NiboRoboLib 3.6
2017-01-17: Neue Version 3.6
★
NiboRoboLib 3.4.1
2016-04-16: Neue Version 3.4.1
★
Coding Tutorial
2015-11-22: Jetzt auch für den NIBO burger!
Site-Statistic
7426 private projects
385 public projects
16180353 lines compiled
58212 builds
NIBO
@
nibo2_fork_01/test_debugutil.h [read only]
////////////////////////////////////////////////////////////////////////// // // TEST OF DEBUGUTIL == AVR MCU UART Terminal Debugger // // (c) Birger Töpelmann toepelmann(A)web.de Version 141015a // // Zum Testen der Funktionen, Programme, Speicherinhalte und Timings // von AT-Mega MCU im Zielsystem über die serielle Schnittstelle und // mit einem (VT100/ANSI) Terminalprogramm auf dem PC. // // Diese Datei muss 2-mal im Hauptprogramm eingefügt werden: // 1. ausserhalb (vor) der main() = // Prototypen, Konstanten, Testfunktionen einfügen // 2. innerhalb der main() = // Ausführen der while() Schleife bis EXIT Kommando // nach dem EXIT wird main() fortgesetzt // ////////////////////////////////////////////////////////////////////////// // #ifndef _TEST_DEBUG_H_ #define _TEST_DEBUG_H_ // // BSD License see "BSD_license.h" // #include "BSD_license.h" // #include "bt_lib_debugutil.h" // ////////////////////////////////////////////////////////////////////////// // // ein paar interessante Experimente // ////////////////////////////////////////////////////////////////////////// // const char debug_test_menue[] PROGMEM = { "\n\n Experimente: Interessante Laufzeit Tests\n\n" " 1 = Messen und Anzeigen der RAM Speicherzugriffe \n" " 2 = Zeitvergleiche Kopieren aus RAM, PROGMEM, EEPROM\n" " 3 = Zeitvergleiche Zahlenkonvertierung \n" " 4 = delay_ms() in us \n" " 5 = Speicherdump Bytes \n" " 6 = Speicherdump Words \n" " 7 = UART1 Zeichen senden [us]\n" " a = ASCII Tabelle 128..254 an Terminal\n" " k = ASCII Zeichen vom Terminal anzeigen\n\n" " x = Experimente beenden -- LEER-Taste = Menue anzeigen\n" }; // // // Prototypen für Test 3 werden eigene Zahlenkonvertierungen benötigt void deb_put_char(char ch); char deb_bin2asc(uint8_t bin); void deb_print_h8(uint8_t val); void deb_print_h16(uint16_t val); void deb_print_i16d(int16_t val); void deb_print_u16d(uint16_t val); void deb_print_i8d(int8_t val); void deb_print_u8d(uint8_t val); void deb_print_99(uint8_t val); // #define READ_SIZE 255 // uint8_t testbuffer[READ_SIZE]; // der Zielbuffer uint8_t count = READ_SIZE; // Anzahl der Operationen uint8_t tempbyte; // Temp.-Zeichen uint8_t* buff_ptr = testbuffer; // term_buffer uint8_t* lese_ptr; // RAM Lese Zeiger int16_t wordzahl; // o. 16Bit Int // ////////////////////////////////////////////////////////////////////////// // // ein paar interessante Experimente // ////////////////////////////////////////////////////////////////////////// // void test_0(){ /////////////////////////////////////////////// //------------------------------------------- debug_printP(PSTR("\nus-Stoppuhr(Start/Stopp) ohne Aktion:")); debug_stoppuhr_start('u'); debug_stoppuhr_stop(); } // // Test des relativen Zeitbedarfs der verschiedenen Speicherzugriffarten // void test_1(){ /////////////////////////////////////////////// count = READ_SIZE; debug_printP(PSTR("\n\nVERGLEICH DER ZUGRIFFSZEITEN mit ")); debug_printf("%d Bytes\n",count); test_0(); //------------------------------------------- debug_printP(PSTR("\nRAM zu RAM mit Pointer++:")); buff_ptr = testbuffer; // RAM Schreibzeiger lese_ptr = 0; // RAM Lese Zeiger count = READ_SIZE; // Anzahl der Operationen debug_stoppuhr_start('U'); do { *buff_ptr++ = *lese_ptr++; // Bytes in Buffer kopieren } while (--count > 0); debug_stoppuhr_stop(); //------------------------------------------- debug_printP(PSTR("\nRAM zu RAM mit Pointer--:")); buff_ptr = testbuffer + READ_SIZE; // RAM Schreibzeiger lese_ptr = (uint8_t*)0 + READ_SIZE; // RAM Lese Zeiger count = READ_SIZE; // Anzahl der Operationen debug_stoppuhr_start('U'); do { *buff_ptr-- = *lese_ptr--; // Bytes in Buffer kopieren } while (--count > 0); debug_stoppuhr_stop(); //------------------------------------------- debug_printP(PSTR("\nRAM zu RAM mit ram[Index--]:")); buff_ptr = testbuffer; // RAM Schreibzeiger lese_ptr = 0; // RAM Lese Zeiger count = READ_SIZE; // Anzahl der Operationen debug_stoppuhr_start('U'); do { buff_ptr[count] = lese_ptr[count]; // Bytes in Buffer kopieren } while (--count > 0); debug_stoppuhr_stop(); } // test_1 void test_2(){ /////////////////////////////////////////////// count = READ_SIZE; uint8_t loops = count; debug_printP(PSTR("\n\nVERGLEICH DER SPEICHER ZUGRIFFSZEITEN [us]\n")); debug_printP(PSTR("Ziel = RAM -------- RAM ------- --------- FLASH ------- --------- EEPROM-------\n")); debug_printP(PSTR("BYTE Count uint8_t*++ memcpy() pgm_rb(ptr++) memcpy_P() eep_rb(ptr++) eep_block()\n")); do { debug_printf(" %3d",count); debug_printP(PSTR(" ")); //------------------------------------------- // debug_printP(PSTR("\nRAM zu RAM mit Pointer++:")); buff_ptr = testbuffer; // RAM Schreibzeiger lese_ptr = 0; // RAM Lese Zeiger loops = count; // Anzahl der Operationen debug_stoppuhr_start('u'); do { *buff_ptr++ = *lese_ptr++; // Bytes in Buffer kopieren } while (--loops > 0); debug_stoppuhr_stop(); debug_printP(PSTR(" ")); //------------------------------------------- //debug_printP(PSTR("\nRAM zu RAM mit memcpy():")); buff_ptr = testbuffer; // RAM Schreibzeiger lese_ptr = 0; // RAM Lese Zeiger loops = count; // Anzahl der Operationen debug_stoppuhr_start('u'); memcpy(buff_ptr,lese_ptr,loops); // Bytes in Buffer kopieren debug_stoppuhr_stop(); debug_printP(PSTR(" ")); //------------------------------------------- //debug_printP(PSTR("\nFLASH zu RAM mit Pointer++:")); buff_ptr = testbuffer; // RAM Schreibzeiger lese_ptr = 0; // RAM Lese Zeiger loops = count; // Anzahl der Operationen debug_stoppuhr_start('u'); do { *buff_ptr++ = pgm_read_byte(lese_ptr++);// Bytes kopieren } while (--loops > 0); debug_stoppuhr_stop(); debug_printP(PSTR(" ")); //------------------------------------------- //debug_printP(PSTR("\nflash zu RAM mit memcpy_P():")); buff_ptr = testbuffer; // RAM Schreibzeiger lese_ptr = 0; // RAM Lese Zeiger loops = count; // Anzahl der Operationen debug_stoppuhr_start('u'); memcpy_P(buff_ptr,lese_ptr,loops); // Bytes in Buffer kopieren debug_stoppuhr_stop(); debug_printP(PSTR(" ")); //------------------------------------------- //debug_printP(PSTR("\nEEPROM zu RAM mit Pointer++:")); buff_ptr = testbuffer; // RAM Schreibzeiger lese_ptr = 0; // RAM Lese Zeiger loops = count; // Anzahl der Operationen debug_stoppuhr_start('u'); do { *buff_ptr++ = eeprom_read_byte(lese_ptr++);// Bytes kopieren } while (--loops > 0); debug_stoppuhr_stop(); debug_printP(PSTR(" ")); //------------------------------------------- //debug_printP(PSTR("\nEEPROM zu RAM als Block:")); buff_ptr = testbuffer; // RAM Schreibzeiger lese_ptr = 0; // RAM Lese Zeiger loops = count; // Anzahl der Operationen debug_stoppuhr_start('u'); eeprom_read_block(buff_ptr,lese_ptr,loops); debug_stoppuhr_stop(); debug_printP(PSTR("\n")); if (count == READ_SIZE) { count = 0x80; } else { count >>= 1; } } while (count>0); test_0(); } // test_2 void test_3(){ /////////////////////////////////////////////// Zahlenkonvertierung nach ASCII #define TESTWERT -32768 debug_printP(PSTR("\nZahlenkonvertierung nach ASCII\n")); test_0(); // debug_printP(PSTR("\n\nVERGLEICH DER SPEICHER ZUGRIFFSZEITEN [us]\n")); debug_printP(PSTR("\n ------- sprintf() -------- --------- itoa() ------- ------- bt_lib_print -----\n")); debug_printP(PSTR(" hex dez hex dez hex dez\n")); uint16_t wz_loop = 0x8000; uint16_t wz_mask = wz_loop; do { wordzahl = wz_loop; // Testwert konvertieren //------------------------------------------- //debug_printP(PSTR("\nHEX mit sprintf")); buff_ptr = testbuffer; // RAM Schreibzeiger debug_stoppuhr_start('u'); sprintf((char*)buff_ptr,"%04x",wordzahl); debug_stoppuhr_stop(); debug_printf(" %s ",testbuffer); //------------------------------------------- //debug_printP(PSTR("\nDEZ mit sprintf")); buff_ptr = testbuffer; // RAM Schreibzeiger debug_stoppuhr_start('u'); sprintf((char*)buff_ptr,"% 6d",wordzahl); debug_stoppuhr_stop(); debug_printf(" %s ",testbuffer); //------------------------------------------- //debug_printP(PSTR("\nHEX mit itoa")); buff_ptr = testbuffer; // RAM Schreibzeiger debug_stoppuhr_start('u'); itoa(wordzahl,(char*)buff_ptr,16); debug_stoppuhr_stop(); debug_printf(" %4s ",testbuffer); //------------------------------------------- //debug_printP(PSTR("\nDEZ mit itoa")); buff_ptr = testbuffer; // RAM Schreibzeiger debug_stoppuhr_start('u'); itoa(wordzahl,(char*)buff_ptr,10); debug_stoppuhr_stop(); debug_printf(" %6s ",testbuffer); //------------------------------------------- //debug_printP(PSTR("\nHEX mit bt_lib.print_h16")); buff_ptr = testbuffer; // RAM Schreibzeiger debug_stoppuhr_start('u'); deb_print_h16(wordzahl); *buff_ptr = 0; debug_stoppuhr_stop(); debug_printf(" %4s ",testbuffer); //------------------------------------------- //debug_printP(PSTR("\nDEZ mit bt_lib.print_i16d")); buff_ptr = testbuffer; // RAM Schreibzeiger debug_stoppuhr_start('u'); deb_print_i16d(wordzahl); *buff_ptr = 0; debug_stoppuhr_stop(); debug_printf(" %6s ",testbuffer); debug_printP(PSTR("\n")); wz_loop >>= 1; if (wordzahl < -1) { wz_mask = 0x8000; } else { wz_mask = 0; } wz_loop |= wz_mask; } while (wz_loop > 0); } // test_3 void test_4_loop(uint8_t scale, uint8_t count, uint8_t cli){ /////////////////////////////////////////////// wie lange ein delay_ms() wirklich dauert debug_printP(PSTR("\n..und wie lange ein delay_ms(xx) wirklich dauert:\n")); do { debug_printf("\ndelay_ms(%u):",count); debug_stoppuhr_start(scale); if (cli) cli(); delay_ms(count); debug_stoppuhr_stop(); } while ((count >>= 1) > 0); } // test_4_loop void test_4_prompt(){ debug_printP(PSTR(" -- weiter geht's mit [LEER] Taste\n")); debug_wait_for_char(' '); } void test_4(){ /////////////////////////////////////////////// wie lange ein delay_ms() wirklich dauert test_0(); uint8_t count = 34; // ---------------------------------- debug_printP(PSTR("\n\nTest Overflow Flag -- INTs sind disabled\n")); debug_printf("\ndelay_ms(%u):",count); debug_stoppuhr_start('U'); delay_ms(count); debug_stoppuhr_stop(); // ---------------------------------- test_4_loop('u',32,0); debug_printP(PSTR("\n\nund in ms -- mit cli():")); test_4_prompt(); test_4_loop('m',64,1); debug_printP(PSTR("\n\nund in ms -- ohne cli():")); test_4_prompt(); test_4_loop('m',64,0); debug_printP(PSTR("\n\nUUUPS - wass\'n das ? ? ? ? ?..")); //--------------------------------------------------------------------------------- Auf der Suche nach dem Störenfried debug_printP(PSTR("\nWer oder was stoert das delay_ms()\n? ")); debug_printP(PSTR("\nTimer 1 Interrupts aus\n")); test_4_prompt(); // Timer 1 stoppen uint8_t temp_tccr1b = TCCR1B; // TCCR1B = 0; test_4_loop('m',64,0); TCCR1B = temp_tccr1b; // Timer 1 wieder starten //--------------------------------------------------- debug_printP(PSTR("\n\nWarten bis UART fertig..?")); test_4_prompt(); while ( !(UCSR0A & (1<<TXC)) ) {NOP;} // Warten bis UART fertig // TCCR1B = 0; test_4_loop('m',64,0); //--------------------------------------------------- debug_printP(PSTR("\n\nUART Interrupts abschalten..?")); test_4_prompt(); // while ( !(UCSR0A & (1<<TXC)) ) {NOP;} // Warten bis UART fertig count = 64; do { debug_printf("\ndelay_ms(%u):",count); debug_stoppuhr_start('m'); #if 1 // Disable UDRE Interrupt UCSR0B &= ~(1<<UDRIE); // Disable TXC Interrupt UCSR0B &= ~(1<<TXCIE); // Disable UDRE Interrupt UCSR1B &= ~(1<<UDRIE); // Disable TXC Interrupt UCSR1B &= ~(1<<TXCIE); #endif // ---------------------------------- delay_ms(count); UCSR0B = (1<<RXCIE) | (1<<TXCIE) | (1<<UDRIE) | (1<<RXEN) | (1<<TXEN); debug_stoppuhr_stop(); } while ((count >>= 1) > 0); //--------------------------------------------------- debug_printP(PSTR("\n\n=Zeichensalat - to be continued..?")); test_4_prompt(); } // test_4 void test_5(){ /////////////////////////////////////////////// Byte Speicherdump Test debug_memory_dump(BYTES,RAM,debug_stringbuffer,80); debug_memory_dump(BYTES,PGM,(void*)uart_info_str,80); debug_memory_dump(BYTES,EEP,0,64); } // test_5 void test_6(){ /////////////////////////////////////////////// Word Speicherdump Test debug_memory_dump(WORDS,RAM,debug_stringbuffer,40); debug_memory_dump(WORDS,PGM,(void*)uart_info_str,40); debug_memory_dump(WORDS,EEP,0,32); } // test_6 void test_7_loop(uint16_t set_u1){ char info[14]; // uint16_t test_TX_time; uint16_t test_UDRE_time; debug_printP(PSTR("\nUART Parameter TXC Time UDRE Time\n")); uint8_t idx = 0; for ( idx = 1; idx < 12; idx++) { uint16_t u1_set = set_u1 + (idx << 12); uart1_init(u1_set); uart1_info(info); debug_printf("%s",info); debug_printP(PSTR(" ")); UCSR1A |= (1<<TXC); // Flags resetten UCSR1A |= (1<<UDRE); UCSR1B = (1<<TXEN); UDR1 = 88; // Test mit einem Zeichen vorweg while ( !(UCSR1A & (1<<UDRE)) ) {;} UCSR1A |= (1<<TXC); // Flags resetten UCSR1A |= (1<<UDRE); debug_stoppuhr_start('u'); UDR1 = 88; while ( !(UCSR1A & (1<<UDRE)) ) {;} TCCR3B = 0; // Zeit anhalten test_UDRE_time = TCNT3; // Zeit auslesen TCCR3B = (1<<CS31); // Zeit läuft wieder while ( !(UCSR1A & (1<<TXC)) ) {;} debug_stoppuhr_stop(); debug_printP(PSTR(" ")); TCNT3 = test_UDRE_time; debug_stoppuhr_stop(); debug_printP(PSTR("\n")); } // for idx } // test7loop void test_7(){ ////////////////////////////////////// UART1 Zeichen senden test_7_loop(0x0801); debug_printP(PSTR("\n")); test_7_loop(0x0811); debug_printP(PSTR("\n")); test_7_loop(0x0802); debug_printP(PSTR("\n")); test_7_loop(0x0812); debug_printP(PSTR("\n")); } void test_a(){ /////////////////////////////////////////////// Zeichentest > 128 im Terminal count = 128; debug_printP(PSTR("\nhex - dez - char\n")); do { debug_printf("%x - %d - %c \n", count,count,count); } while (++count < 255); // Klötzchentest für Grafikanzeige // debug_printP(PSTR("\n\xdb\xdb\xdf\xdf\xdf\xdb\xdf\n\xdc\xdb\xdc\xdc\xdc\xdb\xdb\n")); } // test_a void test_k(){ /////////////////////////////////////////////// Zeichentest Terminal Tasten debug_printP(PSTR("\nBeenden mit [Strg]+[x]\n")); debug_printP(PSTR("\nhex - dez - char\n")); do { count = debug_wait_for_char(0); if (count > 0) { debug_printf("%02x - %3d - %c \n", count,count,count); } } while (count != 0x18); // Strg+X } // test_k // //--------------------------------------------------------------- // // für Test 3 werden eigene Zahlenkonvertierungen benötigt // void deb_put_char(char ch){ *buff_ptr++ = ch; } // char deb_bin2asc(uint8_t bin){ bin &= 0x0f; if(bin <= 9) return bin + '0'; else return bin + 'A' -10; } ////////////////////////////////////////////////////////////////////////// void deb_print_h8(uint8_t val){ deb_put_char(deb_bin2asc(val/16)); deb_put_char(deb_bin2asc(val)); } ////////////////////////////////////////////////////////////////////////// void deb_print_h16(uint16_t val){ deb_print_h8(HIBYTE(val)); deb_print_h8(LOBYTE(val)); } ////////////////////////////////////////////////////////////////////////// void deb_print_i16d(int16_t val){ if (val < 0) { deb_put_char('-'); if (val == 0x8000) { // Sonderfall -32768 deb_put_char('3'); deb_put_char('2'); deb_put_char('7'); deb_put_char('6'); deb_put_char('8'); } else { // Absolutwert 2*(-1) = +1 deb_print_u16d((uint16_t)(0-val)); } } else { deb_put_char('+'); deb_print_u16d((uint16_t)val); } } ////////////////////////////////////////////////////////////////////////// void deb_print_u16d(uint16_t val){ char digit = '0'; if (val >= 256) { // Zehntausender Stelle if (val >= 40000) { val -= 40000; digit += 4; } if (val >= 20000) { val -= 20000; digit += 2; } if (val >= 10000) { val -= 10000; ++digit; } deb_put_char(digit); // Tausender Stelle digit = '0'; if (val >= 8000) { val -= 8000; digit += 8; } else if (val >= 4000) { val -= 4000; digit += 4; } if (val >= 2000) { val -= 2000; digit += 2; } if (val >= 1000) { val -= 1000; ++digit; } deb_put_char(digit); // Hunderter Stelle digit = '0'; if (val >= 800) { val -= 800; digit += 8; } else if (val >= 400) { val -= 400; digit += 4; } if (val >= 200) { val -= 200; digit += 2; } if (val >= 100) { val -= 100; ++digit; } deb_put_char(digit); // Zehner und Einer = die letzten beiden Stellen 0..99 deb_print_99((uint8_t)val); } // Zahlen kleiner 256 else { deb_put_char(digit); // digit == '0' deb_put_char(digit); deb_print_u8d((uint8_t)val); } } ////////////////////////////////////////////////////////////////////////// void deb_print_i8d(int8_t val){ if (val < 0) { deb_put_char('-'); if (val == 0x80) { // Sonderfall -128 deb_put_char('1'); deb_put_char('2'); deb_put_char('8'); } else { // Absolutwert 2*(-1) = +1 deb_print_u8d((uint8_t)(0-val)); } } else { deb_put_char('+'); deb_print_u8d((uint8_t)val); } } ////////////////////////////////////////////////////////////////////////// void deb_print_u8d(uint8_t val){ char digit = '0'; // Hunderter Stelle if (val >= 200) { val -= 200; digit += 2; } else if (val >= 100) { val -= 100; ++digit; } deb_put_char(digit); // Zehner und Einer = die letzten beiden Stellen 0..99 deb_print_99((uint8_t)val); } ////////////////////////////////////////////////////////////////////////// void deb_print_99(uint8_t val){ // >100 dann Text "ON" if (val >= 100) { deb_put_char('O'); deb_put_char('N'); } else { uint8_t digit = '0'; // Zehner Stelle if (val >= 80) { val -= 80; digit += 8; } else if (val >= 40) { val -= 40; digit += 4; } if (val >= 20) { val -= 20; digit += 2; } if (val >= 10) { val -= 10; ++digit; } deb_put_char(digit); // Einer Stelle = Rest von val deb_put_char('0'+val); } } #else // ifndef _TEST_ == diese Datei wurde zum 2ten Mal eingefügt ////////////////////////////////////////////////////////////////////////// // // hier beginnt der Code, der in main() eingefügt wird // (dann ohne Procedure Rumpf), oder zwischen Prozeduren // eingefügt (mit Procedure Rumpf) als Funktion // debug_testing(); aufgerufen werden kann. // // main() // : // main-Code der vorher ausgeführt wird // : // - Initialisierung des uart0 // - auf Taste/Eingabe warten (2x Leertaste) // - do while() Schleife // - Menue anzeigen // - auf Taste/Eingabe warten // - Aufruf der oben definierten Tests // -while !EXIT // : // : // weiterer main-Code der danach ausgeführt wird // ////////////////////////////////////////////////////////////////////////// // //void debug_testing(){ /////////////////////////////////////// debug_testing() // if (SW3_DOWN) return; // uart0_init(0x8801); // Terminal UART0 = 38400,8,n,1 // uart0_init(0x6801); // Terminal UART0 = 19200,8,n,1 debug_wait_for_char(' '); // 1. Leerzeichen abwarten char item = debug_wait_for_char(' '); // 2. Leerzeichen abwarten debug_printP(PSTR("\nAVR MCU DEBUGGER gestartet..")); do { if (item == '1') { test_1(); } else if (item == '2') { test_2(); } else if (item == '3') { test_3(); } else if (item == '4') { test_4(); } else if (item == '5') { test_5(); } else if (item == '6') { test_6(); } else if (item == '7') { test_7(); } else if (item == 'a') { test_a(); } else if (item == 'k') { test_k(); } else if (item == ' ') { debug_printP(debug_test_menue); } item = debug_wait_for_char(0); if (SW3_DOWN) { pwm_head(100); } else { pwm_head(10); } } while ((item != 'x')); // && !(SW3_DOWN)); debug_printP(PSTR("\n\nDEBUGGER BEENDET..\n")); pwm_head(0); //} // debug_testing #endif //ifndef _TEST_ ////////////////////////////////////////////////////////////////////////// //EOF
Compiler results:
Werbung
Online
Antoniotzj
carmelopetty36638757
mattbrock489364684
mckinleysiddons
warrenhinder6456