?? task.lst
字號:
ARM COMPILER V2.50a, Task 16/05/06 14:55:46 PAGE 1
ARM COMPILER V2.50a, COMPILATION OF MODULE Task
OBJECT MODULE PLACED IN Task.OBJ
COMPILER INVOKED BY: C:\Keil\ARM\BIN\CA.exe Task.c THUMB WARNINGLEVEL(3) BROWSE DEBUG TABS(4)
stmt level source
1 /**********************************************************************************************
2 本程序只供學(xué)習(xí)使用,不得用于其它任何用途,否則后果自負(fù)。
3
4 Task.c file
5
6 作者:Computer-lov
7 建立日期:2006-5-8
8 修改日期:2006-5-15
9 版本:V1.0
10 版權(quán)所有,盜版必究。
11 任何技術(shù)問題可到我的博客上留言: http://computer00.21ic.org
12 Copyright(C) Computer-lov 2006-2016
13 All rights reserved
14 **********************************************************************************************/
15
16
17 #include <ADuC7026.H>
18
19 #include "interrupt.h"
20 #include "LED.H"
21 #include "ARM_00_OS_TaskSwitch.H"
22 #include "my_type.h"
23 #include "ARM_00_OS_Core.H"
24 #include "UART.H"
25 #include "KEYS.H"
26 #include "Task.h"
27
28 /**********************************************************************************************
29 任務(wù)1。處于掛起狀態(tài),等待一條消息。系統(tǒng)空閑任務(wù)會(huì)掃描按鍵,當(dāng)按鍵按下后,系統(tǒng)空閑任務(wù)會(huì)將
30 鍵值通過消息發(fā)送給任務(wù)1。任務(wù)1接到消息后,顯示消息的發(fā)送者以及消息的信息等。然后控制LED4的亮滅。
31 **********************************************************************************************/
32 void Task1(void)
33 {
34 1 uint32 PrinterDeviceAddr; //保存打印機(jī)設(shè)備的地址
35 1
36 1 PrinterDeviceAddr=OSGetDeviceAddr(OS_PRINTER_DEVICE_ID); //獲取打印機(jī)設(shè)備地址
37 1 OSRequestDevice(PrinterDeviceAddr,0); //申請使用打印機(jī)
38 1
39 1 prints("",1);
40 1 prints(OSCurrentPcb->Title,0); //顯示任務(wù)啟動(dòng)
41 1 prints(" Start.",1);
42 1
43 1 OSFreeDevice(PrinterDeviceAddr); //釋放打印機(jī)
44 1
45 1 EN_LED4(); //使能LED4
46 1
47 1 while(1)
48 1 {
49 2 OSTaskSuspend(OSCurrentPcb); //任務(wù)掛起
50 2 if(OSCurrentPcb->Msg) //如果收到消息
51 2 {
52 3 OSRequestDevice(PrinterDeviceAddr,0); //申請打印機(jī)
53 3
54 3 prints("",1);
55 3 prints("",1);
56 3 prints(OSCurrentPcb->Title,0); //顯示任務(wù)標(biāo)題
57 3 prints(":",1);
58 3 prints("Haha,I have got a message from: ",0); //顯示相關(guān)信息
59 3 prints(OSCurrentPcb->Msg->Sender->Title,1); //顯示發(fā)送者的標(biāo)題
ARM COMPILER V2.50a, Task 16/05/06 14:55:46 PAGE 2
60 3 prints("The sender's PID is: ",0);
61 3 print_uint32(OSCurrentPcb->Msg->Sender->PID); //顯示發(fā)送者的PID
62 3 prints("",1);
63 3 prints("The message type is:",0); //消息類型
64 3 print_uint32(OSCurrentPcb->Msg->MsgType);
65 3 prints("",1);
66 3 prints("The message value is",0); //消息的值
67 3 print_uint32(*(OSCurrentPcb->Msg->pMsg));
68 3 prints("",1);
69 3 prints("",1);
70 3
71 3 OSFreeDevice(PrinterDeviceAddr); //釋放打印機(jī)
72 3
73 3 switch(*(OSCurrentPcb->Msg->pMsg)) //鍵值散轉(zhuǎn)
74 3 {
75 4 case KEY1: ON_LED4();break; //如果是按鍵1按下,則點(diǎn)亮LED4
76 4 case KEY2: OFF_LED4();break; //如果是按鍵2按下,則熄滅LED4
77 4 default: break;
78 4 }
79 3 OSCurrentPcb->Msg=0; //消息處理完畢
80 3 }
81 2 }
82 1 }
83 //////////////////////////////////End of function//////////////////////////////////////////////
84
85
86 /**********************************************************************************************
87 任務(wù)2。延遲1S,等待一條消息。系統(tǒng)空閑任務(wù)會(huì)掃描按鍵,當(dāng)按鍵按下后,系統(tǒng)空閑任務(wù)會(huì)將
88 鍵值通過消息發(fā)送給任務(wù)1。任務(wù)1接到消息后,顯示消息的發(fā)送者以及消息的信息等。然后控制LED4的亮滅。
89 如果1S過后,還未收到消息,則顯示接收超時(shí)。
90 /*********************************************************************************************/
91 void Task2(void)
92 {
93 1 uint32 PrinterDeviceAddr; //保存打印機(jī)設(shè)備的地址
94 1
95 1 PrinterDeviceAddr=OSGetDeviceAddr(OS_PRINTER_DEVICE_ID); //獲取打印機(jī)設(shè)備地址
96 1 OSRequestDevice(PrinterDeviceAddr,0); //申請使用打印機(jī)
97 1
98 1 prints("",1);
99 1 prints(OSCurrentPcb->Title,0); //顯示任務(wù)啟動(dòng)
100 1 prints(" Start.",1);
101 1 OSFreeDevice(PrinterDeviceAddr); //釋放打印機(jī)
102 1
103 1 EN_LED5();
104 1 while(1)
105 1 {
106 2 OSTaskDelay(100); //延時(shí)等待消息的到來
107 2 if(OSCurrentPcb->Msg) //如果收到了消息
108 2 {
109 3 OSRequestDevice(PrinterDeviceAddr,0); //申請使用打印機(jī)
110 3 prints("",1);
111 3 prints("",1);
112 3 prints(OSCurrentPcb->Title,0); //顯示任務(wù)的標(biāo)題
113 3 prints(":",1);
114 3 prints("Haha,I have got a message from: ",0);
115 3 prints(OSCurrentPcb->Msg->Sender->Title,1); //顯示消息發(fā)送者的標(biāo)題
116 3 prints("The sender's PID is: ",0);
117 3 print_uint32(OSCurrentPcb->Msg->Sender->PID); //顯示消息發(fā)送者的PID
118 3 prints("",1);
119 3 prints("The message type is:",0);
120 3 print_uint32(OSCurrentPcb->Msg->MsgType); //顯示消息的類型
121 3 prints("",1);
122 3 prints("The message value is",0);
123 3 print_uint32(*(OSCurrentPcb->Msg->pMsg)); //顯示消息
124 3 prints("",1);
125 3 prints("",1);
ARM COMPILER V2.50a, Task 16/05/06 14:55:46 PAGE 3
126 3 OSFreeDevice(PrinterDeviceAddr); //釋放打印機(jī)
127 3 switch(*(OSCurrentPcb->Msg->pMsg)) //鍵值散轉(zhuǎn)
128 3 {
129 4 case KEY3: ON_LED5();break; //如果是按鍵3按下,則點(diǎn)亮LED5
130 4 case KEY4: OFF_LED5();break; //如果是按鍵4按下,則熄滅LED5
131 4 default: break;
132 4 }
133 3 OSCurrentPcb->Msg=0; //消息處理完畢
134 3 }
135 2 else //如果1秒后還未收到消息,則
136 2 {
137 3 OSRequestDevice(PrinterDeviceAddr,0); //申請使用打印機(jī)
138 3 prints("",1);
139 3 prints("",1);
140 3 prints(OSCurrentPcb->Title,0); //顯示任務(wù)的標(biāo)題
141 3 prints(":",1);
142 3 prints("I have not got a message in 1 second!",1); //顯示未收到消息
143 3 prints("Time out!",1); //超時(shí)
144 3 prints("",1);
145 3 OSFreeDevice(PrinterDeviceAddr); //釋放打印機(jī)
146 3 }
147 2 }
148 1 }
149 //////////////////////////////////End of function//////////////////////////////////////////////
150
151
152 /**********************************************************************************************
153 任務(wù)3。每隔500mS點(diǎn)亮、熄滅一次LED6,并顯示一些信息。
154 **********************************************************************************************/
155 void Task3(void)
156 {
157 1 uint32 PrinterDeviceAddr; //保存打印機(jī)設(shè)備的地址
158 1
159 1 PrinterDeviceAddr=OSGetDeviceAddr(OS_PRINTER_DEVICE_ID); //獲取打印機(jī)設(shè)備地址
160 1 OSRequestDevice(PrinterDeviceAddr,0); //申請使用打印機(jī)
161 1
162 1 prints("",1);
163 1 prints(OSCurrentPcb->Title,0); //顯示任務(wù)啟動(dòng)
164 1 prints(" Start.",1);
165 1 OSFreeDevice(PrinterDeviceAddr); //釋放打印機(jī)
166 1
167 1 EN_LED6();
168 1 while(1)
169 1 {
170 2 OSRequestDevice(PrinterDeviceAddr,0); //申請使用打印機(jī)
171 2 prints("HaHa,Task3! ",1); //顯示信息
172 2 OSFreeDevice(PrinterDeviceAddr); //釋放打印機(jī)
173 2 OSTaskDelay(50); //延時(shí)50個(gè)時(shí)鐘節(jié)拍
174 2 ON_LED6(); //開LED6
175 2 OSRequestDevice(PrinterDeviceAddr,0); //申請使用打印機(jī)
176 2 prints("HaHa,Task3! ",1); //顯示信息
177 2 OSFreeDevice(PrinterDeviceAddr); //釋放打印機(jī)
178 2 OSTaskDelay(50); //延時(shí)50個(gè)時(shí)鐘節(jié)拍
179 2 OFF_LED6(); //關(guān)LED6
180 2 }
181 1 }
182 //////////////////////////////////End of function//////////////////////////////////////////////
183
184
185 /**********************************************************************************************
186 任務(wù)4。每隔1000mS點(diǎn)亮、熄滅一次LED6,并顯示一些信息。
187 **********************************************************************************************/
188 void Task4(void)
189 {
190 1 uint32 PrinterDeviceAddr; //保存打印機(jī)設(shè)備的地址
191 1
ARM COMPILER V2.50a, Task 16/05/06 14:55:46 PAGE 4
192 1 PrinterDeviceAddr=OSGetDeviceAddr(OS_PRINTER_DEVICE_ID); //獲取打印機(jī)設(shè)備地址
193 1 OSRequestDevice(PrinterDeviceAddr,0); // //申請使用打印機(jī)
194 1
195 1 prints("",1);
196 1 prints(OSCurrentPcb->Title,0); //顯示任務(wù)啟動(dòng)
197 1 prints(" Start.",1);
198 1 OSFreeDevice(PrinterDeviceAddr); //釋放打印機(jī)
199 1 EN_LED7();
200 1 while(1)
201 1 {
202 2 OSRequestDevice(PrinterDeviceAddr,0); //申請使用打印機(jī)
203 2 prints("HaHa,Task4! ",1); //顯示信息
204 2 OSFreeDevice(PrinterDeviceAddr); //釋放打印機(jī)
205 2 OSTaskDelay(100); //延時(shí)100個(gè)時(shí)鐘節(jié)拍
206 2 ON_LED7(); //開LED7
207 2 OSRequestDevice(PrinterDeviceAddr,0); //申請使用打印機(jī)
208 2 prints("HaHa,Task4! ",1); //顯示信息
209 2 OSFreeDevice(PrinterDeviceAddr); //釋放打印機(jī)
210 2 OSTaskDelay(100); //延時(shí)100個(gè)時(shí)鐘節(jié)拍
211 2 OFF_LED7(); //關(guān)LED7
212 2 }
213 1 }
214 //////////////////////////////////End of function//////////////////////////////////////////////
215
216
217 /**********************************************************************************************
218 任務(wù)5。鍵盤掃描并發(fā)送消息。
219 **********************************************************************************************/
220 void Task5(void)
221 {
222 1 uint32 PrinterDeviceAddr; //保存打印機(jī)設(shè)備的地址
223 1 OSpcb * Task1Pcb,* Task2Pcb; //用來保存任務(wù)pcb
224 1 OSMsg Msg; //消息
225 1 uint32 MsgValue; //保存消息值
226 1
227 1 PrinterDeviceAddr=OSGetDeviceAddr(OS_PRINTER_DEVICE_ID); //獲取打印機(jī)設(shè)備地址
228 1 OSRequestDevice(PrinterDeviceAddr,0); //申請使用打印機(jī)
229 1
230 1 prints("",1);
231 1 prints(OSCurrentPcb->Title,0); //顯示任務(wù)啟動(dòng)
232 1 prints(" Start.",1);
233 1 OSFreeDevice(PrinterDeviceAddr); //釋放打印機(jī)
234 1
235 1 Task1Pcb=(OSpcb *)(uint32)OSTaskCreat((uint32)Task1,256,4,OS_THUMB_MODE,"Task1"); //創(chuàng)建任務(wù)1
236 1 Task2Pcb=(OSpcb *)(uint32)OSTaskCreat((uint32)Task2,256,5,OS_THUMB_MODE,"Task2"); //創(chuàng)建任務(wù)2
237 1
238 1 while(1)
239 1 {
240 2 OSTaskDelay(1); //延遲10ms
241 2 ScanKey(); //鍵盤掃描
242 2 if(Key.Value) //如果有鍵按下
243 2 {
244 3 MsgValue=Key.Value; //保存按鍵值
245 3
246 3 (&Msg)->MsgType=KEYBOARD_MSG; //設(shè)置要發(fā)送的消息類型
247 3 (&Msg)->pMsg=&MsgValue; //設(shè)置要發(fā)送的消息的值
248 3 (&Msg)->Length=1; //設(shè)置消息的長度
249 3
250 3 OSSendMsg(Task1Pcb,&Msg); //將消息發(fā)送給任務(wù)1
251 3 OSSendMsg(Task2Pcb,&Msg); //將消息發(fā)送給任務(wù)2
252 3 Key.Value=0; //清除鍵值,表示該次按鍵已經(jīng)處理
253 3 }
254 2 }
255 1 }
256 //////////////////////////////////End of function//////////////////////////////////////////////
ARM COMPILER V2.50a, Task 16/05/06 14:55:46 PAGE 5
ASSEMBLY LISTING OF GENERATED OBJECT CODE
*** EXTERNALS:
EXTERN DATA (OSCurrentPcb)
EXTERN CODE16 (OSTaskDelay?T)
EXTERN CODE16 (OSTaskSuspend?T)
EXTERN CODE16 (OSTaskCreat?T)
EXTERN CODE16 (OSSendMsg?T)
EXTERN CODE16 (OSGetDeviceAddr?T)
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -