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

📄 task.lst

📁 看看ARM菜鸟在ARM7上写的操作系统——ARM圈圈操作系统 最近在ADuC7027上写了一个ARM_00_OS
💻 LST
📖 第 1 页 / 共 4 页
字号:
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          本程序只供学习使用,不得用于其它任何用途,否则后果自负。
    3          
    4            Task.c file
    5          
    6            作者:Computer-lov
    7            建立日期:2006-5-8
    8            修改日期:2006-5-15
    9            版本:V1.0
   10            版权所有,盗版必究。
   11            任何技术问题可到我的博客上留言:    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          任务1。处于挂起状态,等待一条消息。系统空闲任务会扫描按键,当按键按下后,系统空闲任务会将
   30          键值通过消息发送给任务1。任务1接到消息后,显示消息的发送者以及消息的信息等。然后控制LED4的亮灭。
   31          **********************************************************************************************/
   32          void Task1(void)
   33          {
   34   1       uint32 PrinterDeviceAddr;   //保存打印机设备的地址
   35   1       
   36   1       PrinterDeviceAddr=OSGetDeviceAddr(OS_PRINTER_DEVICE_ID);   //获取打印机设备地址
   37   1       OSRequestDevice(PrinterDeviceAddr,0);    //申请使用打印机
   38   1       
   39   1       prints("",1);
   40   1       prints(OSCurrentPcb->Title,0);   //显示任务启动
   41   1       prints(" Start.",1);
   42   1      
   43   1       OSFreeDevice(PrinterDeviceAddr);   //释放打印机
   44   1      
   45   1       EN_LED4();  //使能LED4
   46   1       
   47   1       while(1)
   48   1        {
   49   2         OSTaskSuspend(OSCurrentPcb);  //任务挂起
   50   2         if(OSCurrentPcb->Msg)        //如果收到消息
   51   2          {
   52   3           OSRequestDevice(PrinterDeviceAddr,0);  //申请打印机
   53   3           
   54   3           prints("",1);
   55   3           prints("",1);
   56   3           prints(OSCurrentPcb->Title,0);  //显示任务标题
   57   3           prints(":",1);
   58   3           prints("Haha,I have got a message from: ",0);  //显示相关信息
   59   3           prints(OSCurrentPcb->Msg->Sender->Title,1);    //显示发送者的标题
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);  //显示发送者的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);  //释放打印机
   72   3           
   73   3           switch(*(OSCurrentPcb->Msg->pMsg))    //键值散转
   74   3            {
   75   4             case KEY1: ON_LED4();break;    //如果是按键1按下,则点亮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          任务2。延迟1S,等待一条消息。系统空闲任务会扫描按键,当按键按下后,系统空闲任务会将
   88          键值通过消息发送给任务1。任务1接到消息后,显示消息的发送者以及消息的信息等。然后控制LED4的亮灭。
   89          如果1S过后,还未收到消息,则显示接收超时。
   90          /*********************************************************************************************/
   91          void Task2(void)
   92          {
   93   1       uint32 PrinterDeviceAddr;    //保存打印机设备的地址
   94   1       
   95   1       PrinterDeviceAddr=OSGetDeviceAddr(OS_PRINTER_DEVICE_ID);     //获取打印机设备地址
   96   1       OSRequestDevice(PrinterDeviceAddr,0);                   //申请使用打印机
   97   1       
   98   1       prints("",1);
   99   1       prints(OSCurrentPcb->Title,0);  //显示任务启动
  100   1       prints(" Start.",1);
  101   1       OSFreeDevice(PrinterDeviceAddr);   //释放打印机
  102   1       
  103   1       EN_LED5();
  104   1       while(1)
  105   1        {
  106   2         OSTaskDelay(100);       //延时等待消息的到来
  107   2         if(OSCurrentPcb->Msg)   //如果收到了消息
  108   2          {
  109   3           OSRequestDevice(PrinterDeviceAddr,0);   //申请使用打印机
  110   3           prints("",1);
  111   3           prints("",1);
  112   3           prints(OSCurrentPcb->Title,0);   //显示任务的标题
  113   3           prints(":",1);
  114   3           prints("Haha,I have got a message from: ",0);
  115   3           prints(OSCurrentPcb->Msg->Sender->Title,1);     //显示消息发送者的标题
  116   3           prints("The sender's PID is: ",0);
  117   3           print_uint32(OSCurrentPcb->Msg->Sender->PID);  //显示消息发送者的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);    //释放打印机
  127   3           switch(*(OSCurrentPcb->Msg->pMsg))     //键值散转
  128   3            {
  129   4             case KEY3: ON_LED5();break;    //如果是按键3按下,则点亮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);    //申请使用打印机
  138   3           prints("",1);
  139   3           prints("",1);
  140   3           prints(OSCurrentPcb->Title,0);   //显示任务的标题
  141   3           prints(":",1);
  142   3           prints("I have not got a message in 1 second!",1);  //显示未收到消息
  143   3           prints("Time out!",1);  //超时
  144   3           prints("",1);
  145   3           OSFreeDevice(PrinterDeviceAddr);   //释放打印机
  146   3          }
  147   2        }
  148   1      }
  149          //////////////////////////////////End of function//////////////////////////////////////////////
  150          
  151          
  152          /**********************************************************************************************
  153          任务3。每隔500mS点亮、熄灭一次LED6,并显示一些信息。
  154          **********************************************************************************************/
  155          void Task3(void)
  156          {
  157   1       uint32 PrinterDeviceAddr;      //保存打印机设备的地址
  158   1       
  159   1       PrinterDeviceAddr=OSGetDeviceAddr(OS_PRINTER_DEVICE_ID);      //获取打印机设备地址
  160   1       OSRequestDevice(PrinterDeviceAddr,0);    //申请使用打印机
  161   1       
  162   1       prints("",1);
  163   1       prints(OSCurrentPcb->Title,0);  //显示任务启动
  164   1       prints(" Start.",1);
  165   1       OSFreeDevice(PrinterDeviceAddr);  //释放打印机
  166   1       
  167   1       EN_LED6();
  168   1       while(1)
  169   1        {
  170   2         OSRequestDevice(PrinterDeviceAddr,0);    //申请使用打印机
  171   2         prints("HaHa,Task3! ",1);  //显示信息
  172   2         OSFreeDevice(PrinterDeviceAddr);       //释放打印机
  173   2         OSTaskDelay(50);           //延时50个时钟节拍
  174   2         ON_LED6();                 //开LED6
  175   2         OSRequestDevice(PrinterDeviceAddr,0);    //申请使用打印机
  176   2         prints("HaHa,Task3! ",1);  //显示信息
  177   2         OSFreeDevice(PrinterDeviceAddr);       //释放打印机
  178   2         OSTaskDelay(50);           //延时50个时钟节拍
  179   2         OFF_LED6();                //关LED6
  180   2        }
  181   1      }
  182          //////////////////////////////////End of function//////////////////////////////////////////////
  183          
  184          
  185          /**********************************************************************************************
  186          任务4。每隔1000mS点亮、熄灭一次LED6,并显示一些信息。
  187          **********************************************************************************************/
  188          void Task4(void)
  189          {
  190   1       uint32 PrinterDeviceAddr;        //保存打印机设备的地址
  191   1       
ARM COMPILER V2.50a,  Task                                                                 16/05/06  14:55:46  PAGE 4   

  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       OSFreeDevice(PrinterDeviceAddr);   //释放打印机
  199   1       EN_LED7();
  200   1       while(1)
  201   1        {
  202   2         OSRequestDevice(PrinterDeviceAddr,0);    //申请使用打印机
  203   2         prints("HaHa,Task4! ",1);      //显示信息
  204   2         OSFreeDevice(PrinterDeviceAddr);           //释放打印机
  205   2         OSTaskDelay(100);              //延时100个时钟节拍
  206   2         ON_LED7();                     //开LED7
  207   2         OSRequestDevice(PrinterDeviceAddr,0);     //申请使用打印机
  208   2         prints("HaHa,Task4! ",1);      //显示信息
  209   2         OSFreeDevice(PrinterDeviceAddr);     //释放打印机
  210   2         OSTaskDelay(100);              //延时100个时钟节拍
  211   2         OFF_LED7();                    //关LED7
  212   2        }
  213   1      }
  214          //////////////////////////////////End of function//////////////////////////////////////////////
  215          
  216          
  217          /**********************************************************************************************
  218          任务5。键盘扫描并发送消息。
  219          **********************************************************************************************/
  220          void Task5(void)
  221          {
  222   1       uint32 PrinterDeviceAddr;   //保存打印机设备的地址
  223   1       OSpcb * Task1Pcb,* Task2Pcb;   //用来保存任务pcb
  224   1       OSMsg Msg;                     //消息
  225   1       uint32  MsgValue;              //保存消息值
  226   1       
  227   1       PrinterDeviceAddr=OSGetDeviceAddr(OS_PRINTER_DEVICE_ID);   //获取打印机设备地址
  228   1       OSRequestDevice(PrinterDeviceAddr,0);    //申请使用打印机
  229   1       
  230   1       prints("",1);
  231   1       prints(OSCurrentPcb->Title,0);   //显示任务启动
  232   1       prints(" Start.",1);
  233   1       OSFreeDevice(PrinterDeviceAddr);   //释放打印机
  234   1       
  235   1       Task1Pcb=(OSpcb *)(uint32)OSTaskCreat((uint32)Task1,256,4,OS_THUMB_MODE,"Task1");  //创建任务1
  236   1       Task2Pcb=(OSpcb *)(uint32)OSTaskCreat((uint32)Task2,256,5,OS_THUMB_MODE,"Task2");  //创建任务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; //设置要发送的消息类型
  247   3           (&Msg)->pMsg=&MsgValue;       //设置要发送的消息的值
  248   3           (&Msg)->Length=1;             //设置消息的长度
  249   3      
  250   3           OSSendMsg(Task1Pcb,&Msg);     //将消息发送给任务1
  251   3           OSSendMsg(Task2Pcb,&Msg);     //将消息发送给任务2
  252   3           Key.Value=0;                  //清除键值,表示该次按键已经处理
  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)

⌨️ 快捷键说明

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