Contiki clock模块
一、functions for handling system time
clock_time_t clock_time(void);//return the current system time in clock ticks
unsigned long clock_seconds(void);//return the system time in seconds
void clock_set_seconds(unsigned long ec);//set the value of the platform seconds
这些函数都是platform dependent的,我们是在stm8中实现的。
#if USE_RTC_CLK
#if USE_LSE // 32768Hz
#define CLOCK_CONF_SECOND 1024
#else // 38000Hz
#define CLOCK_CONF_SECOND 1000
#endif
#else
#define CLOCK_CONF_SECOND 1024
#endif
typedef unsigned long clock_time_t;
/**
* A second, measured in system clock time.
*
* \hideinitializer
*/
#ifdef CLOCK_CONF_SECOND
#define CLOCK_SECOND CLOCK_CONF_SECOND
#else
#define CLOCK_SECOND (clock_time_t)32
#endif
其中我们的clock_time_t是unsigned long型的,在stm8中unsigned long是32bit,最大数值是4294967295。
The number of clock ticks per second is specified with the constant CLOCK_SECOND.
CLOCK_SECOND 按1024来算,clock_time函数wrap around的时间是:
4294967295/1024/(60*60*24*365) = 0.133年
clock_seconds函数wrap aound的时间是:
4294967295/(60*60*24*365) = 136.2年
The system time starts from zero when the Contiki system starts.
二、functions for blocking the CPU
/**
* Wait for a given number of ticks.
* \param t How many ticks.
*
*/
void clock_wait(clock_time_t t); /**
* Delay a given number of microseconds.
* \param dt How many microseconds to delay.
*
* \note Interrupts could increase the delay by a variable amount.
*/
void clock_delay_usec(uint16_t dt);
These functions are normally only used in low-level drivers where it sometimes is necessary to wait a short time without giving up the control over the CPU.
The function clock_init() is called by the system during the boot-up procedure to initialize the clock module.
main函数:
int
main(void)
{
reset_sr = RST->SR;
RST->SR = 0xFF; clock_init(); leds_init();
leds_on(LEDS_GREEN);
HALT_LED_ON(); rs232_init(RS232_PORT_0, USART_BAUD_9600, USART_PARITY_NONE); node_id_restore();
node_init(); process_init(); process_start(&etimer_process, NULL); ctimer_init(); 略…… return ;
}
三、Porting the Clock Module
The clock module is platform dependent and is implemented in the file clock.c. Since the clock module handles the system time, the clock module implementation usually also handles the notifications to the etimer library when it is time to check for expired event timers.
具体相关代码如下:
if(etimer_pending() && etimer_next_expiration_time() <= current_clock) {
etimer_request_poll();
}
Contiki clock模块的更多相关文章
- Contiki Etimer 模块
一.Etimer概述 Etimer提供产生时间事件(timed event)的机制,当设定好的timer到期时,将会给设定etimer的process发送一个PROCESS_EVENT_TIMER 事 ...
- Contiki Rtimer 模块
一.rtimer概述 The Contiki rtimer library provides scheduling and execution of real-time tasks (with pre ...
- Contiki Ctimer模块
Ctimer 提供和Etimer类似的功能,只是Ctimer是在一段时间后调用回调函数,没有和特定进程相关联. 而Etimer是在一段时间后发送PROCESS_EVENT_TIMER事件给特定的进程. ...
- [置顶] STM32移植contiki进阶之三(中):timer 中文版
鉴于自己英语水平不高,在这里,将上一篇关于contiki 的timer的文章翻译为中文,让自己在学习的时候,更方便点.文中有许多不是很通顺的地方,将就吧. Timers Contiki系统提供了一套时 ...
- Contiki-Timer 概述
Contiki有一个clock模块和一系列timer模块:timer,stimer,ctimer,etimer,和rtimer. 一.clock模块 clock模块提供一些处理系统时间的函数,还有一些 ...
- Linux时间子系统之(二):软件架构
专题文档汇总目录 Notes:从框架上讲解了时间子系统,从底向上包括CPU Local TImer.Global Counter.Clock Souce/Clock Events模块管理.Tick D ...
- Linux时间子系统(二) 软件架构
一.前言 本文的主要内容是描述内核时间子系统的软件框架.首先介绍了从旧的时间子系统迁移到新的时间子系统的源由,介绍新的时间子系统的优势.第三章汇整了时间子系统的相关文件以及内核配置.最后描述各种内核配 ...
- 体系编程、SOC编程那些事儿
转:https://blog.csdn.net/yueqian_scut/article/details/49968897 笔者将从芯片IC的系统设计的角度去诠释如何掌握体系编程和SOC编程.笔者有超 ...
- SYS/BIOS实例分析
SYS/BIOS简介 SYS/BIOS是一个可扩展的实时内核(或者说是操作系统),其提供了许多模块化的APIs(应用程序接口),支持抢占式多线程,硬件抽象,实时分析和配置工具,其设计目的是为了最大限度 ...
随机推荐
- <<Python基础教程>>学习笔记 | 第04章 | 字典
第04章:字典 当索引不好用时 Python唯一的内建的映射类型,无序,但都存储在一个特定的键中.键能够使字符.数字.或者是元祖. ------ 字典使用: 表征游戏棋盘的状态,每一个键都是由坐标值组 ...
- 一知半见的load与get
http://www.oschina.net/question/5189_3991 我只用get.load不管.
- Reverse Linked List II -- 翻转部分链表
Reverse a linked list from position m to n. Do it in-place and in one-pass. For example:Given1->2 ...
- 【Excle数据透视表】如何移动数据透视表的位置
数据透视表创建完成了,现在需要将它移动到D5位置,如何移动呢? 解决办法 通过"移动数据透视表"功能实现数据透视表的位置移动 步骤1 单击数据透视表任意单元格→数据透视表工具→分析 ...
- C++中全局变量如何使用
运行文件的小技巧:包含2个.CPP和一个.H文件,必须一个.CPP一个.H一一对应.且C++中,只能运行一个项目,要想在多个文件中(.cpp)运行一个.cpp必须建立多个项目,或者将不允许运行的文件从 ...
- Python 的下载安装
学习Python牛逼的教程: http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000,本文 ...
- 【Wechall.net挑战】Anderson Application Auditing
Wechall.net是一个国外用于练习CTF和攻防的网站,国内资料writeup不多,只有个别几篇.作为小白,近日玩了几道有意思的题目,在此分享 题目地址:http://www.wechall.ne ...
- 一份还热乎的蚂蚁面经(已拿Offer)!附答案!!
本文来自我的知识星球的球友投稿,他在最近的校招中拿到了蚂蚁金服的实习生Offer,整体思路和面试题目由作者--泽林提供,部分答案由Hollis整理自知识星球<Hollis和他的朋友们>中「 ...
- java 动态实现接口
package com.yhouse.modules.daos; public interface IUserDao { public String getUserName(); public Str ...
- Npm 被公司墙解决方法
npm被公司墙了,不能用npm安装任何包应用了. npm ERR! Darwin npm ERR! argv "/usr/local/Cellar/node/6.4.0/bin/node&q ...