neoquest: небесполезный pc speaker

Post on 04-Jul-2015

278 Views

Category:

Technology

2 Downloads

Preview:

Click to see full reader

DESCRIPTION

Presentation from NeoQUEST Conference about PC Speaker.

TRANSCRIPT

НЕБЕСПОЛЕЗНЫЙ PC SPEAKER

Павленко Евгений Левин Дмитрий

МЕТОДЫ ОТЛАДКИОрганизационные меры

Интерактивные отладчики

Эмуляторы

Диагностические сообщения

Средства самодиагностики и самопроверки

Средства трассировки

Средства профилирования

НИЗКОУРОВНЕВАЯ ОТЛАДКАОтладка — этап разработки компьютерной программы, на котором обнаруживают, локализуют и устраняют ошибки.

Использование отладчиков — инструментов, которые включают в себя интерфейс для

пошагового выполнения программы: оператор за оператором, функция

за функцией, с остановками на некоторых строках исходного кода или при достижении

определённого условия.

Вывод текущего состояния программы с помощью расположенных в критических точках программы операторов вывода —

на экран, принтер, громкоговоритель или в файл.

СЛОЖНЫЕ УСЛОВИЯ ОТЛАДКИ

PC SPEAKER РАБОТАЕТ ВСЕГДА

АППАРАТНЫЕ ОТЛАДЧИКИ

ДИАГНОСТИЧЕСКИЕ СООБЩЕНИЯ

ПОМОГАЮТ ПОНЯТЬ КАК ВЕДЕТ СЕБЯ СИСТЕМА НА САМОМ ДЕЛЕ

Диагностические сообщения через COM-порт

Диагностические сообщения в памяти

Диагностические сообщения через PC SPEAKER

ДИАГНОСТИЧЕСКИЕ СООБЩЕНИЯ — COM

ПОМОГАЮТ ПОНЯТЬ КАК ВЕДЕТ СЕБЯ СИСТЕМА НА САМОМ ДЕЛЕ

bool gdb_serial_setup( int port, int baud ){

unsigned cval;int cflag = CREAD | HUPCL | CLOCAL;int quot = 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 interruptsoutportb(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;return true;

}

static void write_char( int chr ){

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, Metal Mutant).

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), int delay )

{

unsigned char buf[8] =

{!!(a & 0x1), !!(a & 0x2), !!(a & 0x4), !!(a & 0x8), !!(a & 0x10), !!(a & 0x20), !!(a & 0x40), !!(a & 0x80)};

for (int i = 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);

}

int dbg_ard_send_bit(int b){

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( const char *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;

}}

PC SPEAKER → СИНТЕЗ РЕЧИ

PC SPEAKER

СИНТЕЗ РЕЧИПример преобразования фразы:1) Исходная фраза – «James Bond 007.»2) Замена цифр и знаков препинания – «James Bond zero

zero seven dot»3) Разбиение на фонемы – «J-A-M-EZ B-UH-N-D Z-EH-R-

AH Z-EH-R-AH S-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 (int I = 0; I < 16; I++)

{

dbg_pcspk_send_byte('-', dbg_mic_send_bit, TR_MIC_PCSPK_AFTER_BYTE);

}

}

int dbg_mic_send_bit(int b){

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), int delay ){

unsigned char buf[8] = {!!(a & 0x1), !!(a & 0x2), !!(a & 0x4), !!(a & 0x8), !!(a & 0x10), !!(a & 0x20),

!!(a & 0x40), !!(a & 0x80)};for (int i = 0; i < sizeof(buf); i++){

send_bit(buf[i]);}dbg_delay(delay);

}

void trDbgPrintBuf_mic(const char *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 и т.д.

ВЫВОДЫ PC SPEAKER — незаменимая вещь для отладки в экстремальных

условиях.

Четыре варианта отладки через PC SPEAKER:

С использованием Arduino;

Синтез речи;

По проводу с использованием микрофона;

По воздуху с использованием микрофона.

Через PC SPEAKER можно скрытно передавать информацию по воздуху.

top related