|
|
|
|
|
by pizza234
2086 days ago
|
|
For busy waiting in general, AFAIK one should signal the intention to the compiler, via intrinsics (`_mm_pause` in C, `std::sync::atomic::spin_loop_hint` in Rust, and so on). The compiler and processor will attempt to make the best out of the pause, e.g. send the processor to a lower-consumption state. It may be overkill for such cases, but if one keeps the strategy as reference, it's best to know the optimal one :-) I even think it's not overkill for this case, as they're actually working around the compiler, and a clean approach is preferrable regardless. |
|
You have to be very careful in a bootloader, since you're initializing the clocks and other very low level subsystems you don't want to risk putting the CPU in a state you won't be able to get out of.
In general the standard method is to use a dummy busy delay like the "nop loop" shown above in the very early stages until you get to the point where you can enable interrupts and standby states and implement a proper sleep method that will effectively shut the CPU down waiting for an external event.
If you're talking about userland code (or even driver code) using busyloops you're right though.