
也就是这个时间瞎执行一些没用的指令, 过了定时值后, 立刻执行所要求的代码.
延时就是做数学题, 如题可知
可知, CPU执行一个周期是1/5000000= 0.2 微秒
2) 需要延时 1毫秒
即, 需要浪费x个周期, 0.2 * x = 1000 (1毫秒=1000微秒)
x = 5000.
3) 一个Nop(什么都不做指令)是3c (3个周期)
5000/3 = 1333
程序中写1333个NOP显然要累死你
于是一个聪明的办法就是写个什么也不做,
专门浪费时间的循环, 于是就有了题目中的样子
1次循环共多少指令周期呢? 加一下
mov 4个 [这个是循环之前的初始化, 浪费了4个周期]
---------------
nop 3个
nop 3个
loop 9个 (只有循环结束才不转移)
----------------
可知: 3+3+9 = 15
(5000-4) / 15 = 333
事实上这个延时并不是非常非常的精确,
因为5000除不尽15, 而且最后的loop是5个周期也不是9个
精确到2个微秒级, 这是后话
计算机中时钟周期是(主频的倒数),一个时钟周期cpu仅完成一个最基本的动作,完成一个基本 *** 作的时间为机器周期,一般由几个时钟周期组成;完成一条指令为指令周期。一般由几个机器周期组成,指令不同机器周期数也不同。\r\n以我的本本1.6G为例,机器周期由两个时钟周期组成,平均三个机器周期完成一条指令(这要假设,我看不到)\r\n时钟周期为1/(1.6*1024m)=0.61ns机器周期为0.61*2=1.22ns\r\n平均指令周期3*1.22ns=3.66ns\r\n平均指令执行速度为1/(3.66ns)=273.22MIPS(百万条指令每秒)\r\n这只是计算方法,条件也是假设的,晶振我不知。\r\n大致算法就这样,我数学不好。如有算错请多指教!用定时器呀 ,系统定时器systick产生中断,设置1ms中断一次, 每中断一次变量加1开始计算前将变量清0,运算结束时读取变量,可得到运算时间
当然,中断对程序运行时间也有影响,但如果是毫秒级的中断,每次花费时间只有1US左右,对时间精度影响不大。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)