📄 arm_00_ostaskmanager.lst
字号:
ARM COMPILER V2.50a, ARM_00_OSTaskManager 16/05/06 14:55:45 PAGE 1
ARM COMPILER V2.50a, COMPILATION OF MODULE ARM_00_OSTaskManager
OBJECT MODULE PLACED IN ARM_00_OSTaskManager.OBJ
COMPILER INVOKED BY: C:\Keil\ARM\BIN\CA.exe ARM_00_OSTaskManager.c THUMB WARNINGLEVEL(3) BROWSE DEBUG TABS(4)
stmt level source
1 /**********************************************************************************************
2 ARM_00_OSTaskManager.c file
3
4 作者:Computer-lov
5 建立日期:2006-5-13
6 修改日期:2006-5-15
7 版本:V1.0
8 版权所有,盗版必究。
9 任何技术问题可到我的博客上留言: http://computer00.21ic.org
10 Copyright(C) Computer-lov 2006-2016
11 All rights reserved
12 **********************************************************************************************/
13
14
15 #include <ADuC7026.H>
16 #include "my_type.h"
17
18 #include "ARM_00_OS_TaskSwitch.H"
19 #include "ARM_00_OS_Core.H"
20 #include "UART.H"
21 #include "KEYS.H"
22 #include "Task.h"
23 #include "ADC.H"
24
25 /**********************************************************************************************
26 功能:显示任务的PID号。
27 入口参数1:pcb。要显示的任务的进程控制块地址。
28 返回:无。
29 **********************************************************************************************/
30 void DisplayPID(OSpcb * pcb)
31 {
32 1 print_uint32(pcb->PID); //显示任务ID号(PID)
33 1 send_a_byte(' ');
34 1 }
35 //////////////////////////////////End of function//////////////////////////////////////////////
36
37
38 /**********************************************************************************************
39 功能:显示任务的CPU使用率。
40 入口参数1:pcb。要显示的任务的进程控制块地址。
41 返回:无。
42 **********************************************************************************************/
43 void DisplayCPU(OSpcb * pcb)
44 {
45 1 uint32 CpuUsedRatio;
46 1
47 1 CpuUsedRatio=((pcb->RunTimeInThisRefreshPeriod)*100+TotalTime/2)/TotalTime; //计算CPU使用率。加TotalTim
-e/2是为了四舍无入
48 1 pcb->TotalRunTime+=pcb->RunTimeInThisRefreshPeriod; //累加任务的CPU使用总时间
49 1 pcb->RunTimeInThisRefreshPeriod=0; //清本次统计的时间
50 1 if(CpuUsedRatio>=100) //如果统计的结果大于100
51 1 {
52 2 CpuUsedRatio=99; //结果为99
53 2 }
54 1 send_a_byte((CpuUsedRatio/10)+'0'); //显示结果
55 1 send_a_byte((CpuUsedRatio%10)+'0');
56 1 send_a_byte('%');
57 1 send_a_byte(' ');
58 1 send_a_byte(' ');
ARM COMPILER V2.50a, ARM_00_OSTaskManager 16/05/06 14:55:45 PAGE 2
59 1 }
60 //////////////////////////////////End of function//////////////////////////////////////////////
61
62
63 /**********************************************************************************************
64 功能:显示任务使用CPU的总时间。
65 入口参数1:pcb。要显示的任务的进程控制块地址。
66 返回:无。
67 **********************************************************************************************/
68 void DisplayCPUTime(OSpcb * pcb)
69 {
70 1 uint32 Time; //用来保存时间
71 1 uint8 H,M,S; //用来保存时,分,秒
72 1
73 1 Time=(uint32)((pcb->TotalRunTime)/((MaxOfTimer0+1)*100)); //计算总时间。结果为多少秒。
74 1 S=Time%60; //计算秒
75 1 Time/=60;
76 1 M=Time%(60); //计算分
77 1 Time/=60;
78 1 H=Time%(24); //计算时
79 1
80 1 send_a_byte((H/10)+'0'); //显示时
81 1 send_a_byte((H%10)+'0');
82 1 send_a_byte(':');
83 1 send_a_byte((M/10)+'0'); //显示分
84 1 send_a_byte((M%10)+'0');
85 1 send_a_byte(':');
86 1 send_a_byte((S/10)+'0'); //显示秒
87 1 send_a_byte((S%10)+'0');
88 1 send_a_byte(' ');
89 1 send_a_byte(' ');
90 1 }
91 //////////////////////////////////End of function//////////////////////////////////////////////
92
93
94 /**********************************************************************************************
95 功能:显示内存使用量
96 入口参数1:pcb。要显示的任务的进程控制块地址。
97 返回:无。
98 **********************************************************************************************/
99 void DispalyMemroyUsed(OSpcb * pcb)
100 {
101 1 print_uint32(pcb->StackLength); //显示内存使用量
102 1 send_a_byte('B'); //显示单位
103 1 send_a_byte(' ');
104 1 send_a_byte(' ');
105 1 }
106 //////////////////////////////////End of function//////////////////////////////////////////////
107
108
109 /**********************************************************************************************
110 功能:显示任务所处的状态。
111 入口参数1:pcb。要显示的任务的进程控制块地址。
112 返回:无。
113 **********************************************************************************************/
114 void DispalyStatus(OSpcb * pcb)
115 {
116 1 switch(pcb->Status) //根据状态来显示
117 1 {
118 2 case OSInReadyStatus: prints("Ready ",0);break; //就绪态
119 2 case OSInDelayStatus: prints("Delay ",0);break; //延时态
120 2 case OSInSuspendStatus: prints("Suspend",0);break; //挂起态
121 2 default:break;
122 2 }
123 1 }
124 //////////////////////////////////End of function//////////////////////////////////////////////
ARM COMPILER V2.50a, ARM_00_OSTaskManager 16/05/06 14:55:45 PAGE 3
125
126
127
128 #define REF_VOL 2.5
129
130 //////////////////////////////显示内核电压////////////////////////////////////
131 void DisplayCoreVoltage(void)
132 {
133 1 uint16 value;
134 1 uint32 result;
135 1 uint8 s_result[10];
136 1
137 1 prints("Core voltage: ",0);
138 1 value=2*read_ADC(0x13); //通道号为0x13的电压为1/2电源电压
139 1 result=REF_VOL*10000; //换算成电压,结果为多少mV的10倍
140 1 result=result*value/4095;
141 1 s_result[9]=0; //将结果转换成字符串
142 1 s_result[8]=' ';
143 1 s_result[7]='V';
144 1 s_result[6]='m';
145 1 s_result[5]='0'+result%10;
146 1 result/=10;
147 1 s_result[4]='.';
148 1 s_result[3]='0'+result%10;
149 1 result/=10;
150 1 s_result[2]='0'+result%10;
151 1 result/=10;
152 1 s_result[1]='0'+result%10;
153 1 result/=10;
154 1 s_result[0]='0'+result%10;
155 1 prints(" ",0);
156 1 prints(s_result,0); //显示电压
157 1 prints(" ",0);
158 1 }
159 //////////////////////////////////////////////////////////////////////////////
160
161 //////////////////////////////////显示内核温度////////////////////////////////
162 void DisplayCoreTemperature(void)
163 {
164 1 uint16 value;
165 1 sint32 result;
166 1 uint8 s_result[10];
167 1
168 1 prints("Core temperature: ",0);
169 1 value=read_ADC(0x10); //通道号为0x10的是温度传感器电压
170 1 result=REF_VOL*10000; //换算成电压,结果为多少mV的10倍
171 1 result=result*value/4095;
172 1 result=((7800-result)*10/13)+250; //温度是25℃时,输出电压为780mV,每升高1℃,输出电压降低1.3mV
173 1 //计算结果为多少度的10倍
174 1 if(result<0) //如果温度小于0度
175 1 {
176 2 s_result[0]='-'; //显示负号
177 2 result*=-1; //将结果换成正的
178 2 }
179 1 else
180 1 {
181 2 s_result[0]=' '; //不显示负号
182 2 }
183 1 s_result[6]=0; //将温度值转换成字符串,供显示用
184 1 s_result[5]='0'+result%10;
185 1 result/=10;
186 1 s_result[4]='.';
187 1 s_result[3]='0'+result%10;
188 1 result/=10;
189 1 s_result[2]='0'+result%10;
190 1 result/=10;
ARM COMPILER V2.50a, ARM_00_OSTaskManager 16/05/06 14:55:45 PAGE 4
191 1 s_result[1]='0'+result%10;
192 1 prints(s_result,0); //显示温度结果
193 1 prints("℃",1);
194 1 }
195 //////////////////////////////////////////////////////////////////////////////
196
197
198 /**********************************************************************************************
199 功能:任务管理器。
200 入口参数:无。
201 返回:无。
202 备注:优先级被设置为1,处于高的优先级。
203 **********************************************************************************************/
204 void OSTaskManager(void)
205 {
206 1 OSpcb * pcb; //
207 1 uint32 TempTime; //TempTime用来保存 在显示任务管理器信息所花费的时间
208 1 uint32 DelayCount=RefreshPeriod; //延时多少个时钟节拍刷新一次任务管理器
209 1 uint32 * p; //
210 1 uint32 i; //
211 1 uint32 CpuUsedRatio; //保存CPU使用率
212 1 uint32 nBytes; //保存申请内存的字节数
213 1
214 1 uint32 PrinterDeviceAddr; //打印机设备的入口地址
215 1
216 1 PrinterDeviceAddr=OSGetDeviceAddr(OS_PRINTER_DEVICE_ID); //获取打印机设备的入口地址
217 1 OSRequestDevice(PrinterDeviceAddr,0); //申请使用打印机
218 1
219 1 prints("",1); //显示任务启动
220 1 prints(OSCurrentPcb->Title,0);
221 1 prints(" Start.",1);
222 1
223 1 OSFreeDevice(PrinterDeviceAddr); //释放打印机
224 1
225 1 ADC_init(); //ADC初始化。用来检测内核电压以及温度
226 1
227 1 while(1)
228 1 {
229 2 OSTaskDelay(DelayCount); //延时DelayCount个时钟节拍
230 2
231 2 pcb=OSCurrentPcb; //当前运行的任务。即任务管理器本身
232 2 TempTime=pcb->RunTimeInThisRefreshPeriod; //保存这时的时间
233 2
234 2 OSRequestDevice(PrinterDeviceAddr,0); //申请使用打印机
235 2
236 2 prints("",1); //换行
237 2 prints("",1);
238 2 prints("TaskName PID CPU CPUTime MemoryUsed Status",1); //显示表头
239 2 prints("---------------------------------------------------------------",1);
240 2
241 2 nBytes=OSSizePerBlock*(((TaskAmount+1)*sizeof(p)+OSSizePerBlock-1)/OSSizePerBlock); //计算需要申请多
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -