📄 q.lst
字号:
C51 COMPILER V8.08 Q 05/09/2008 17:57:19 PAGE 1
C51 COMPILER V8.08, COMPILATION OF MODULE Q
OBJECT MODULE PLACED IN q.OBJ
COMPILER INVOKED BY: C:\Keil808\C51\BIN\C51.EXE q.c ROM(COMPACT) DEBUG OBJECTEXTEND
line level source
1 #include <AT89X52.H>
2
3 #include "os_core.h"
4 #include "main.h"
5 #include "task_switch.h"
6 #include "sem.h"
7 #include "q.h"
8 #include "uart.h"
9
10 uint8 OS_Task_Q_List;
11
12 //////////////////////////////////发送消息//////////////////////////////////////////////////
13
14 uint8 OSSendMsg(void * msg) reentrant
15 {
16 1 uint8 i,tempPrio=255;
17 1
18 1 for(i=0;i<TASK_NUM;i++) //查找优先级最高的任务
19 1 {
20 2 if(OS_Task_Q_List&OSMapTbl[i]&&OS_TCB[i].Prio<tempPrio)
21 2 {
22 3 tempPrio=OS_TCB[i].Prio;
23 3 }
24 2 }
25 1
26 1 for(i=0;i<TASK_NUM;i++)
27 1 {
28 2 if(OS_Task_Q_List&OSMapTbl[i]&&OS_TCB[i].Prio==tempPrio)
29 2 {
30 3 break;
31 3 }
32 2 }
33 1
34 1 if(i < TASK_NUM) //如果有任务需要
35 1 {
36 2 OS_TCB[i].msg=msg; //传入地址
37 2 OS_Task_Q_List&= ~OSMapTbl[i];
38 2 OSSendSignal(i);
39 2 return Q_OK; //成功,返回
40 2 }
41 1 else
42 1 {
43 2 return NOT_OK; //没有任务需要,返回
44 2 }
45 1
46 1 }
47 //////////////////////////////////发送消息//////////////////////////////////////////////////
48 uint8 OSTaskSendMsg(void * msg,uint8 i) reentrant
49 {
50 1
51 1 if(i < TASK_NUM) //如果有任务需要
52 1 {
53 2 if((OS_Task_Q_List&OSMapTbl[i])) //判断该任务是否为等待任务
54 2 {
55 3 OS_TCB[i].msg=msg; //传入地址
C51 COMPILER V8.08 Q 05/09/2008 17:57:19 PAGE 2
56 3 OS_Task_Q_List&= ~OSMapTbl[i];
57 3 OSSendSignal(i);
58 3 return Q_OK; //成功,返回
59 3 }
60 2 }
61 1 return NOT_OK; //没有任务需要,返回
62 1 }
63
64 //////////////////////////////// 等待消息 /////////////////////////////////////////////////
65 void * OSTaskWaitMsg(uint8 * err,uint8 Timeout) reentrant
66 {
67 1 void *msg;
68 1 if(OS_TCB[OS_Current_ID].msg==0x0000) //指针为空,无消息
69 1 {
70 2
71 2 OS_Task_Q_List|=OSMapTbl[OS_Current_ID]; //加入消息的任务等待表
72 2 bb:
73 2
74 2 if(OSWait(K_TMO,Timeout)==TMO_EVENT) //超时唤醒
75 2 {
76 3 OS_ENTER_CRITICAL();
77 3 OS_Task_Q_List&= ~OSMapTbl[OS_Current_ID]; //从等待表中去除
78 3 OS_EXIT_CRITICAL();
79 3 *err=Q_TMO; //超时
80 3 }
81 2
82 2 if(OS_Task_Q_List&OSMapTbl[OS_Current_ID])
83 2 goto bb;
84 2 }
85 1 msg=OS_TCB[OS_Current_ID].msg;
86 1 OS_TCB[OS_Current_ID].msg=0;
87 1 *err=Q_OK;
88 1 return msg ;
89 1 //有消息
90 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 486 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 1 ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -