历史上的今天
今天是:2024年09月24日(星期二)
2020年09月24日 | Contiki clock模块
2020-09-24 来源:eefocus
一、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();
}
史海拾趣
|
一、前言 在原油开采过程中,初次采油一般依靠地底压力让原油自喷而出;此后由于地下压力减小,不得不往地下注水将油驱出,称二次采油。当前,中国多数油田处于二次采油晚期,每百吨采出液体中,含水量高达95%,综合原油采收率只有30%多一些,6 ...… 查看全部问答> |
|
本帖最后由 jameswangsynnex 于 2015-3-3 19:56 编辑 请教各位高手,什么型号的双栅管可以代替3SK318(能直接替换最好) 谢谢! … 查看全部问答> |
|
2440 读 温度芯片,总是无法触发中断,请教有什么方法呀? BSP包里通过应用层调用IIC文件夹不能正常工作,只好转入到bootloader层去做温度检测了,可是无论如何也不能触发中断,有经验的请指教,先谢谢了。… 查看全部问答> |




