Contiki clock模块

发布者:DazzlingSpirit最新更新时间:2020-09-24 来源: eefocus关键字:Contiki  clock模块  STM8 手机看文章 扫描二维码
随时随地手机看文章

一、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();

  }

关键字:Contiki  clock模块  STM8 引用地址:Contiki clock模块

上一篇:IAR FOR STM8S 错误 An error occurred while retrieving GDI features: gdi-error
下一篇:STM8S103内存详析

小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved