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

📄 task.lst

📁 uCOS在LPC213X上的移植。适合ARM嵌入式系统初学者。
💻 LST
📖 第 1 页 / 共 4 页
字号:
ARM COMPILER V2.50a,  Task                                                                 25/08/06  23:22:56  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 DEBUG TABS(4) 

stmt  level    source

    1          /**********************************************************************************************
    2          本程序只供学习使用,不得用于其它任何用途,否则后果自负。
    3          
    4            Task.c file
    5          
    6            作者:Computer-lov
    7            建立日期:2006-5-8
    8            修改日期:2006-5-15
    9            最后修改时间:2006-08-25
   10            版本:V1.0
   11            版权所有,盗版必究。
   12            任何技术问题可到我的博客上留言:    http://computer00.21ic.org
   13            Copyright(C) Computer-lov 2006-2016
   14            All rights reserved
   15          **********************************************************************************************/
   16          
   17          
   18          #include "CPU.H"
   19          
   20          #include "interrupt.h"
   21          #include "LED.H"
   22          #include "ARM_00_OS_TaskSwitch.H"
   23          #include "my_type.h"
   24          #include "ARM_00_OS_Core.H"
   25          #include "UART.H"
   26          #include "KEYS.H"
   27          #include "Task.h"
   28          
   29          /**********************************************************************************************
   30          任务1。处于挂起状态,等待一条消息。系统空闲任务会扫描按键,当按键按下后,系统空闲任务会将
   31          键值通过消息发送给任务1。任务1接到消息后,显示消息的发送者以及消息的信息等。然后控制LED4的亮灭。
   32          **********************************************************************************************/
   33          void Task1(void)
   34          {
   35   1       uint32 PrinterDeviceAddr;   //保存打印机设备的地址
   36   1       
   37   1       PrinterDeviceAddr=OSGetDeviceAddr(OS_PRINTER_DEVICE_ID);   //获取打印机设备地址
   38   1       OSRequestDevice(PrinterDeviceAddr,0);    //申请使用打印机
   39   1       
   40   1       prints("",1);
   41   1       prints(OSCurrentPcb->Title,0);   //显示任务启动
   42   1       prints(" Start..........................",1);
   43   1      
   44   1       OSFreeDevice(PrinterDeviceAddr);   //释放打印机
   45   1      
   46   1       EN_LED1();  //使能LED1
   47   1       
   48   1       while(1)
   49   1        {
   50   2         OSTaskSuspend(OSCurrentPcb);  //任务挂起
   51   2         if(OSCurrentPcb->Msg)        //如果收到消息
   52   2          {
   53   3           OSRequestDevice(PrinterDeviceAddr,0);  //申请打印机
   54   3           
   55   3           prints("",1);
   56   3           prints("",1);
   57   3           prints(OSCurrentPcb->Title,0);  //显示任务标题
   58   3           prints(":",1);
   59   3           prints("Haha,I have got a message from: ",0);  //显示相关信息
ARM COMPILER V2.50a,  Task                                                                 25/08/06  23:22:56  PAGE 2   

   60   3           prints(OSCurrentPcb->Msg->Sender->Title,1);    //显示发送者的标题
   61   3           prints("The sender's PID is: ",0);
   62   3           print_uint32(OSCurrentPcb->Msg->Sender->PID);  //显示发送者的PID
   63   3           prints("",1);
   64   3           prints("The message type is:",0);             //消息类型
   65   3           print_uint32(OSCurrentPcb->Msg->MsgType);
   66   3           prints("",1);
   67   3           prints("The message value is",0);             //消息的值
   68   3           print_uint32(*(OSCurrentPcb->Msg->pMsg));
   69   3           prints("",1);
   70   3           prints("",1);
   71   3           
   72   3           OSFreeDevice(PrinterDeviceAddr);  //释放打印机
   73   3           
   74   3           switch(*(OSCurrentPcb->Msg->pMsg))    //键值散转
   75   3            {
   76   4             case KEY1: ON_LED1();break;    //如果是按键1按下,则点亮LED1
   77   4             case KEY2: OFF_LED1();break;   //如果是按键2按下,则熄灭LED1
   78   4             default: break;
   79   4            }
   80   3           OSCurrentPcb->Msg=0;           //消息处理完毕
   81   3          }
   82   2        }
   83   1      }
   84          //////////////////////////////////End of function//////////////////////////////////////////////
   85          
   86          
   87          /**********************************************************************************************
   88          任务2。延迟1S,等待一条消息。系统空闲任务会扫描按键,当按键按下后,系统空闲任务会将
   89          键值通过消息发送给任务1。任务1接到消息后,显示消息的发送者以及消息的信息等。然后控制LED4的亮灭。
   90          如果1S过后,还未收到消息,则显示接收超时。
   91          /*********************************************************************************************/
   92          void Task2(void)
   93          {
   94   1       uint32 PrinterDeviceAddr;    //保存打印机设备的地址
   95   1       
   96   1       PrinterDeviceAddr=OSGetDeviceAddr(OS_PRINTER_DEVICE_ID);     //获取打印机设备地址
   97   1       OSRequestDevice(PrinterDeviceAddr,0);                   //申请使用打印机
   98   1       
   99   1       prints("",1);
  100   1       prints(OSCurrentPcb->Title,0);  //显示任务启动
  101   1       prints(" Start..........................",1);
  102   1       OSFreeDevice(PrinterDeviceAddr);   //释放打印机
  103   1       
  104   1       EN_LED2();
  105   1       while(1)
  106   1        {
  107   2         OSTaskDelay(100);       //延时等待消息的到来
  108   2         if(OSCurrentPcb->Msg)   //如果收到了消息
  109   2          {
  110   3           OSRequestDevice(PrinterDeviceAddr,0);   //申请使用打印机
  111   3           prints("",1);
  112   3           prints("",1);
  113   3           prints(OSCurrentPcb->Title,0);   //显示任务的标题
  114   3           prints(":",1);
  115   3           prints("Haha,I have got a message from: ",0);
  116   3           prints(OSCurrentPcb->Msg->Sender->Title,1);     //显示消息发送者的标题
  117   3           prints("The sender's PID is: ",0);
  118   3           print_uint32(OSCurrentPcb->Msg->Sender->PID);  //显示消息发送者的PID
  119   3           prints("",1);
  120   3           prints("The message type is:",0);
  121   3           print_uint32(OSCurrentPcb->Msg->MsgType);    //显示消息的类型
  122   3           prints("",1);
  123   3           prints("The message value is",0);
  124   3           print_uint32(*(OSCurrentPcb->Msg->pMsg));   //显示消息
  125   3           prints("",1);
ARM COMPILER V2.50a,  Task                                                                 25/08/06  23:22:56  PAGE 3   

  126   3           prints("",1);
  127   3           OSFreeDevice(PrinterDeviceAddr);    //释放打印机
  128   3           switch(*(OSCurrentPcb->Msg->pMsg))     //键值散转
  129   3            {
  130   4             case KEY3: ON_LED2();break;    //如果是按键3按下,则点亮LED2
  131   4             case KEY4: OFF_LED2();break;   //如果是按键4按下,则熄灭LED2
  132   4             default: break;
  133   4            }
  134   3           OSCurrentPcb->Msg=0;     //消息处理完毕
  135   3          }
  136   2         else     //如果1秒后还未收到消息,则
  137   2          {
  138   3           OSRequestDevice(PrinterDeviceAddr,0);    //申请使用打印机
  139   3           prints("",1);
  140   3           prints("",1);
  141   3           prints(OSCurrentPcb->Title,0);   //显示任务的标题
  142   3           prints(":",1);
  143   3           prints("I have not got a message in 1 second!",1);  //显示未收到消息
  144   3           prints("Time out!",1);  //超时
  145   3           prints("",1);
  146   3           OSFreeDevice(PrinterDeviceAddr);   //释放打印机
  147   3          }
  148   2        }
  149   1      }
  150          //////////////////////////////////End of function//////////////////////////////////////////////
  151          
  152          
  153          /**********************************************************************************************
  154          任务3。每隔500mS点亮、熄灭一次LED6,并显示一些信息。
  155          **********************************************************************************************/
  156          void Task3(void)
  157          {
  158   1       uint32 PrinterDeviceAddr;      //保存打印机设备的地址
  159   1       
  160   1       PrinterDeviceAddr=OSGetDeviceAddr(OS_PRINTER_DEVICE_ID);      //获取打印机设备地址
  161   1       OSRequestDevice(PrinterDeviceAddr,0);    //申请使用打印机
  162   1       
  163   1       prints("",1);
  164   1       prints(OSCurrentPcb->Title,0);  //显示任务启动
  165   1       prints(" Start..........................",1);
  166   1       OSFreeDevice(PrinterDeviceAddr);  //释放打印机
  167   1       
  168   1       EN_LED3();
  169   1       while(1)
  170   1        {
  171   2         OSRequestDevice(PrinterDeviceAddr,0);    //申请使用打印机
  172   2         prints("HaHa,Running in Task3! ",1);  //显示信息
  173   2         OSFreeDevice(PrinterDeviceAddr);       //释放打印机
  174   2         OSTaskDelay(50);           //延时50个时钟节拍
  175   2         ON_LED3();                 //开LED3
  176   2         OSRequestDevice(PrinterDeviceAddr,0);    //申请使用打印机
  177   2         prints("HaHa,Running in Task3! ",1);  //显示信息
  178   2         OSFreeDevice(PrinterDeviceAddr);       //释放打印机
  179   2         OSTaskDelay(50);           //延时50个时钟节拍
  180   2         OFF_LED3();                //关LED3
  181   2        }
  182   1      }
  183          //////////////////////////////////End of function//////////////////////////////////////////////
  184          
  185          
  186          /**********************************************************************************************
  187          任务4。每隔1000mS点亮、熄灭一次LED6,并显示一些信息。
  188          **********************************************************************************************/
  189          void Task4(void)
  190          {
  191   1       uint32 PrinterDeviceAddr;        //保存打印机设备的地址
ARM COMPILER V2.50a,  Task                                                                 25/08/06  23:22:56  PAGE 4   

  192   1       
  193   1       PrinterDeviceAddr=OSGetDeviceAddr(OS_PRINTER_DEVICE_ID);      //获取打印机设备地址
  194   1       OSRequestDevice(PrinterDeviceAddr,0);     // //申请使用打印机
  195   1       
  196   1       prints("",1);
  197   1       prints(OSCurrentPcb->Title,0);   //显示任务启动
  198   1       prints(" Start..........................",1);
  199   1       OSFreeDevice(PrinterDeviceAddr);   //释放打印机
  200   1       EN_LED4();
  201   1       while(1)
  202   1        {
  203   2         OSRequestDevice(PrinterDeviceAddr,0);    //申请使用打印机
  204   2         prints("HaHa,Running in Task4! ",1);      //显示信息
  205   2         OSFreeDevice(PrinterDeviceAddr);           //释放打印机
  206   2         OSTaskDelay(100);              //延时100个时钟节拍
  207   2         ON_LED4();                     //开LED4
  208   2         OSRequestDevice(PrinterDeviceAddr,0);     //申请使用打印机
  209   2         prints("HaHa,Running in Task4! ",1);      //显示信息
  210   2         OSFreeDevice(PrinterDeviceAddr);     //释放打印机
  211   2         OSTaskDelay(100);              //延时100个时钟节拍
  212   2         OFF_LED4();                    //关LED4
  213   2        }
  214   1      }
  215          //////////////////////////////////End of function//////////////////////////////////////////////
  216          
  217          
  218          /**********************************************************************************************
  219          任务5。键盘扫描并发送消息。
  220          **********************************************************************************************/
  221          void Task5(void)
  222          {
  223   1       uint32 PrinterDeviceAddr;   //保存打印机设备的地址
  224   1       OSpcb * Task1Pcb,* Task2Pcb;   //用来保存任务pcb
  225   1       OSMsg Msg;                     //消息
  226   1       uint32  MsgValue;              //保存消息值
  227   1       
  228   1       PrinterDeviceAddr=OSGetDeviceAddr(OS_PRINTER_DEVICE_ID);   //获取打印机设备地址
  229   1       OSRequestDevice(PrinterDeviceAddr,0);    //申请使用打印机
  230   1       
  231   1       prints("",1);
  232   1       prints(OSCurrentPcb->Title,0);   //显示任务启动
  233   1       prints(" Start..........................",1);
  234   1       OSFreeDevice(PrinterDeviceAddr);   //释放打印机
  235   1       
  236   1       Task1Pcb=(OSpcb *)(uint32)OSTaskCreat((uint32)Task1,256,4,OS_THUMB_MODE,"Task1");  //创建任务1
  237   1       Task2Pcb=(OSpcb *)(uint32)OSTaskCreat((uint32)Task2,256,5,OS_THUMB_MODE,"Task2");  //创建任务2
  238   1       
  239   1       while(1)
  240   1        {
  241   2         OSTaskDelay(1);   //延迟10ms
  242   2         ScanKey();       //键盘扫描
  243   2         if(Key.Value)   //如果有键按下
  244   2          {
  245   3           MsgValue=Key.Value;      //保存按键值
  246   3           
  247   3           (&Msg)->MsgType=KEYBOARD_MSG; //设置要发送的消息类型
  248   3           (&Msg)->pMsg=&MsgValue;       //设置要发送的消息的值
  249   3           (&Msg)->Length=1;             //设置消息的长度
  250   3      
  251   3           OSSendMsg(Task1Pcb,&Msg);     //将消息发送给任务1
  252   3           OSSendMsg(Task2Pcb,&Msg);     //将消息发送给任务2
  253   3           Key.Value=0;                  //清除键值,表示该次按键已经处理
  254   3          }
  255   2        }
  256   1      }
  257          //////////////////////////////////End of function//////////////////////////////////////////////
ARM COMPILER V2.50a,  Task                                                                 25/08/06  23:22:56  PAGE 5   

ASSEMBLY LISTING OF GENERATED OBJECT CODE



*** EXTERNALS:
 EXTERN DATA (OSCurrentPcb)
 EXTERN CODE16 (OSTaskDelay?T)

⌨️ 快捷键说明

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