📄 ggt_mut.lst
字号:
ARM COMPILER V2.32a, GGT_Mut 28/02/08 23:05:55 PAGE 1
ARM COMPILER V2.32a, COMPILATION OF MODULE GGT_Mut
OBJECT MODULE PLACED IN .\Output\GGT_Mut.obj
COMPILER INVOKED BY: D:\Program Files\Keil\ARM\BIN\CA.exe Source\Kernel\GGT_Mut.c ARM BROWSE DEBUG PRINT(.\LIST\GGT_MUT.
-LST) TABS(4) OBJECT(.\Output\GGT_Mut.obj)
stmt level source
1 /****************************************************************************************************
2 ** Gogoto OS
3 ** The Real-Time Kernel
4 ** (c) Copyright 2007-2008, luyigui(卢益贵)
5 ** All Rights Reserved
6 ** V1.00.0
7 **
8 ** 狗狗兔嵌入式多任务系统(基于消息机制)
9 ** 绿城代码、GGT-OS、Gogoto OS、狗狗兔嵌入式、狗狗兔系统
10 ** QQ:48092788
11 **
12 **------------------文件信息------------------------------------------------------------------------
13 ** 文件名: GGT_Mut.c
14 ** 创建人: 卢益贵
15 ** 日 期: 2007年12月8日
16 ** 版 本: V1.00.0
17 ** 描 述: Gogoto OS 任务排斥功能单元
18 **
19
20 **------------------修改记录------------------------------------------------------------------------
21 ** 修改人:
22 ** 版 本:
23 ** 日 期:
24 ** 描 述:
25 **
26
27 ****************************************************************************************************/
28
29 #include "GGT_OS.h"
30 #include "GGT_CPU.h"
31 #include "GGT_Func.h"
32 #include "GGT_SysType.h"
33 #include "GGT_Kernel.h"
34
35 /****************************************************************************************************
36 ** 函数名: OSMutInit
37 ** 描 述: 互斥变量初始化
38 ** 输 入: pMut:互斥变量指针
39 ** 输 出: 无
40 ** 创建人: 卢益贵
41 ** 日 期: 2007年12月8日
42
43 **------------------修改记录------------------------------------------------------------------------
44 ** 修改人: 卢益贵
45 ** 日 期: 2008年1月7日
46 ** 说 明:
47 ** 原代码:
48 **--------------------------------------------------------------------------------------------------
49 ****************************************************************************************************/
50 void OSMutInit(_pMut pMut)
51 {
52 1 OSIRQLock();
53 1
54 1 pMut->IsBusy = FALSE;
55 1 pMut->pTask = NULL;
56 1 pMut->Count = 0;
57 1 pMut->Owner = 0;
58 1
ARM COMPILER V2.32a, GGT_Mut 28/02/08 23:05:55 PAGE 2
59 1 OSIRQUnlock();
60 1 }
61
62 /****************************************************************************************************
63 ** 函数名: OSMutRelease
64 ** 描 述: 互斥量释放
65 ** 输 入: pMut:互斥变量指针
66 ** 输 出: 无
67 ** 创建人: 卢益贵
68 ** 日 期: 2007年12月8日
69
70 **------------------修改记录------------------------------------------------------------------------
71 ** 修改人: 卢益贵
72 ** 日 期: 2008年1月7日
73 ** 说 明:
74 ** 原代码:
75 **--------------------------------------------------------------------------------------------------
76 ****************************************************************************************************/
77 void OSMutRelease(_pMut pMut)
78 {
79 1 _pOSTask pTask;
80 1
81 1 OSIRQLock();
82 1
83 1 pMut->Count--;
84 1
85 1 if(0 >= pMut->Count)
86 1 {
87 2 if(pMut->pTask)
88 2 {
89 3 pMut->IsBusy = TRUE;
90 3 pMut->Owner = pTask->ID;
91 3 pMut->Count = 0;
92 3 pTask = pMut->pTask;
93 3 ((_pOSTask)(pMut->pTask)) = ((_pOSTask)(pMut->pTask))->pNext;
94 3 OSTaskPushReady(pTask);
95 3 OSTaskSW();
96 3 }else
97 2 pMut->IsBusy = FALSE;
98 2 }
99 1
100 1 OSIRQUnlock();
101 1 }
102
103 /****************************************************************************************************
104 ** 函数名: OSMutWait
105 ** 描 述: 互斥量等待。
106 ** 输 入: pMut:互斥变量指针
107 ** 输 出: 无
108 ** 创建人: 卢益贵
109 ** 日 期: 2007年12月8日
110
111 **------------------修改记录------------------------------------------------------------------------
112 ** 修改人: 卢益贵
113 ** 日 期: 2008年1月7日
114 ** 说 明:
115 ** 原代码:
116 **--------------------------------------------------------------------------------------------------
117 ****************************************************************************************************/
118 void OSMutWait(_pMut pMut)
119 {
120 1 OSIRQLock();
121 1
122 1 if(pMut->IsBusy)
123 1 {
124 2 if(pMut->Owner != pOSTskNow->ID)
ARM COMPILER V2.32a, GGT_Mut 28/02/08 23:05:55 PAGE 3
125 2 {
126 3 pOSTskNow->State = OS_STATE_TSK_WAIT_MUT;
127 3 //按权限排序,权限高的在前面。
128 3 ListInsert(&(pMut->pTask), pOSTskNow, OSTaskOrderByPrio);
129 3 OSTaskIsNULLLoadDef();
130 3 OSTaskSW();
131 3 }else
132 2 pMut->Count++;
133 2 }else
134 1 {
135 2 pMut->Count = 0;
136 2 pMut->Owner = pOSTskNow->ID;
137 2 pMut->IsBusy = TRUE;
138 2 }
139 1
140 1 OSIRQUnlock();
141 1 }
142
143
ARM COMPILER V2.32a, GGT_Mut 28/02/08 23:05:55 PAGE 4
ASSEMBLY LISTING OF GENERATED OBJECT CODE
*** EXTERNALS:
EXTERN CODE32 (SWI_Handler?A)
EXTERN CODE32 (ListInsert?A)
EXTERN DATA (pOSTskNow)
EXTERN CODE32 (OSTaskPushReady?A)
EXTERN CODE32 (OSTaskIsNULLLoadDef?A)
EXTERN CODE32 (OSTaskOrderByPrio?A)
*** PUBLICS:
PUBLIC OSMutWait?A
PUBLIC OSMutRelease?A
PUBLIC OSMutInit?A
*** CODE SEGMENT '?PR?OSMutInit?A?GGT_Mut':
50: void OSMutInit(_pMut pMut)
00000000 E92D4010 STMDB R13!,{R4,LR}
00000004 E1A04000 MOV R4,R0 ; pMut
00000008 ---- Variable 'pMut' assigned to Register 'R4' ----
52: OSIRQLock();
00000008 E3A00002 MOV R0,#0x2
0000000C EF000000 SWI 0x0 ; SWI_Handler?A
54: pMut->IsBusy = FALSE;
00000010 E3A01000 MOV R1,#0x0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -