while (1) {
uint32_t offset1 = offset;
__sync_synchronize();
uint16_t tcnt = TCNT1;
__sync_synchronize();
uint32_t offset2 = offset;
if (offset1 == offset2) {
return (offset1 + tcnt);
}
}
ICAgICAgICB3aGlsZSAoMSkgewogICAgICAgICAgICB1aW50MzJfdCBvZmZzZXQxID0gb2Zmc2V0OwogICAgICAgICAgICBfX3N5bmNfc3luY2hyb25pemUoKTsKICAgICAgICAgICAgdWludDE2X3QgdGNudCA9IFRDTlQxOwogICAgICAgICAgICBfX3N5bmNfc3luY2hyb25pemUoKTsKICAgICAgICAgICAgdWludDMyX3Qgb2Zmc2V0MiA9IG9mZnNldDsKICAgICAgICAgICAgaWYgKG9mZnNldDEgPT0gb2Zmc2V0MikgewogICAgICAgICAgICAgICAgcmV0dXJuIChvZmZzZXQxICsgdGNudCk7CiAgICAgICAgICAgIH0KICAgICAgICB9