contiki学习笔记 clock部分
void
clock_init(void)
{/* Make sure we know where we stand */CLKCONCMD = CLKCONCMD_OSC32K | CLKCONCMD_OSC;/* Stay with 32 KHz RC OSC, Chance System Clock to 32 MHz */CLKCONCMD &= ~CLKCONCMD_OSC;while(CLKCONSTA & CLKCONCMD_OSC);/* Tickspeed 500 kHz for timers[1-4] */CLKCONCMD |= CLKCONCMD_TICKSPD2 | CLKCONCMD_TICKSPD1;while(CLKCONSTA != CLKCONCMD);/*Initialize tick value*/timer_value = ST0;timer_value += ((unsigned long int) ST1) << 8;timer_value += ((unsigned long int) ST2) << 16;timer_value += TICK_VAL;ST2 = (unsigned char) (timer_value >> 16);ST1 = (unsigned char) (timer_value >> 8);ST0 = (unsigned char) timer_value;STIE = 1; /* IEN0.STIE interrupt enable */
}
CCIF clock_time_t
clock_time(void)
{return count;
}
#pragma vector=ST_VECTOR__near_func __interrupt void clock_isr(void)
{DISABLE_INTERRUPTS();ENERGEST_ON(ENERGEST_TYPE_IRQ);timer_value = ST0;timer_value += ((unsigned long int) ST1) << 8;timer_value += ((unsigned long int) ST2) << 16;timer_value += TICK_VAL;ST2 = (unsigned char) (timer_value >> 16);ST1 = (unsigned char) (timer_value >> 8);ST0 = (unsigned char) timer_value;++count;if(count % CLOCK_CONF_SECOND == 0) {++seconds;}if(etimer_pending()&& (etimer_next_expiration_time() - count - 1) > MAX_TICKS) {etimer_request_poll();}STIF = 0; /* IRCON.STIF */ENERGEST_OFF(ENERGEST_TYPE_IRQ);ENABLE_INTERRUPTS();
}
CCIF unsigned long
clock_seconds(void)
{return seconds;
}
void
clock_delay(unsigned int len)
{unsigned int i;for(i = 0; i< len; i++) {ASM(nop);}
}
4.范例
PROCESS_THREAD(clock_test_process, ev, data)
{PROCESS_BEGIN();printf("Clock delay test, (10,000 x i) cycles:\n");i = 1;while(i < 6) {start_count = clock_time(); // 记录开始timerclock_delay(10000 * i); // 软件延时end_count = clock_time(); // 记录结束timerdiff = end_count - start_count; // 计算差值,单位为tickprintf("Delayed %u \n%u ticks =~ %u ms\n", 10000 * i, diff, diff * 8);i++;}printf("Done!\n");PROCESS_END();
}
【实验结果】
PROCESS_THREAD(clock_test_process, ev, data)
{PROCESS_BEGIN();printf("Clock Seconds Test (5s):\n"); // 间隔为5Si = 0;while(i < 10) {etimer_set(&et, 5 * CLOCK_SECOND); // etimer溢出时间为5sPROCESS_WAIT_EVENT_UNTIL(etimer_expired(&et)); // 等待定时器溢出sec = clock_seconds(); // 系统运行时间 单位sprintf("%lu Seconds\n", sec); // 打印i++;}printf("Done!\n");PROCESS_END();
}
【实验结果】
contiki学习笔记 clock部分相关推荐
- Contiki学习笔记——Cooja启动失败
Contiki学习笔记--Cooja启动失败 Cooja启动 Cooja启动 进入Terminal: cd Contiki/tools/cooja ant run 出现错误: Could not fi ...
- contiki学习笔记03
contiki学习笔记03 contiki是基于事件型驱动的操作系统,它传递事件的方式有两种,同步和异步. process_post_synch函数是同步,调用它可以马上执行相关的线程:process ...
- contiki学习笔记(一)
本学期开始学习contiki,主要是将contiki os应用于cc2530.学习的时候,发现国内的资料很少,故边学习边写一些笔记,方便自己查看. 一.contiki简介 Contiki是一个开源的. ...
- contiki学习笔记(五)ctimer和etimer
四.callback timer 回调计时器(ctimer) Callback timer(回调计时器) Contiki system ctimer模块提供了一个计时器机制(机制)调用指定的C函数ct ...
- contiki学习笔记(八)rtimer stimer 计时器库
九.实时任务调度(rtimer) 实时模块处理实时任务的调度和执行(具有可预测的执行时间). Data Structures struct rtimerRepresentation of a real ...
- contiki学习笔记(三)contiki系统
contiki系统函数源代码中包含了如下几个部分 具体实现见后文 一. Argument buffer(参数缓存区) The argument buffer can be used when pass ...
- contiki 学习笔记 leds实现部分
1.前言 contiki是一款小型开源,易于移植的多任务操作系统,专门为无线传感网设计,适合内存受限制的网络系统.国内的研究和应用还处于初级阶段,甚至还不知道这个contiki如何发音,也没有 ...
- contiki学习笔记之leds
1.介绍 不断学习,不断忘记,总感觉学了就忘,结果啥都没剩下.所以有写下来的想法了. contiki 一个非常小的操作系统,尤其是对内存有优化.操作系统完全用C语言编写,可移植性非常好.具体可以去co ...
- contiki学习笔记(二)CTK图形界面
CTK 图形界面 Contiki 工具包(CTK)为康智奇系统提供了图形用户界面 Modules CTK device driver functions CTK设备驱动程序功能 CTK设备驱动程序功能 ...
最新文章
- iis 网页HTTP 错误 404.3 - Not Found解决方案
- C#字节数组与值类型变量的互相转换,以及注意事项
- iphone练习之手势识别(双击、捏、旋转、拖动、划动、长按)UITapGestureRecognizer...
- 字节码是java虚拟机的指令组_JVM??
- ArcGIS实验教程——实验五:空间数据编辑
- 天池 在线编程 卡牌游戏(01背包)
- HTML 中多媒体设置:1、滚动字幕及滚动图片的设置 2、音乐视频的插入
- 2017 Multi-University Training Contest - Team 1
- Linux高级编程--06.进程概述
- 完全二叉树叶子结点的算法
- 分布式机器学习平台比较
- 笔记本win10玩红警黑屏_外星人笔记本新手优化教程
- 笔记本用HDMI转VGA转接线后,显示器没声音的解决方法
- Hazel引擎学习(六)
- watch属性的使用
- 看顶级渣男如何邀约100个女朋友(一)
- html如何做交互效果,12个创新的网页界面交互和动画效果
- 2017 Multi-University Training Contest 1 solutions BY 北京航空航天大学
- Oracle-SQL查询表的一条数据
- java使用set去重lit集合集合去重字符串集合去重