Есть код
nand::IFlashOps::ReadPage rp;
rp.block = d3;
rp.page = 0;
rp.data = d_buf;
rp.dataLen = 2048;
rp.spare = rp.data+2048;
rp.spareLen = 63;
nandDriver1->readPage(rp);
При компиляции с флагом -O2 он превращается в
394 nandDriver1->readPage(rp);
08013ec6: ldr r3, [pc, #168] ; (0x8013f70 <nandTest()+604>)
390 rp.data = d_buf;
08013ec8: ldr r7, [pc, #168] ; (0x8013f74 <nandTest()+608>)
394 nandDriver1->readPage(rp);
08013eca: ldr r0, [r3, #0]
388 rp.block = d3;
08013ecc: ldr.w r1, [r8]
394 nandDriver1->readPage(rp);
08013ed0: ldr r2, [r0, #0]
390 rp.data = d_buf;
08013ed2: str r7, [sp, #124] ; 0x7c
08013ed4: movs r3, #0
08013ed6: str r3, [sp, #132] ; 0x84
392 rp.spare = rp.data+2048;
08013ed8: add.w r7, r7, #2048 ; 0x800
08013edc: str r3, [sp, #116] ; 0x74
08013ede: str r3, [sp, #120] ; 0x78
391 rp.dataLen = 2048;
08013ee0: mov.w r3, #2048 ; 0x800
392 rp.spare = rp.data+2048;
08013ee4: str r7, [sp, #136] ; 0x88
391 rp.dataLen = 2048;
08013ee6: str r3, [sp, #128] ; 0x80
393 rp.spareLen = 63;
08013ee8: movs r3, #63 ; 0x3f
388 rp.block = d3;
08013eea: str r1, [sp, #112] ; 0x70
393 rp.spareLen = 63;
08013eec: str r3, [sp, #140] ; 0x8c
394 nandDriver1->readPage(rp);
08013eee: add r1, sp, #112 ; 0x70
08013ef0: ldr r3, [r2, #8]
08013ef2: blx r3
Отлаживать неудобно — отладчик прыгает по строчкам, если не смотреть в ассемблер — неясно что сейчас делается.
Может быть есть отдельный флаг оптимизации, который отключает такое "перемешивание", не отключая остальные оптимизации?
Здравствуйте, enji, Вы писали:
E>Отлаживать неудобно — отладчик прыгает по строчкам, если не смотреть в ассемблер — неясно что сейчас делается.
Вообще, задавая подобные вопросы, неплохо бы указывать версию компилятора.
Посмотри, может, в твоей версии работает такой вот ключик:
-Og Optimize debugging experience.
-Og enables optimizations that do not interfere with debugging. It should be the optimization level of choice for the standard edit-compile-debug cycle, offering a reasonable level of optimization while maintaining fast compilation and a good debugging experience.