⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 arm_00_ostaskmanager.lst

📁 uCOS在LPC213X上的移植。适合ARM嵌入式系统初学者。
💻 LST
字号:
ARM COMPILER V2.50a,  ARM_00_OSTaskManager                                                 25/08/06  23:22:56  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 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            最后修改时间:2006-08-25
    8            版本:V1.0
    9            版权所有,盗版必究。
   10            任何技术问题可到我的博客上留言:    http://computer00.21ic.org
   11            Copyright(C) Computer-lov 2006-2016
   12            All rights reserved
   13          **********************************************************************************************/
   14          
   15          
   16          #include "CPU.H"
   17          
   18          #include "my_type.h"
   19          
   20          #include "ARM_00_OS_TaskSwitch.H"
   21          #include "ARM_00_OS_Core.H"
   22          #include "UART.H"
   23          #include "KEYS.H"
   24          #include "Task.h"
   25          #include "ADC.H"
   26          
   27          /**********************************************************************************************
   28          功能:显示任务的PID号。
   29          入口参数1:pcb。要显示的任务的进程控制块地址。
   30          返回:无。
   31          **********************************************************************************************/
   32          void DisplayPID(OSpcb * pcb)
   33          {
   34   1       print_uint32((pcb->PID)-0x40000000);  //显示任务ID号(PID)。
   35   1                                             //由于LPC213X系列的RAM起始地址在0x40000000,减掉显示时会比较短
   36   1                                             //当然,不减也无所谓。
   37   1       send_a_byte(' ');
   38   1      }
   39          //////////////////////////////////End of function//////////////////////////////////////////////
   40          
   41          
   42          /**********************************************************************************************
   43          功能:显示任务的CPU使用率。
   44          入口参数1:pcb。要显示的任务的进程控制块地址。
   45          返回:无。
   46          **********************************************************************************************/
   47          void DisplayCPU(OSpcb * pcb)
   48          {
   49   1       uint32 CpuUsedRatio;
   50   1      
   51   1       CpuUsedRatio=((pcb->RunTimeInThisRefreshPeriod)*100+TotalTime/2)/TotalTime;  //计算CPU使用率。加TotalTim
             -e/2是为了四舍无入
   52   1       pcb->TotalRunTime+=pcb->RunTimeInThisRefreshPeriod;  //累加任务的CPU使用总时间
   53   1       pcb->RunTimeInThisRefreshPeriod=0;   //清本次统计的时间
   54   1       if(CpuUsedRatio>=100)  //如果统计的结果大于100
   55   1        {
   56   2         CpuUsedRatio=99;  //结果为99
   57   2        }
   58   1       send_a_byte((CpuUsedRatio/10)+'0');  //显示结果
ARM COMPILER V2.50a,  ARM_00_OSTaskManager                                                 25/08/06  23:22:56  PAGE 2   

   59   1       send_a_byte((CpuUsedRatio%10)+'0');
   60   1       send_a_byte('%');
   61   1       send_a_byte(' ');
   62   1       send_a_byte(' ');
   63   1      }
   64          //////////////////////////////////End of function//////////////////////////////////////////////
   65          
   66          
   67          /**********************************************************************************************
   68          功能:显示任务使用CPU的总时间。
   69          入口参数1:pcb。要显示的任务的进程控制块地址。
   70          返回:无。
   71          **********************************************************************************************/
   72          void DisplayCPUTime(OSpcb * pcb)
   73          {
   74   1       uint32 Time;   //用来保存时间
   75   1       uint8 H,M,S;   //用来保存时,分,秒
   76   1       
   77   1       Time=(uint32)((pcb->TotalRunTime)/((MaxOfTimer0+1)*100));  //计算总时间。结果为多少秒。
   78   1       S=Time%60;   //计算秒
   79   1       Time/=60;
   80   1       M=Time%(60);  //计算分
   81   1       Time/=60;
   82   1       H=Time%(24);  //计算时
   83   1       
   84   1       send_a_byte((H/10)+'0'); //显示时
   85   1       send_a_byte((H%10)+'0');
   86   1       send_a_byte(':');
   87   1       send_a_byte((M/10)+'0'); //显示分
   88   1       send_a_byte((M%10)+'0');
   89   1       send_a_byte(':');
   90   1       send_a_byte((S/10)+'0'); //显示秒
   91   1       send_a_byte((S%10)+'0');
   92   1       send_a_byte(' ');
   93   1       send_a_byte(' ');
   94   1      }
   95          //////////////////////////////////End of function//////////////////////////////////////////////
   96          
   97          
   98          /**********************************************************************************************
   99          功能:显示内存使用量
  100          入口参数1:pcb。要显示的任务的进程控制块地址。
  101          返回:无。
  102          **********************************************************************************************/
  103          void DispalyMemroyUsed(OSpcb * pcb)
  104          {
  105   1       print_uint32(pcb->StackLength);   //显示内存使用量
  106   1       send_a_byte('B');               //显示单位
  107   1       send_a_byte(' ');
  108   1       send_a_byte(' ');
  109   1      }
  110          //////////////////////////////////End of function//////////////////////////////////////////////
  111          
  112          
  113          /**********************************************************************************************
  114          功能:显示任务所处的状态。
  115          入口参数1:pcb。要显示的任务的进程控制块地址。
  116          返回:无。
  117          **********************************************************************************************/
  118          void DispalyStatus(OSpcb * pcb)
  119          {
  120   1       switch(pcb->Status)    //根据状态来显示
  121   1        {
  122   2         case OSInReadyStatus:      prints("Ready  ",0);break;  //就绪态
  123   2         case OSInDelayStatus:      prints("Delay  ",0);break;  //延时态
  124   2         case OSInSuspendStatus:    prints("Suspend",0);break;  //挂起态
ARM COMPILER V2.50a,  ARM_00_OSTaskManager                                                 25/08/06  23:22:56  PAGE 3   

  125   2         default:break;
  126   2        }
  127   1      }
  128          //////////////////////////////////End of function//////////////////////////////////////////////
  129          
  130          
  131          
  132          #define REF_VOL  2.475  /*LPC213X 开发板上参考电压为1K电阻跟3K电阻分压3.3V所得,为2.475V*/
  133          
  134          //////////////////////////////显示内核电压////////////////////////////////////
  135          void DisplayCoreVoltage(void)
  136          {
  137   1       uint16 value;
  138   1       uint32 result;
  139   1       uint8 s_result[10];
  140   1      
  141   1       prints("ADC3 voltage: ",0);
  142   1       value=read_ADC(3);           //通道ADC3的电压
  143   1       result=REF_VOL*10000;        //换算成电压,结果为多少mV的10倍
  144   1       result=result*value/1023;
  145   1       s_result[9]=0;               //将结果转换成字符串
  146   1       s_result[8]=' ';
  147   1       s_result[7]='V';
  148   1       s_result[6]='m';
  149   1       s_result[5]='0'+result%10;
  150   1       result/=10;
  151   1       s_result[4]='.';
  152   1       s_result[3]='0'+result%10;
  153   1       result/=10;
  154   1       s_result[2]='0'+result%10;
  155   1       result/=10;
  156   1       s_result[1]='0'+result%10;
  157   1       result/=10;
  158   1       s_result[0]='0'+result%10;
  159   1       prints("    ",0);
  160   1       prints(s_result,1);         //显示电压
  161   1      }
  162          //////////////////////////////////////////////////////////////////////////////
  163          
  164          //////////////////////////////////显示内核温度////////////////////////////////
  165          void DisplayCoreTemperature(void)
  166          {
  167   1       prints("Core temperature: ",0);
  168   1       prints("Sorry! LPC213x MCU have no Temperature Sensor!",1);
  169   1       prints("",1);
  170   1      }
  171          //////////////////////////////////////////////////////////////////////////////
  172          
  173          
  174          /**********************************************************************************************
  175          功能:任务管理器。
  176          入口参数:无。
  177          返回:无。
  178          备注:优先级被设置为1,处于高的优先级。
  179          **********************************************************************************************/
  180          void OSTaskManager(void)
  181          {
  182   1       OSpcb * pcb;    //
  183   1       uint32 TempTime;    //TempTime用来保存 在显示任务管理器信息所花费的时间
  184   1       uint32 DelayCount=RefreshPeriod;   //延时多少个时钟节拍刷新一次任务管理器
  185   1       uint32 * p;     //
  186   1       uint32 i;       //
  187   1       uint32 CpuUsedRatio;   //保存CPU使用率
  188   1       uint32 nBytes;         //保存申请内存的字节数
  189   1       
  190   1       uint32 PrinterDeviceAddr;   //打印机设备的入口地址
ARM COMPILER V2.50a,  ARM_00_OSTaskManager                                                 25/08/06  23:22:56  PAGE 4   

  191   1       
  192   1       PrinterDeviceAddr=OSGetDeviceAddr(OS_PRINTER_DEVICE_ID);  //获取打印机设备的入口地址
  193   1       OSRequestDevice(PrinterDeviceAddr,0);   //申请使用打印机
  194   1       
  195   1       prints("",1);                   //显示任务启动
  196   1       prints(OSCurrentPcb->Title,0);
  197   1       prints(" Start..........................",1);
  198   1       
  199   1       OSFreeDevice(PrinterDeviceAddr);   //释放打印机
  200   1       
  201   1       ADC_init();   //ADC初始化。用来检测内核电压以及温度
  202   1      
  203   1       while(1)
  204   1        {
  205   2         OSTaskDelay(DelayCount);    //延时DelayCount个时钟节拍
  206   2         
  207   2         pcb=OSCurrentPcb;       //当前运行的任务。即任务管理器本身
  208   2         TempTime=pcb->RunTimeInThisRefreshPeriod;   //保存这时的时间
  209   2         
  210   2         OSRequestDevice(PrinterDeviceAddr,0);   //申请使用打印机
  211   2         
  212   2         prints("",1);       //换行
  213   2         prints("",1);
  214   2         prints("TaskName              PID  CPU   CPUTime    MemoryUsed   Status",1);   //显示表头
  215   2         prints("------------  -----------  ---  ---------   ----------   ------",1);
  216   2         
  217   2         nBytes=OSSizePerBlock*(((TaskAmount+1)*sizeof(p)+OSSizePerBlock-1)/OSSizePerBlock);  //计算需要申请多

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -