前后台程序框架实例1
/***************************************************
*作 者:温子祺
*联系方式:wenziqi@hotmail.com
*说 明 :前后台程序框架实例1
***************************************************/
1 /*
2 ======================================================
3
4 类型定义
5
6 ======================================================
7 */
8 typedef struct _PROCCTRL
9 {
10 VOID (*Proc)(VOID);
11 BOOL bAlive;
12 }PROCCTRL;
13
14 /*
15 ======================================================
16
17 变量区
18
19 ======================================================
20 */
21 static UINT8 g_ucCurProc=0; //当前函数进程
22
23 static PROCCTRL g_StProcTbl[]={
24
25 #include "ProcessTab.h"
26
27 };
28
29 /*
30 ======================================================
31
32 函数区
33
34 ======================================================
35 */
36 /******************************************************
37 *文件名称:PROC_Idle
38 *输 入:无
39 *输 出:无
40 *功能说明:进入空闲模式(低功耗模式)
41 *******************************************************/
42 static VOID PROC_Idle(VOID)
43 {
44 MCU_IDLE();
45 }
46
47 /******************************************************
48 *文件名称:SetProcIsAlive
49 *输 入:ucProc 函数
50 bAlive 是否有效
51 *输 出:无
52 *功能说明:设置函数进程是否有效
53 *******************************************************/
54 VOID SetProcIsAlive(UINT8 ucProc,BOOL bAlive)
55 {
56 g_StProcTbl[ucProc].bAlive=bAlive?TRUE:FALSE;
57 }
58 /******************************************************
59 *文件名称:SetCurProcIsAlive
60 *输 入:bAlive 是否有效
61 *输 出:无
62 *功能说明:设置当前函数进程是否有效
63 *******************************************************/
64 VOID SetCurProcIsAlive(BOOL bAlive)
65 {
66 g_StProcTbl[g_ucCurProc].bAlive=bAlive?TRUE:FALSE;
67 }
68 /******************************************************
69 *文件名称:ProcPerform
70 *输 入:无
71 *输 出:无
72 *功能说明:函数进程调度
73 *******************************************************/
74 VOID ProcPerform(VOID)
75 {
76 #define EN_LOW_POWER (1) //是否允许低功耗模式
77 #define ENTER_IDLE_COUNT (3)
78
79 #if EN_LOW_POWER
80
81 static UINT8 ucIdleCount=0;
82
83 #endif
84
85 for(g_ucCurProc=0;g_StProcTbl[g_ucCurProc].Proc !=0;g_ucCurProc++)
86 {
87 if(g_StProcTbl[g_ucCurProc].bAlive)
88 {
89 g_StProcTbl[g_ucCurProc].Proc();
90 }
91 }
92
93 #if EN_LOW_POWER
94
95 if(++ucIdleCount >= ENTER_IDLE_COUNT)
96 {
97
98 PROC_Idle();
99
100 ucIdleCount=0;
101 }
102
103 #endif
104 }
105