新唐Cortex—M0学习之PC编程与嵌入式编程的差别

程序性能优化:嵌入式编程中的延迟函数与乘法时间考量
本文深入探讨了在嵌入式编程中使用延迟函数时,乘法操作和每条汇编指令的执行时间对程序性能的影响。通过实例分析了如何优化延迟函数以减少时间开销,以及在微秒级别时间精度需求下的编程技巧。重点强调了在超低延时应用中,避免不必要的计算和操作的重要性。
 

这是一个很重要的概念!

1.printf()的时间

在PC编程中,你可以用printf()这个函数来看变量值,而忽略它所占用的时间,(相对于3GHZ的CPU来说可以忽略),但是在嵌入式编程中,用printf()在超级终端中看变量值的时候,它的开销你要计算进去,尤其是程序对信号的捕捉到了毫秒,微秒级别的时候!

笔者曾经干过这样一件事情,用定时器函数来delay()9毫秒时间,过0.9毫秒,让里面的变量i加一,结果i等于9的时候跳出循环,而在里面多加了一句printf(),i加到了6就跳出了循环,害的我以为我的算法错了,希望大家不要走同样的弯路!

2.乘法时间

说到delay()函数,我的原型如下:

 void delay(double time)
 {
      delayEnd = 0;

      time = time * 12000;   //得到计时次数
 
     TCMPR0 = (long)time;
     
     TCSR0 |= CEN;        //开始计数

     while(delayEnd == 0);  //得到定时中断服务函数吧delayEnd 置为1
 }

笔者用这个延迟函数想产生一个周期为26us的方波,于是delay(0.026);然后取反,结果产生了周期为100us的方波于是笔者改成了这样:

  void Delay(long time)
 {
   delayEnd = 0;
 
  TCMPR0 = time;              //得到计时次数
     
  TCSR0 |= 0x40000000;        //开始计数,对TCSR0的第30位尅是写1,表示计数

  while(delayEnd == 0);          //得到定时中断服务函数吧delayEnd 置为1
 }

结果产生周期为50us的方波,从两个delay()函数中我们可以看到,乘法的占用时间在程序达到us级别的时候,是必须要简化和考虑的,而每条语句的汇编条数我们也要看到,尽量精简,因为延迟函数之前,程序的条数也会占用时间,这些在PC机中从来不用考虑!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值