Sé que la gente dice de optimización de código sólo debe llevar a cabo el oculto error en el programa, pero me escuches. Yo me quedo en una pantalla, hasta que la entrada a través de una interrupción se cumple.
Aquí es lo que yo veo en el depurador. Observe la línea inspeccionado y el valor de la expresión interceptado.
Código de la imagen:
//...
ui::Context::addEventListener(ui::EventType::JOYSTICK_DOWN, &constant_dynamic_handler);
while (true) {
if (choice != 0) //debugger pause
break;
}
ui::Context::removeEventListener(ui::EventType::JOYSTICK_DOWN, &constant_dynamic_handler);
if (choice == 1) goto constant;
else if (choice == 2) goto dynamic;
else if (choice == 3) goto reset;
else if (choice == 4) goto exit;
//...
//debugger view:
//expression: choice
//value: 1
El constant_dynamic_handler
es una función lambda declarado anteriormente, que solo cambia de choice
a algunos entero distinto de 0
. El hecho de que yo pueda hacer una pausa en el bucle significa que el bucle no está terminada, pero el valor es, de hecho, ha cambiado. Yo no paso más de un paso en el depurador como se podrá leer la memoria en la CPU y requiere un reinicio para la depuración de nuevo.
choice
se declara simplemente en el mismo ámbito como el si-bloque de instrucción, como int choice = 0;
. Es alterado sólo dentro de una interrupción de escucha activa con una entrada de hardware.
El programa trabaja con O0
indicador en lugar de O1
o O2
.
Estoy usando NXP K60 y c++11, si es necesario. Es mi problema? Podría ser cualquier cosa que yo no soy consciente de que? Soy un principiante en el MCU de programación, y este código funciona en el escritorio(Solo probado, no funciona).