zoukankan      html  css  js  c++  java
  • 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.
     *
     * 
    ote 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();
      }
  • 相关阅读:
    document.write("x3cx54")?是加密了吗?
    SQL中以count及sum为条件的查询
    给MyEclipse 10增加SVN功能
    iOS参考工具和资源
    Apple Developer参考资料
    [转]最常见的20个jQuery面试问题及答案
    丢掉鼠标-Mac神软Alfred使用手册
    jQuery执行进度提示窗口的实现(progressbar)
    [转]5个JavaScript面试题
    自己写的POIUtil,主要解决从不同的HSSFWorkbook复制sheet以及根据单元格插入图片等
  • 原文地址:https://www.cnblogs.com/songdechiu/p/5952108.html
Copyright © 2011-2022 走看看