【发布时间】:2016-10-31 20:09:12
【问题描述】:
我有很多不同的时间来跟踪我的设计,但没有什么是超级关键的。 10ms +/- 几毫秒根本不是什么大问题。但是可能有 10 个不同的计时器同时在不同的时间段进行计数,显然我没有足够的专用计时器来支持 MSP-430 中各自独立计时器中的每一个。
我的解决方案是为一个以 1 KHz 触发的 MSP-430 微型计时器创建一个 ISR。它只是为每个 ISR 条目增加一个无符号长整数(因此每个刻度为 1 毫秒)。然后在我的代码的其他地方,我可以使用下面的 SET_TIMER 和 EXPIRED 定义调用来检查是否已经过了一定的时间。我的问题是,这是保持“全球”时间的好方法吗?
定时器定义:
typedef unsigned long TIMER;
extern volatile TIMER Tick;
#define SET_TIMER(t,i) ((t)=Tick+(i))
#define EXPIRED(t) ((long)((t)-Tick)<0)
定时器中断服务程序:
void TIMER_B0_ISR(void)
{
Tick++;
}
单个文件中的用法示例:
case DO_SOMETHING:
if (EXPIRED(MyTimer1))
{
StateMachine = DO_SOMETHING_ELSE;
SET_TIMER(MyTimer1, 100);
}
break;
case DO_SOMETHING_ELSE:
if (EXPIRED(MyTimer1))
...
【问题讨论】: