最开始学习单片机的时候,无论是51还是STM32等,都会在流水灯等示例中见到延时函数,刚开始我就弄不明白,我今天认真的剖析一下.
首先是函数体
void Delay(__IO u32 nCount)
{
for(; nCount != 0; nCount--);
}
首先根据C语言的规范可以知道这是一个没有返回值的带形式参数的函数.
C语言中的函数使用规范如下:
return_type function_name( parameter list )
{
body of the function
}
所以可以知道第一个是:函数返回的数据类型
第二个是:函数名
第三个是:参数
第四个是:函数主体
所以再来看这个延时函数就比较容易理解了:
void Delay(__IO u32 nCount)
{
for(; nCount != 0; nCount--);
}
这个延时函数没有返回值,函数名称是Delay,同时函数的参数部分中的_IO是类型修饰符;u32是数据类型,同等于uint_32_t同等于unsigned int型
函数的主体是for循环递减,大致的意思是32位的非负int型数据nCount一直递减,递减到0,就产生了一个不太精确的延时函数.
其中_IO u32可以看作一个数据类型;具体可以在相关MCU头文件,例如"stm32f10x.h"中查看定义.大致等同32位无符号int类型
使用的时候若
void Delay(5000)则就是5000自减到0为止