当学习各种Cortex-M单片机时候,最开始学的例程都是点灯。
为了让灯闪烁,要写个延时函数,比如微秒级延时delay_us。
最常用的方法,大概有4种吧。一种i循环法,一种时钟周期法,一种定时器中断法,一种定时器非中断法。
比较简单的就是for循环或是wile循环延时,比如stm32f103,72MHz主频,大约是12次i++运算耗时1微秒。
如果换一个型号,比如stm32f105,以48MHz主频工作,延时1微秒是不是18次i++?
基本上可以这么理解,但是有一些例外的情况。
1.如果程序是用C语言写的,看起来简单的程序在编译成汇编再变成机器码的时候可能会比你想象的操作多了一些指令,比如对堆栈的操作。这也真是C语言比汇编运行效率低的地方。
2.虽然MCU主频线性变化了,但是对RAM或者对总线的读取写入速度并不一定会线性变化。