Tinyos之使用Msp430Counter32khz获取系统时间

使用平台:TelosB 

操作系统:TinyOs

最近要为论文写实验数据,需要读取系统的时间,进行一些运算。

Tinyos有提供Msp430Counter32khz 组件,该组件提供接口 Counter<T32khz,uint16_t> .

该接口有如下命令和事件:

1、get()命令

调用该命令,会返回计数值。计数动作是从系统启动的时候就开始了。(如果操作系统配置为低功耗模式会停止计数)

2、isOverflowpending()命令 

是否有溢出(true /false)

3、clearoverflow()命令

清除挂起状态

4、overflow()事件

给出当前系计数值已经溢出的信号量。

继续分析,得知该组件是有以下两个组件实现的:(关于Msp430TimerC这个组件以后再好好研究,这个组件提供了MSP430的所有时钟接口)

component  Msp430TimerC;

component new Msp430Counter(T32khz) as Counter;//该组件使用uint16_t 进行计数

Msp430Counter32khz = counter  ;

Counter.Msp430Timer ->Msp430TimerC.TimerB;


现在,要实现读取系统运行时间的功能。由于组件使用T32Khz,也就是计数一次(Ticks),相当于系统运行1/32ms。

为了描述时间,定义了一个结构体,分为秒和毫秒级,秒采用4个字节,ms使用2字节(与组件匹配)

typedef nx_struct nxSYS_Time_t {
    nx_uint32_t uiSeconds;//转换的秒数
    nx_uint16_t usTicks;//滴答计数变量
} nxSYS_Time_t;

滴答计数变量转换为秒(S)的处理

一般情况,当计数溢出时,也就是计数65535,次数相当于系统运行65535/32/1000 = 2s,因此在signal事件里需要将

uiSecond值增加2;当滴答计数为65535/2=32678 且小于65535时,此时秒数增加1

这里需要注意一个问题,就是用户获取时间是随意的,因此,滴答计数变量会遇到三种情况要处理:

1、当滴答值小于65535/2=32678 的时候,不加1

2、当滴答值大于32678且小于65535的时候,加1

3、当用户连续两次都在32678和65535获取get命令时,仅在第一次加1,第二次不能加1

通过以上分析,对获取系统运行时间的核心处理程序如下:

<span style="font-size:18px;">bool flag =1;
nxSYS_Time_t* GetTime() {
uint16_t temp;
uint32_t tmp1;
temp = call Msp430Counter32khz.get();
if ( temp>>15 &&flag) 
{
	atomic {
       		 SysClock.uiSeconds++;  
        	flag= 0;       
       	 	}
}
atomic {
            SysClock.usTicks = temp & 0x7fff;
        }
return &SysClock;
}


async event void Msp430Counter32khz.overflow() 
{
   call Msp430Counter32khz.Clearoverflaow();
   atomic 
  {
	if(!flag)
	{
		SysClock.uiSeconds += 1;  
	}
	else
	{
 		SysClock.uiSeconds += 2;
	}
           
    flag =1;
   }
}</span>
这里提供了一种获取系统时钟的思路,当然如果给出2012-09-12 14:14:14这样的形式会更好。


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值