私はSTM32F0xxマイクロで動作しています。ブロッキング遅延を使用してピンを単にトグルするコードを持っています。割り込みと一致しないSTM32ブロッキング遅延
uint32_t ticks = 0;
// Disable interrupts
__disable_irq();
for (int bit = 0; bit < 10; bit++) {
// Toggle pin high
WritePin(GPIO_PIN_SET);
ticks = 500;
while (ticks--) {
__NOP();
}
// Toggle pin low
WritePin(GPIO_PIN_RESET);
ticks = 500;
while (ticks--) {
__NOP();
}
// Repeat
WritePin(GPIO_PIN_SET);
ticks = 500;
while (ticks--) {
__NOP();
}
WritePin(GPIO_PIN_RESET);
ticks = 500;
while (ticks--) {
__NOP();
}
}
__enable_irq();
割り込みを無効にして、この時点で何も起こっていないことを確認します。これらの波形の範囲を設定すると、10クロック周期が表示されます。ただし、これらの波形の周期がすべて一致するわけではありません。すべての偶数波形(0,2,4,6,8)は同じ周期を持ち、すべての奇数波形(1,3,5,7,9)は同じ周期を持ちますが、偶数および奇数波形はかなりの量だけ異なります(%12)。偶数波形は最初の遅延トグルと相関し、奇数波形はforループの2番目の遅延に相関します。なぜ私はこれらの期間が異なるのか分からない。誰もがここに何か洞察力を持っていますか?
私は逆アセンブリもチェックしており、アセンブリはすべてのwhileループ実装で同じに見えます。 – ryeager