微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI蓝牙设计交流 > OSAL里时间片计数值(从ll_McuPrecisionCount()返回的那个)以中断方式自加还是硬件加?

OSAL里时间片计数值(从ll_McuPrecisionCount()返回的那个)以中断方式自加还是硬件加?

时间:10-02 整理:3721RD 点击:

期待大神提供具体信息,或参考资料,谢谢。

image,

OSAL的timer用的是从ll_McuPrecisionCount() 返回的那个,硬件上用的是timer2.

是不是timer2每625us中断一次,在ISR中自增变量的值(经由ll_McuPrecisionCount()返回的那个),还是别的什么方式?

嗨Yan,我有个问题就是,如果ll_McuPrecisionCount函数返回的值是赋值给tmp,然后ticks625us = tmp - previousLLTimerTick;计算这次调用和上次调用之间流逝了多少个625us的节拍;这里我有个问题是:previousLLTimerTick保存的是上次调用ll_McuPrecisionCount函数的节拍数,因为previousLLTimerTick是uint16的,有没有这样一种溢出的可能,previousLLTimerTick = 65534,下一次调用后,ticks625us = tmp - previousLLTimerTick;这个语句,你要为正数,那必须tmp > previousLLTimerTick; 因为uint16位的限制。tmp在怎么也不能比65535大的了,那么tmp可能跳转tmp = 200或者250;那么ticks625us就为负数了。这明显和实际不符啊,不能说时间停滞了吧!所以有这样一种一问题。

我不知道我这种理解是否正确,因为这样溢出是可能的。

 谢谢Yan大神回答。 CQ_JIMI

TI封装了Timer2的部分,具体怎么实现不清楚,OSAL里面用的是查询的方法

首先回复下自己上面问的那个问题,是我对无符号整数的理解不彻底导致的,所以昨天我彻查了相关知识写成了一篇博文以飨读者。45338061,现在能理解了对两个正数之间的差其实求得是她们相隔的距离。所以比如三个无符号16整形,A =200 B=65535,那么C = A-B = 201;不知道这样理解对不对。Yan大神。


但是今天有新问题啦。就是在这段代码中

 while ( ticks625us > MAXCALCTICKS )     //主要为了数据过大转换为ms是溢出了。MAXCALCTICKS >13105就会溢出从0开始
    {
      ticks625us -= MAXCALCTICKS;
      elapsedMSec += MAXCALCTICKS * 5 / 8;    //MAXCALCTICKS =13105个节拍转换为ms是8190ms
      remUsTicks += MAXCALCTICKS * 5 % 8;     //余数为5,时间0.625ms
    }

    // update converted number with remaining ticks from loop and the
    // accumulated remainder from loop   把余数加进去,组合成剩余的滴答数*5
    tmp = (ticks625us * 5) + remUsTicks;//这里限制了必须使得((ticks625us *5) + 7 < = 65535)

其中MAXCALCTICKS的定义是这样的

// (MAXCALCTICKS * 5) + (max remainder) must be <= (uint16 max),
// so: (13105 * 5) + 7 <= 65535
#define MAXCALCTICKS  ((uint16)(13105))

7他说是可能的最大余数,但是你没看到上面while循环吗,如果while循环执行两次那么remUsTicks就>10了,因为他还存有上次留下来的余数。

嗨咯,  Yan大美女啊。。回复下撒。。By JQ_JIMI

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top