void Delay (__IO uint32_t count) { for(;count !=0;count --); } 和void Delay (uint32_t count) { for(;count !=0;count --); }使用蜂鸣器 测试发现 声音有差异
具体原因尚未清楚
在嵌入式系统编程中,特别是在使用STM32等基于ARM Cortex-M核心的微控制器时,会遇到__IO
这样的关键字。这个关键字并不是C或C++标准语言的一部分,而是由特定的编译器(如Keil MDK-ARM、IAR Embedded Workbench、GCC for ARM等)为了支持特定硬件访问而定义的宏或类型限定符。
__IO
通常用于声明变量,这些变量将直接映射到硬件寄存器的地址上。通过将这些变量声明为__IO
,编译器会知道这些变量在每次访问时都需要直接从硬件地址读取或写入,而不是使用可能存储在缓存或寄存器中的旧值。因为硬件寄存器的值可能会因为外部事件(如中断、DMA传输等)而随时改变。