一、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模块的更多相关文章

  1. Contiki Etimer 模块

    一.Etimer概述 Etimer提供产生时间事件(timed event)的机制,当设定好的timer到期时,将会给设定etimer的process发送一个PROCESS_EVENT_TIMER 事 ...

  2. Contiki Rtimer 模块

    一.rtimer概述 The Contiki rtimer library provides scheduling and execution of real-time tasks (with pre ...

  3. Contiki Ctimer模块

    Ctimer 提供和Etimer类似的功能,只是Ctimer是在一段时间后调用回调函数,没有和特定进程相关联. 而Etimer是在一段时间后发送PROCESS_EVENT_TIMER事件给特定的进程. ...

  4. [置顶] STM32移植contiki进阶之三(中):timer 中文版

    鉴于自己英语水平不高,在这里,将上一篇关于contiki 的timer的文章翻译为中文,让自己在学习的时候,更方便点.文中有许多不是很通顺的地方,将就吧. Timers Contiki系统提供了一套时 ...

  5. Contiki-Timer 概述

    Contiki有一个clock模块和一系列timer模块:timer,stimer,ctimer,etimer,和rtimer. 一.clock模块 clock模块提供一些处理系统时间的函数,还有一些 ...

  6. Linux时间子系统之(二):软件架构

    专题文档汇总目录 Notes:从框架上讲解了时间子系统,从底向上包括CPU Local TImer.Global Counter.Clock Souce/Clock Events模块管理.Tick D ...

  7. Linux时间子系统(二) 软件架构

    一.前言 本文的主要内容是描述内核时间子系统的软件框架.首先介绍了从旧的时间子系统迁移到新的时间子系统的源由,介绍新的时间子系统的优势.第三章汇整了时间子系统的相关文件以及内核配置.最后描述各种内核配 ...

  8. 体系编程、SOC编程那些事儿

    转:https://blog.csdn.net/yueqian_scut/article/details/49968897 笔者将从芯片IC的系统设计的角度去诠释如何掌握体系编程和SOC编程.笔者有超 ...

  9. SYS/BIOS实例分析

    SYS/BIOS简介 SYS/BIOS是一个可扩展的实时内核(或者说是操作系统),其提供了许多模块化的APIs(应用程序接口),支持抢占式多线程,硬件抽象,实时分析和配置工具,其设计目的是为了最大限度 ...

随机推荐

  1. Linux 指令篇:系统设置--set

    功能说明:设置shell. 语 法:set [+-abCdefhHklmnpPtuvx] 补充说明:set指令能设置所使用shell的执行方式,可依照不同的需求来做设置. 参 数: -a  标示已修改 ...

  2. vue2.X 自定义 模态框 modal

    1.自定义 modal Modal.vue <!-- 模态框 --> <template> <div class="modal-mask" v-sho ...

  3. Async Await 使用

    1.简单例子 var sleep = function (time) { return new Promise(function (resolve, reject) { setTimeout(func ...

  4. hdu2222Keywords Search字典树入门……

    #include<iostream> #include<cstring> using namespace std; struct node { int num; node *n ...

  5. .netMVC:Web页面向后台提交数据的方式和选择

    众所周知Web前端页面主要由HTML/CSS/Javascript组成,当要通过与用户的交互实现各种功能时,就需要向后台提交一些数据或者操作.在Web世界里各种实现眼花缭乱,但究其根本,不外乎三种方式 ...

  6. java程序如何优化--技巧总结

    http://www.douban.com/group/topic/17850695/

  7. MySQL的安装过程

     近期对MySQL做了一些研究. 曾经主要接触的是SQL SERVER.所以,今天对该安装过程做了一些总结以及使用过程中的一些心得.并分享给大家. 记得前面.分享过一篇关于数据库的几种连接方式.而 ...

  8. hdu 5071 Chat-----2014acm亚洲区域赛鞍山 B题

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5071 Chat Time Limit: 2000/1000 MS (Java/Others)    M ...

  9. js 第一篇(常用交互方法)

    1. cocument.write("content") //向html 直接写入内容 2. alert("content") // 警告对话框 3. conf ...

  10. 05 redis中的Setbit位图法统计活跃用户

    一:场景=>>>长轮询Ajax,在线聊天时,能够用到 Setbit 的实际应用 场景: 1亿个用户, 每个用户 登陆/做任意操作 ,记为 今天活跃,否则记为不活跃 每周评出: 有奖活 ...