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 0;
}

三、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();
  }
时间: 2024-11-06 23:16:24

Contiki clock模块的相关文章

Contiki Rtimer 模块

一.rtimer概述 The Contiki rtimer library provides scheduling and execution of real-time tasks (with predictable execution times) 数据结构: struct rtimer { rtimer_clock_t time; rtimer_callback_t func; void *ptr; }; typedef void (* rtimer_callback_t)(struct r

Contiki-Timer 概述

Contiki有一个clock模块和一系列timer模块:timer,stimer,ctimer,etimer,和rtimer. 一.clock模块 clock模块提供一些处理系统时间的函数,还有一些用来阻塞CPU的函数. timer模块的实现以clock模块为基础. 二.timer和stimer模块 timer和stimer提供最简单的形式来判断一段时间是否到期. timer使用clock tick来判断. stimer使用秒来判断,可以判断更长的时间间隔. timer和stimer可以使用在

msp430知识

IO口 数字输入/输出端口有下列特性:□ 每个输入/输出位都可以独立编程.□ 允许任意组合输入.输出.□ P1 和 P2 所有 8 个位都可以分别设置为中断.□ 可以独立操作输入和输出数据寄存器.□ 可以分别设置上拉或下拉电阻. 在介绍这四个I/O口时提到了一个“上拉电阻”那么上拉电阻又是一个什么东东呢?他起什么作用呢?都说了是电阻那当然就是一个电阻啦,当作为输入时,上拉电阻将其电位拉高,若输入为低电平则可提供电流源;所以如果P0口如果作为输入时,处在高阻抗状态,只有外接一个上拉电阻才能有效.

配置一个逻辑CPU专用于实时任务----Kithara RTS工程源码分析

本文以windows实时拓展Kithara RTS安装目录下的smp文件夹内的DedicatedRealTimeTask项目为例,讲解使实时任务以独占一个逻辑CPU的方式运行,并实现任务间的同步. 目前多核计算机已经普及,多数的PC都是多核的.针对这种多核结构,我们设想把计算机划分为不同的硬件区间,其中一部分用于被实时任务专用,另一部分是被windows使用的,两者之间互不干扰,这样实时任务可以实现更好的实时性能.这种硬件划分,一般是按照物理CPU的核心数,即逻辑CPU的数量来配置的.可以配置一

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

一.前言 本文的主要内容是描述内核时间子系统的软件框架.首先介绍了从旧的时间子系统迁移到新的时间子系统的源由,介绍新的时间子系统的优势.第三章汇整了时间子系统的相关文件以及内核配置.最后描述各种内核配置下的时间子系统的数据流和控制流. 二.背景介绍 1.传统内核时间子系统的软件架构 让我们先回到远古的2.4内核时代,其内核的时间子系统的软件框架如下: 首先,在每个architecture相关的代码中要有实现clock event和clock source模块.这里听起来名字是高大上,实际上,这里

I.MX6 各模块 clock 查询

/********************************************************************* * I.MX6 各模块 clock 查询 * 说明: * 今天在查资料的时候无意中发现了查看内核时钟频率的方法,这东西 * 我一直以为不能查,只能通过查看源代码来看. * * 2016-8-1 深圳 南山平山村 曾剑锋 ********************************************************************/

time模块的两个函数time.clock()和time.time()的区别

在统计python代码 执行速度时要使用到time包,在查找相关函数时有time.time()和time.clock()两个函数可供选择.而两者是有区别的: cpu 的运行机制:cpu是多任务的,例如在多进程的执行过程中,一段时间内会有对各进程被处理.一个进程从从开始到结束其实是在这期间的一些列时间片断上断断续续执行的.所以这就引出了程序执行的cpu时间(该程序单纯在cpu上运行所需时间)和墙上时钟wall time. time.time()是统计的wall time(即墙上时钟),也就是系统时

Contiki源码结构

Contiki源码结构 apps目录下,用于存放Application,也就是我们的应用程序放在这个目录下.如webserver,webrowser等,如下图所示. core目录是contiki操作系统的内核所在. 其中cfs是contiki file system interface 模块,provide a lightweight flash system,called Coffee. 也就是文件系统. 其中ctk是contiki的图形界面模块,提供了graphical user inter

contiki系统分析:时钟

contiki系统提供了一系列的时钟库,可以供contiki系统或者用户态的程序调用. 时钟库包括时钟到期检查.在调度时钟时低功耗的模块被唤醒,实时的任务调度. 定时器也可以让执行具体的事情过程中进入休眼状态. contiki的定时器的种类 contiki包抱一个时钟模块,但是有多个时钟模型:timer, stimer, ctimer, etimer, rtimer.不同的时钟有不同的作用.有的定时器运行时间长,但是间隔时间短,有的间隔时间长,但是运行时间短.有些能用于中断的上下文中(rtime