/***************************************************************************** * uart.h: Header file for NXP LPC17xx Family Microprocessors * * Copyright(C) 2017,SensorControl * All rights reserved. * * History * 2009.05.27 ver 1.00 Prelimnary version, first Release *2017.01.10 ver 1.10 rename tick.h tick.c ******************************************************************************/ /***************************************************** *============================================================================ * HISTORY * Below this line, this part is controlled by TSTS. DO NOT MODIFY!! 伪时间片嵌入式平台(Task Step by Step Turn by Turn Structure,简称TSTS) *============================================================================ ****************************************************************************/ #ifndef __tick_H #define __tick_H #include "../clib/Type.h" //#include "../bsp/type_hs.h" #include "../msp/time.h" #define D_use_tick_fum struct _s_nos_tick_ { vU32 tp_count; //最后一次接收数据时间到目前的tick数量 /// vU32 sys_clock; // vU32 t_n; // noos系统定时器最小技术单元 vU32 t_10ms; // noos 系统定时器10m技术 #ifdef D_use_tick_fum //volatile INT32U t_100ms; vU32 t_1s; /// vU32 t_10s; // vU32 t_60s; vU8 flag_1s; vU8 flag_1s2; /// volatile INT32U tmp; /// volatile INT32U time_left; /// volatile INT32U h; /// volatile INT32U m; vU32 n_stamp; // vU32 t1s_flag[6]; //fixme: INT32U 根据不同的系统来决定 //volatile unsigned char t1s_flag; /// vU8 ts_flag; vU32 n_stamp3; #endif vU8 t1s_heatbeart; //noos 系统定时器整秒时刻标志,需要软件清除 }; extern struct _s_nos_tick_ s_nos_tick; #ifdef D_timer0_10ms //10ms 不能使用,10ms是最小颗粒时长,存在误差,无法使用 #define D_Tdelay_ms D_TIMER0_10MS_COUNT//D_TIMER0_10MS_COUNT #define D_Tdelay_10ms 2 #define D_Tdelay_20ms (2+D_Tdelay_ms) #define D_Tdelay_30ms (3+D_Tdelay_ms) #define D_Tdelay_40ms (4+D_Tdelay_ms) #define D_Tdelay_50ms (5+D_Tdelay_ms) #define D_Tdelay_60ms (6+D_Tdelay_ms) #define D_Tdelay_80ms (8+D_Tdelay_ms) #define D_Tdelay_100ms (10+D_Tdelay_ms) #else //10ms 不能使用,10ms是最小颗粒时长,存在误差,无法使用 #define D_Tdelay_ms D_TIMER0_10MS_COUNT//D_TIMER0_10MS_COUNT #define D_Tdelay_10ms 1 #define D_Tdelay_20ms (0+D_Tdelay_ms) #define D_Tdelay_30ms (0+D_Tdelay_ms) #define D_Tdelay_40ms (2+D_Tdelay_ms) #define D_Tdelay_50ms (2+D_Tdelay_ms) #define D_Tdelay_60ms (2+D_Tdelay_ms) #define D_Tdelay_80ms (3+D_Tdelay_ms) #define D_Tdelay_100ms (4+D_Tdelay_ms) #endif #define D_Tdelay_200ms (D_Tdelay_100ms*2) #define D_Tdelay_300ms (D_Tdelay_100ms*3) #define D_Tdelay_400ms (D_Tdelay_100ms*4) #define D_Tdelay_500ms (D_Tdelay_100ms*5) #define D_Tdelay_600ms (D_Tdelay_100ms*6) #define D_Tdelay_700ms (D_Tdelay_100ms*7) #define D_Tdelay_800ms (D_Tdelay_100ms*8) #define D_Tdelay_900ms (D_Tdelay_100ms*9) #define D_Tdelay_1s (D_Tdelay_100ms*10) #define D_Tdelay_1s2 (D_Tdelay_100ms*12) #define D_Tdelay_1s5 (D_Tdelay_100ms*15) #define D_Tdelay_2s (D_Tdelay_100ms*20) #define D_Tdelay_2s5 (D_Tdelay_100ms*25) #define D_Tdelay_3s (D_Tdelay_100ms*30) #define D_Tdelay_5s (D_Tdelay_100ms*50) #define D_Tdelay_8s (D_Tdelay_100ms*80) #define D_Tdelay_9s (D_Tdelay_100ms*90) #define D_Tdelay_10s (D_Tdelay_100ms*100) #define D_Tdelay_1min (D_Tdelay_1s*60) #define D_Tdelay_1h (D_Tdelay_1min*60) #define D_Tdelay_1day (D_Tdelay_1h*24) #define D_TIMER0_1S_COUNT 100 //#define D_10mS 1//D_TIMER0_10MS_COUNT //#define D_100mS (D_10mS*10) //#define D_1S (D_10mS*100) //>> 定时器: 初始化 间隔时间到 // L0_nos_tick10ms_start(s->times); 开始初始化s->times 以10ms为一个单位 // if( L0_nos_tick10ms_interval(s->times) < 20)// s->times 执行了20次后,也就是 定时20*10m到达 //必须配对 #define L0_nos_tick10ms_start(start_n) start_n = s_nos_tick.t_10ms #define L0_nos_tick10ms_interval(start_n) (s_nos_tick.t_10ms - start_n) #define L0_nos_tick1s_start(start_n) start_n = s_nos_tick.t_1s #define L0_nos_tick1s_interval(start_n) (s_nos_tick.t_1s - start_n) //>>>//必须配对 #define L2_tick_time_stamp(time_stamp) time_stamp = s_nos_tick.t_10ms; #define L2_tick_time_interval(time_stamp,time_overflow) (( s_nos_tick.t_10ms - time_stamp) > time_overflow) #define L3_tick_interval(x) L2_tick_time_interval(s_nos_tick.n_stamp,x) #define L2_tick_stamp() L2_tick_time_stamp(s_nos_tick.n_stamp); //>>>示例如下: #if 0 { case D_task_init:// Lc_print_buf(" \r\n YL_ init"); s->step = D_AT; L0_esp_open(); L2_task_go(D_task_YL_ready); s_uart0_rec.ok = 0; L2_tick_time_stamp(s->t_stamp); // L1_task_Tdelay(1*D_Tdelay_1s); //大约6s break; case D_task_YL_ready: if(1 == s_uart0_rec.ok) { if(strstr(s_uart0_rec.array,"ready") != NULL) { Ldi_print("ready..\r\n"); s->step = D_AT; L2_task_go(D_task_YL_ask); } s_uart0_rec.ok = 0; } if(L2_tick_time_stamp(s->t_stamp,1*D_Tdelay_1s)) {// 时间溢出 L0_esp_close(); Ldi_print("fail esp restart.\r\n"); L2_task_go(D_task_init); L1_task_Tdelay(2*D_Tdelay_1s); } break; } #endif // 他和t_10ms 关联,如果t_10ms递增为1时间隔为(D_TIMER0_10MS_COUNT*定时器间隔) /// #define D_TIMER0_10MS_COUNT 1 //定时器为 10ms一中断 #ifdef D_use_tick_fum extern void L1_tick_init(void); extern void L1_tick_tick (void); #else #define L1_tick_init() #define L1_tick_tick() s_nos_tick.t_10ms ++; #endif //L2_time_beat_heart(D_TBH_ch1,2,'t') #define D_TBH_ch0 0 #define D_TBH_ch1 1 #define D_TBH_ch2 2 #define D_TBH_ch3 3 #define D_TBH_ch4 4 #define D_TBH_ch5 5 extern void L2_time_beat_heart(vU32 ch,U8 invent,U8 s); //void L2_time_beat_heart_fun(INT32U ch,unsigned char invent,void *fun(void)); extern void L2_time_beat_heart_fun(vU32 ch,U8 invent,void (*fun)(void)); #endif /* end __tick_H */ /***************************************************************************** ** End Of File ******************************************************************************/