НЕБЕСПОЛЕЗНЫЙ PC SPEAKER 
Павленко Евгений 
Левин Дмитрий
МЕТОДЫ ОТЛАДКИ 
Организационные меры 
Интерактивные отладчики 
Эмуляторы 
Диагностические сообщения 
Средства самодиагностики и самопроверки 
Средства трассировки 
Средства профилирования
НИЗКОУРОВНЕВАЯ ОТЛАДКА 
Отладка—этап разработкикомпьютерной программы, на котором обнаруживают, локализуют и устраняют ошибки. 
Использованиеотладчиков—инструментов, которые включают в себя интерфейсдля пошагового выполнения программы:операторза оператором, функция за функцией, с остановками на некоторых строках исходного кода или при достижении определённого условия. 
Вывод текущего состояния программы с помощью расположенных в критических точках программы операторов вывода— наэкран,принтер, громкоговорительили в файл.
СЛОЖНЫЕ УСЛОВИЯ ОТЛАДКИ 
PC SPEAKERРАБОТАЕТВСЕГДА
АППАРАТНЫЕ ОТЛАДЧИКИ
ДИАГНОСТИЧЕСКИЕ СООБЩЕНИЯ 
ПОМОГАЮТПОНЯТЬКАКВЕДЕТСЕБЯСИСТЕМАНАСАМОМДЕЛЕ 
Диагностические сообщения через COM-порт 
Диагностические сообщения в памяти 
Диагностические сообщения через PCSPEAKER
ДИАГНОСТИЧЕСКИЕ СООБЩЕНИЯ —COM 
ПОМОГАЮТПОНЯТЬКАКВЕДЕТСЕБЯСИСТЕМАНАСАМОМДЕЛЕ 
boolgdb_serial_setup( intport, intbaud ) 
{ 
unsigned cval; 
intcflag= CREAD | HUPCL | CLOCAL; 
intquot= 0; 
switch (baud) 
{ 
case 115200: cflag|= B115200; break; 
case 9600:cflag|= B9600;break; 
} 
cflag|= CS8; 
quot= 115200 / gdb_baud; 
cval= cflag& (CSIZE | CSTOPB); 
cval>>= 4; 
if (cflag& PARENB) 
cval|= UART_LCR_PARITY; 
if (!(cflag& PARODD)) 
cval|= UART_LCR_EPAR; 
cval= 0x3; 
outportb(gdb_port+ UART_LCR, cval| UART_LCR_DLAB); // set DLAB 
outportb(gdb_port+ UART_DLL, quot& 0xff);// LS of divisor 
outportb(gdb_port+ UART_DLM, quot>> 8);// MS of divisor 
outportb(gdb_port+ UART_LCR, cval);// reset DLAB 
outportb(gdb_port+ UART_IER, UART_IER_RDI);// turn on interrupts 
outportb(gdb_port+ UART_MCR, UART_MCR_OUT2 | UART_MCR_DTR | UART_MCR_RTS); 
if (0xff == inportb(gdb_port+ UART_LSR)) 
return false; 
gdb_serial_initialized= true; 
returntrue; 
} 
static void write_char( intchr) 
{ 
while (0 == (inportb(gdb_port+ UART_LSR) & UART_LSR_THRE)); 
outportb(gdb_port+ UART_TX, chr); 
}
ДИАГНОСТИЧЕСКИЕ СООБЩЕНИЯ — PC SPEAKER 
ПОМОГАЮТПОНЯТЬКАКВЕДЕТСЕБЯСИСТЕМАНАСАМОМДЕЛЕ, РАБОТАЮТВЛЮБЫХУСЛОВИЯХ 
Программируемый таймер, генерирующийпрямоугольную звуковую волнучастоты, дольной 1,193 МГц,без участияцентрального процессора. Это позволяет проигрывать простыеодноголосыезвуковые сигналы. К 1990- м годам программисты, запуская быстрыеарпеджио, научились исполнять на динамике музыку, которая не вызывает отвращение. 
Прямое управление мембраной через порт61hс дискретностью в 1 бит. Подавая с большой частотой то 0, то 1, с помощьюширотно-импульсной модуляцииможно синтезировать низкокачественныйоцифрованный звук— правда, за счёт существенного использования ресурсов процессора. Этим в своё время широко пользовалисьтрекерыи некоторые игры (AnotherWorld,MetalMutant).
PC SPEAKER→ARDUINO 
PC SPEAKER
ОТЛАДКА С ПОМОЩЬЮ ADRUINO 
СИМВОЛЫКОДИРУЮТСЯНАПРЯЖЕНИЕМ, ОЧЕНЬПРОСТАЯРЕАЛИЗАЦИЯ, 1 СИМВОЛВСЕКУНДУ
ИСХОДНЫЙ КОД 
#define TR_ARDUINO_PCSPK_0 50 
#define TR_ARDUINO_PCSPK_1 100 
#define TR_ARDUINO_PCSPK_AFTER_BIT 50 
#define TR_ARDUINO_PCSPK_AFTER_BYTE 100 
void dbg_pcspk_send_byte( char a, int(*dbg_ard_send_bit)(int), intdelay ) 
{ 
unsigned char buf[8] = 
{!!(a & 0x1), !!(a & 0x2), !!(a & 0x4), !!(a & 0x8), !!(a & 0x10), !!(a & 0x20), !!(a & 0x40), !!(a & 0x80)}; 
for (inti= 0; i< sizeof(buf); i++) 
{ 
dbg_ard_send_bit(buf[i]); 
} 
dbg_delay(delay); 
} 
extern "C" void dbg_pcspk_disable() 
{ 
unsigned char tmp= inportb(0x61); 
tmp&= 0xFC; 
outportb(0x61, tmp); 
} 
extern "C" void dbg_pcspk_enable() 
{ 
unsigned char tmp= inportb(0x61); 
tmp|= 2; 
outportb(0x61, tmp); 
} 
intdbg_ard_send_bit(intb) 
{ 
dbg_pcspk_enable(); 
dbg_delay(b ? TR_ARDUINO_PCSPK_1 : TR_ARDUINO_PCSPK_0); 
dbg_pcspk_disable(); 
dbg_delay(TR_ARDUINO_PCSPK_AFTER_BIT); 
} 
void trDbgPrintBuf_ard( constchar *p_str) 
{ 
char c = *p_str; 
while(c) 
{ 
dbg_pcspk_send_byte(c, dbg_ard_send_bit, TR_ARDUINO_PCSPK_AFTER_BYTE); 
p_str++; 
c = *p_str; 
} 
}
PCSPEAKER →СИНТЕЗ РЕЧИ 
PC SPEAKER
СИНТЕЗ РЕЧИ 
Пример преобразования фразы: 
1)Исходная фраза –«James Bond 007.» 
2)Замена цифр и знаков препинания –«James Bond zerozeroseven dot» 
3)Разбиение на фонемы –«J-A-M-EZ B-UH-N-D Z-EH-R- AH Z-EH-R-AHS-EE-V-EH-N D-OH-T» 
ТРУДНАЯ РЕАЛИЗАЦИЯ, НЕ ОЧЕНЬ ПОНЯТНО ГОВОРИТ, 
ИНТЕРЕСНО И ОЧЕНЬ СМЕШНО
ВНИМАНИЕ! КОНКУРС!
PC SPEAKER →MIC 
PC SPEAKER
ОТЛАДКА ЧЕРЕЗ МИКРОФОН 
БЫСТРЕЕ, ЧЕМ ARDUINO;СЛОЖНЕЕ, ЧЕМ ARDUINO;НЕОБХОДИМА СИНХРТОНИЗАЦИЯ; НЕ ТРЕБУЕТСЯ ARDUINO 
РАЗБИЕНИЕ ПОТОКА НА БЛОКИ 
ВЫДЕЛЕНИЕ СИНХРОПОСЫЛКИ И ОПРЕДЕЛЕНИЕ ПАРАМЕТРОВ 
ДЕКОДИРОВАНИЕ ИНФОРМАЦИИ
ИСХОДНЫЙ КОД 
#define TR_MIC_PCSPK_0 1 
#define TR_MIC_PCSPK_1 3 
#define TR_MIC_PCSPK_AFTER_BIT 4 
#define TR_MIC_PCSPK_AFTER_BYTE 8 
#define TR_MIC_PCSPK_FREQ_0 1000 
#define TR_MIC_PCSPK_FREQ_1 333 
void trDbgMicSendSync() 
{ 
for (intI = 0; I < 16; I++) 
{ 
dbg_pcspk_send_byte('-', dbg_mic_send_bit, TR_MIC_PCSPK_AFTER_BYTE); 
} 
} 
intdbg_mic_send_bit(intb) 
{ 
if (b) 
{ 
dbg_sound_play(TR_MIC_PCSPK_FREQ_1); 
dbg_delay(TR_MIC_PCSPK_1); 
} 
else 
{ 
dbg_sound_play(TR_MIC_PCSPK_FREQ_0); 
dbg_delay(TR_MIC_PCSPK_0); 
} 
dbg_sound_stop(); 
dbg_delay(TR_MIC_PCSPK_AFTER_BIT); 
} 
void dbg_pcspk_send_byte( char a, int(*send_bit)(int), intdelay ) 
{ 
unsigned char buf[8] = 
{!!(a & 0x1), !!(a & 0x2), !!(a & 0x4), !!(a & 0x8), !!(a & 0x10), !!(a & 0x20), !!(a & 0x40), !!(a & 0x80)}; 
for (inti= 0; i< sizeof(buf); i++) 
{ 
send_bit(buf[i]); 
} 
dbg_delay(delay); 
} 
void trDbgPrintBuf_mic(constchar *p_str) 
{ 
char c = *p_str; 
while (c) 
{ 
dbg_pcspk_send_byte(c, dbg_mic_send_bit, TR_MIC_PCSPK_AFTER_BYTE); 
p_str++; 
c = *p_str; 
} 
}
PC SPEAKER →ВОЗДУХ →MIC 
PC SPEAKER
ВЗГЛЯД С ДРУГОЙ СТОРОНЫ 
Защищенный ПК на котором выключен USB, WiFi, LANи т.д.
ВЫВОДЫ 
PCSPEAKER—незаменимаявещьдляотладкивэкстремальныхусловиях. 
ЧетыревариантаотладкичерезPCSPEAKER: 
СиспользованиемArduino; 
Синтезречи; 
Попроводусиспользованиеммикрофона; 
Повоздухусиспользованиеммикрофона. 
ЧерезPCSPEAKERможноскрытнопередаватьинформациюповоздуху.

NeoQUEST: небесполезный Pc speaker

  • 1.
    НЕБЕСПОЛЕЗНЫЙ PC SPEAKER Павленко Евгений Левин Дмитрий
  • 2.
    МЕТОДЫ ОТЛАДКИ Организационныемеры Интерактивные отладчики Эмуляторы Диагностические сообщения Средства самодиагностики и самопроверки Средства трассировки Средства профилирования
  • 3.
    НИЗКОУРОВНЕВАЯ ОТЛАДКА Отладка—этапразработкикомпьютерной программы, на котором обнаруживают, локализуют и устраняют ошибки. Использованиеотладчиков—инструментов, которые включают в себя интерфейсдля пошагового выполнения программы:операторза оператором, функция за функцией, с остановками на некоторых строках исходного кода или при достижении определённого условия. Вывод текущего состояния программы с помощью расположенных в критических точках программы операторов вывода— наэкран,принтер, громкоговорительили в файл.
  • 4.
    СЛОЖНЫЕ УСЛОВИЯ ОТЛАДКИ PC SPEAKERРАБОТАЕТВСЕГДА
  • 5.
  • 6.
    ДИАГНОСТИЧЕСКИЕ СООБЩЕНИЯ ПОМОГАЮТПОНЯТЬКАКВЕДЕТСЕБЯСИСТЕМАНАСАМОМДЕЛЕ Диагностические сообщения через COM-порт Диагностические сообщения в памяти Диагностические сообщения через PCSPEAKER
  • 7.
    ДИАГНОСТИЧЕСКИЕ СООБЩЕНИЯ —COM ПОМОГАЮТПОНЯТЬКАКВЕДЕТСЕБЯСИСТЕМАНАСАМОМДЕЛЕ boolgdb_serial_setup( intport, intbaud ) { unsigned cval; intcflag= CREAD | HUPCL | CLOCAL; intquot= 0; switch (baud) { case 115200: cflag|= B115200; break; case 9600:cflag|= B9600;break; } cflag|= CS8; quot= 115200 / gdb_baud; cval= cflag& (CSIZE | CSTOPB); cval>>= 4; if (cflag& PARENB) cval|= UART_LCR_PARITY; if (!(cflag& PARODD)) cval|= UART_LCR_EPAR; cval= 0x3; outportb(gdb_port+ UART_LCR, cval| UART_LCR_DLAB); // set DLAB outportb(gdb_port+ UART_DLL, quot& 0xff);// LS of divisor outportb(gdb_port+ UART_DLM, quot>> 8);// MS of divisor outportb(gdb_port+ UART_LCR, cval);// reset DLAB outportb(gdb_port+ UART_IER, UART_IER_RDI);// turn on interrupts outportb(gdb_port+ UART_MCR, UART_MCR_OUT2 | UART_MCR_DTR | UART_MCR_RTS); if (0xff == inportb(gdb_port+ UART_LSR)) return false; gdb_serial_initialized= true; returntrue; } static void write_char( intchr) { while (0 == (inportb(gdb_port+ UART_LSR) & UART_LSR_THRE)); outportb(gdb_port+ UART_TX, chr); }
  • 8.
    ДИАГНОСТИЧЕСКИЕ СООБЩЕНИЯ —PC SPEAKER ПОМОГАЮТПОНЯТЬКАКВЕДЕТСЕБЯСИСТЕМАНАСАМОМДЕЛЕ, РАБОТАЮТВЛЮБЫХУСЛОВИЯХ Программируемый таймер, генерирующийпрямоугольную звуковую волнучастоты, дольной 1,193 МГц,без участияцентрального процессора. Это позволяет проигрывать простыеодноголосыезвуковые сигналы. К 1990- м годам программисты, запуская быстрыеарпеджио, научились исполнять на динамике музыку, которая не вызывает отвращение. Прямое управление мембраной через порт61hс дискретностью в 1 бит. Подавая с большой частотой то 0, то 1, с помощьюширотно-импульсной модуляцииможно синтезировать низкокачественныйоцифрованный звук— правда, за счёт существенного использования ресурсов процессора. Этим в своё время широко пользовалисьтрекерыи некоторые игры (AnotherWorld,MetalMutant).
  • 9.
  • 10.
    ОТЛАДКА С ПОМОЩЬЮADRUINO СИМВОЛЫКОДИРУЮТСЯНАПРЯЖЕНИЕМ, ОЧЕНЬПРОСТАЯРЕАЛИЗАЦИЯ, 1 СИМВОЛВСЕКУНДУ
  • 11.
    ИСХОДНЫЙ КОД #defineTR_ARDUINO_PCSPK_0 50 #define TR_ARDUINO_PCSPK_1 100 #define TR_ARDUINO_PCSPK_AFTER_BIT 50 #define TR_ARDUINO_PCSPK_AFTER_BYTE 100 void dbg_pcspk_send_byte( char a, int(*dbg_ard_send_bit)(int), intdelay ) { unsigned char buf[8] = {!!(a & 0x1), !!(a & 0x2), !!(a & 0x4), !!(a & 0x8), !!(a & 0x10), !!(a & 0x20), !!(a & 0x40), !!(a & 0x80)}; for (inti= 0; i< sizeof(buf); i++) { dbg_ard_send_bit(buf[i]); } dbg_delay(delay); } extern "C" void dbg_pcspk_disable() { unsigned char tmp= inportb(0x61); tmp&= 0xFC; outportb(0x61, tmp); } extern "C" void dbg_pcspk_enable() { unsigned char tmp= inportb(0x61); tmp|= 2; outportb(0x61, tmp); } intdbg_ard_send_bit(intb) { dbg_pcspk_enable(); dbg_delay(b ? TR_ARDUINO_PCSPK_1 : TR_ARDUINO_PCSPK_0); dbg_pcspk_disable(); dbg_delay(TR_ARDUINO_PCSPK_AFTER_BIT); } void trDbgPrintBuf_ard( constchar *p_str) { char c = *p_str; while(c) { dbg_pcspk_send_byte(c, dbg_ard_send_bit, TR_ARDUINO_PCSPK_AFTER_BYTE); p_str++; c = *p_str; } }
  • 12.
  • 13.
    СИНТЕЗ РЕЧИ Примерпреобразования фразы: 1)Исходная фраза –«James Bond 007.» 2)Замена цифр и знаков препинания –«James Bond zerozeroseven dot» 3)Разбиение на фонемы –«J-A-M-EZ B-UH-N-D Z-EH-R- AH Z-EH-R-AHS-EE-V-EH-N D-OH-T» ТРУДНАЯ РЕАЛИЗАЦИЯ, НЕ ОЧЕНЬ ПОНЯТНО ГОВОРИТ, ИНТЕРЕСНО И ОЧЕНЬ СМЕШНО
  • 14.
  • 15.
    PC SPEAKER →MIC PC SPEAKER
  • 16.
    ОТЛАДКА ЧЕРЕЗ МИКРОФОН БЫСТРЕЕ, ЧЕМ ARDUINO;СЛОЖНЕЕ, ЧЕМ ARDUINO;НЕОБХОДИМА СИНХРТОНИЗАЦИЯ; НЕ ТРЕБУЕТСЯ ARDUINO РАЗБИЕНИЕ ПОТОКА НА БЛОКИ ВЫДЕЛЕНИЕ СИНХРОПОСЫЛКИ И ОПРЕДЕЛЕНИЕ ПАРАМЕТРОВ ДЕКОДИРОВАНИЕ ИНФОРМАЦИИ
  • 17.
    ИСХОДНЫЙ КОД #defineTR_MIC_PCSPK_0 1 #define TR_MIC_PCSPK_1 3 #define TR_MIC_PCSPK_AFTER_BIT 4 #define TR_MIC_PCSPK_AFTER_BYTE 8 #define TR_MIC_PCSPK_FREQ_0 1000 #define TR_MIC_PCSPK_FREQ_1 333 void trDbgMicSendSync() { for (intI = 0; I < 16; I++) { dbg_pcspk_send_byte('-', dbg_mic_send_bit, TR_MIC_PCSPK_AFTER_BYTE); } } intdbg_mic_send_bit(intb) { if (b) { dbg_sound_play(TR_MIC_PCSPK_FREQ_1); dbg_delay(TR_MIC_PCSPK_1); } else { dbg_sound_play(TR_MIC_PCSPK_FREQ_0); dbg_delay(TR_MIC_PCSPK_0); } dbg_sound_stop(); dbg_delay(TR_MIC_PCSPK_AFTER_BIT); } void dbg_pcspk_send_byte( char a, int(*send_bit)(int), intdelay ) { unsigned char buf[8] = {!!(a & 0x1), !!(a & 0x2), !!(a & 0x4), !!(a & 0x8), !!(a & 0x10), !!(a & 0x20), !!(a & 0x40), !!(a & 0x80)}; for (inti= 0; i< sizeof(buf); i++) { send_bit(buf[i]); } dbg_delay(delay); } void trDbgPrintBuf_mic(constchar *p_str) { char c = *p_str; while (c) { dbg_pcspk_send_byte(c, dbg_mic_send_bit, TR_MIC_PCSPK_AFTER_BYTE); p_str++; c = *p_str; } }
  • 18.
    PC SPEAKER →ВОЗДУХ→MIC PC SPEAKER
  • 19.
    ВЗГЛЯД С ДРУГОЙСТОРОНЫ Защищенный ПК на котором выключен USB, WiFi, LANи т.д.
  • 20.
    ВЫВОДЫ PCSPEAKER—незаменимаявещьдляотладкивэкстремальныхусловиях. ЧетыревариантаотладкичерезPCSPEAKER: СиспользованиемArduino; Синтезречи; Попроводусиспользованиеммикрофона; Повоздухусиспользованиеммикрофона. ЧерезPCSPEAKERможноскрытнопередаватьинформациюповоздуху.