📄 ggt_msg.lst
字号:
ARM COMPILER V2.32a, GGT_Msg 07/01/08 21:34:46 PAGE 1
ARM COMPILER V2.32a, COMPILATION OF MODULE GGT_Msg
OBJECT MODULE PLACED IN .\Output\GGT_Msg.obj
COMPILER INVOKED BY: D:\Program Files\Keil\ARM\BIN\CA.exe Source\Kernel\GGT_Msg.c ARM BROWSE DEBUG PRINT(.\LIST\GGT_MSG.
-LST) TABS(4) OBJECT(.\Output\GGT_Msg.obj)
stmt level source
1 /****************************************************************************************************
2 ** Gogoto OS
3 ** (c) Copyright 2007-2008, luyigui(卢益贵)
4 ** All Rights Reserved
5 ** V1.00.0
6 **
7 ** 狗狗兔嵌入式多任务系统(基于消息机制)
8 ** 绿城代码、GGT-OS、Gogoto OS、狗狗兔嵌入式、狗狗兔系统
9 ** QQ:48092788
10 **
11 **------------------文件信息------------------------------------------------------------------------
12 ** 文件名: GGT_Msg.c
13 ** 创建人: 卢益贵
14 ** 日 期: 2007年12月8日
15 ** 版 本: V1.00.0
16 ** 描 述: Gogoto OS 消息功能单元
17 **
18
19 **------------------修改记录------------------------------------------------------------------------
20 ** 修改人:
21 ** 版 本:
22 ** 日 期:
23 ** 描 述:
24 **
25
26 ****************************************************************************************************/
27
28 #include "GGT_OS.h"
29 #include "GGT_CPU.h"
30 #include "GGT_Type.h"
31 #include "GGT_SysType.h"
32 #include "GGT_SysCfg.h"
33 #include "GGT_Kernel.h"
34
35 #if(OS_MSG)
36
37 UINT32 *pOSBoxMsg;
38
39 /****************************************************************************************************
40 ** 函数名: OSMsgInit
41 ** 描 述: 初始化消息空间
42 ** 输 入: 无
43 ** 输 出: 无
44 ** 创建人: 卢益贵
45 ** 日 期: 2007年12月8日
46
47 **------------------修改记录------------------------------------------------------------------------
48 ** 修改人:
49 ** 日 期:
50 ** 说 明:
51 ** 原代码:
52 **--------------------------------------------------------------------------------------------------
53 ****************************************************************************************************/
54 void OSMsgInit(void)
55 {
56 1 pOSBoxMsg = (UINT32 *)OSGetBoxMsg();
57 1 BoxInit(pOSBoxMsg, sizeof(_BoxHead) + OSGetSumMsg() * sizeof(_OSMsg), sizeof(_OSMsg));
58 1 }
ARM COMPILER V2.32a, GGT_Msg 07/01/08 21:34:46 PAGE 2
59
60 /****************************************************************************************************
61 ** 函数名: OSMsgPost
62 ** 描 述: 消息发送函数,不等待目标处理,不管收到与否
63 ** 输 入: TaskID:目标任务的ID,
64 Msg:消息内容,
65 wParam:消息参数
66 lParam:消息参数
67 ** 输 出: 返回TRUE表示成功
68 ** 创建人: 卢益贵
69 ** 日 期: 2007年12月8日
70
71 **------------------修改记录------------------------------------------------------------------------
72 ** 修改人:
73 ** 日 期:
74 ** 说 明:
75 ** 原代码:
76 **--------------------------------------------------------------------------------------------------
77 ****************************************************************************************************/
78 BOOL OSMsgPost(const UINT32 TaskID, const UINT32 Msg, const UINT32 wParam, const UINT32 lParam)
79 {
80 1 BOOL R;
81 1 _pOSMsg pMsg;
82 1 _pOSTask pTask;
83 1
84 1 OSIRQLock();
85 1
86 1 pMsg = (_pOSMsg)BoxAlloc(pOSBoxMsg);
87 1 R = pMsg != NULL;
88 1 if(R)
89 1 {
90 2 pMsg->Sender = pOSTskNow->ID;
91 2 pMsg->Msg = Msg;
92 2 pMsg->wParam = wParam;
93 2 pMsg->lParam = lParam;
94 2
95 2 pTask = &pOSTask[TaskID - 1];
96 2 ListAppend((void *)(&(pTask->pMsg)), pMsg);
97 2
98 2 //如果对方正在等待,则加载他
99 2 if(OS_TSK_STATE_WAIT_MSG == pTask->State)
100 2 OSTaskPushReady(pTask);
101 2 }
102 1
103 1 OSIRQUnlock();
104 1 return(R);
105 1 }
106
107 /****************************************************************************************************
108 ** 函数名: OSMsgPeek
109 ** 描 述: 消息窥探
110 ** 输 入: pMsg:指向消息结构的指针
111 ** 输 出: 返回TRUE表示有消息
112 ** 创建人: 卢益贵
113 ** 日 期: 2007年12月8日
114
115 **------------------修改记录------------------------------------------------------------------------
116 ** 修改人:
117 ** 日 期:
118 ** 说 明:
119 ** 原代码:
120 **--------------------------------------------------------------------------------------------------
121 ****************************************************************************************************/
122 BOOL OSMsgPeek(_pMsg pMsg)
123 {
124 1 BOOL R;
ARM COMPILER V2.32a, GGT_Msg 07/01/08 21:34:46 PAGE 3
125 1 _pOSMsg pOSMsg;
126 1
127 1 OSIRQLock();
128 1
129 1 R = (NULL != pOSTskNow->pMsg);
130 1 if(R)
131 1 {
132 2 pOSMsg = pOSTskNow->pMsg;
133 2 *pMsg = *((_pMsg)(&(pOSMsg->Sender)));
134 2 pOSTskNow->pMsg = (pOSTskNow->pMsg)->pNext;
135 2 BoxFree(pOSBoxMsg, pOSMsg);
136 2 }
137 1
138 1 OSIRQUnlock();
139 1
140 1 return(R);
141 1 }
142
143 /****************************************************************************************************
144 ** 函数名: OSMsgWait
145 ** 描 述: 消息等待函数,没有消息不返回,一直挂起等待
146 ** 输 入: pMsg:指向消息结构的指针
147 ** 输 出: 返回TRUE表示有消息
148 ** 创建人: 卢益贵
149 ** 日 期: 2007年12月8日
150
151 **------------------修改记录------------------------------------------------------------------------
152 ** 修改人:
153 ** 日 期:
154 ** 说 明:
155 ** 原代码:
156 **--------------------------------------------------------------------------------------------------
157 ****************************************************************************************************/
158 BOOL OSMsgWait(_pMsg pMsg)
159 {
160 1 DoWait:
161 1 if(OSMsgPeek(pMsg))
162 1 {
163 2 return(TRUE);
164 2 }else
165 1 {
166 2 pOSTskNow->State = OS_TSK_STATE_WAIT_MSG;
167 2 OSTaskIsNULLLoadDef();
168 2 OSTaskSW();
169 2 goto DoWait;
170 2 }
171 1 }
172
173 /****************************************************************************************************
174 ** 函数名: OSMsgWaitFor
175 ** 描 述: 等待指定消息的函数,等不到指定消息不返回,一直挂起等待
176 ** 输 入: pMsg:指向消息结构的指针
177 ** 输 出: 返回TRUE表示有消息
178 ** 创建人: 卢益贵
179 ** 日 期: 2007年12月8日
180
181 **------------------修改记录------------------------------------------------------------------------
182 ** 修改人:
183 ** 日 期:
184 ** 说 明:
185 ** 原代码:
186 **--------------------------------------------------------------------------------------------------
187 ****************************************************************************************************/
188 BOOL OSMsgWaitFor(const UINT32 Msg, _pMsg pMsg)
189 {
190 1 DoWait:
ARM COMPILER V2.32a, GGT_Msg 07/01/08 21:34:46 PAGE 4
191 1 if(OSMsgPeek(pMsg))
192 1 {
193 2 if(Msg == pMsg->Msg)
194 2 return(TRUE);
195 2 else
196 2 goto DoWait;
197 2 }else
198 1 {
199 2 pOSTskNow->State = OS_TSK_STATE_WAIT_MSG;
200 2 OSTaskIsNULLLoadDef();
201 2 OSTaskSW();
202 2 goto DoWait;
203 2 }
204 1 }
205
206 #endif
ARM COMPILER V2.32a, GGT_Msg 07/01/08 21:34:46 PAGE 5
ASSEMBLY LISTING OF GENERATED OBJECT CODE
*** EXTERNALS:
EXTERN CODE32 (ListAppend?A)
EXTERN CODE32 (BoxInit?A)
EXTERN CODE32 (BoxAlloc?A)
EXTERN CODE32 (BoxFree?A)
EXTERN CODE32 (SWI_Handler?A)
EXTERN DATA (pOSTskNow)
EXTERN DATA (pOSTask)
EXTERN CODE32 (OSTaskPushReady?A)
EXTERN CODE32 (OSTaskIsNULLLoadDef?A)
EXTERN CODE32 (OSGetSumMsg?A)
EXTERN CODE32 (OSGetBoxMsg?A)
*** PUBLICS:
PUBLIC OSMsgWaitFor?A
PUBLIC OSMsgWait?A
PUBLIC OSMsgPeek?A
PUBLIC OSMsgPost?A
PUBLIC OSMsgInit?A
PUBLIC pOSBoxMsg
*** DATA SEGMENT '?DT0?GGT_Msg':
00000000 pOSBoxMsg:
00000000 DS 4
*** CODE SEGMENT '?PR?OSMsgInit?A?GGT_Msg':
54: void OSMsgInit(void)
00000000 E92D4000 STMDB R13!,{LR}
56: pOSBoxMsg = (UINT32 *)OSGetBoxMsg();
00000004 EBFFFFFD BL OSGetBoxMsg?A ; Targ=0x0
00000008 E5101000 LDR R1,=pOSBoxMsg ; pOSBoxMsg
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -