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

📄 minix.lst

📁 minix rtos 测试代码
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.07   MINIX                                                                 11/06/2003 20:00:10 PAGE 1   


C51 COMPILER V7.07, COMPILATION OF MODULE MINIX
OBJECT MODULE PLACED IN MINIX.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE MINIX.C BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          #include <minix.h>
   2          
   3          //*************************************************************
   4          //
   5          //   外部接口函数声明该声明区域是声明汇编接口程序
   6          //
   7          //*************************************************************
   8          extern void OS_GOTO_TASK(void);              //跳转到线程
   9          extern void OS_SAVE_THIS_TASK(void);         //保存现有线程
  10          extern void OS_SAVE_SYSTEM_R(void);          //保存系统R积存器
  11          extern void OS_RESTORE_SYSTEM_R(void);       //恢复系统R积存器
  12          
  13          
  14          //*************************************************************
  15          //
  16          // 内核函数声明声明内核中所用到的函数,也包含用户所需的函数
  17          //
  18          //*************************************************************
  19          void OS_SAVE_SYSTEM(void);                  //保存系统积存器函数
  20          void OS_RESTORE_SYSTEM(void);               //恢复系统积存器函数
  21          
  22          unsigned char OS_TASK_SELECT(void);         //线程选择器
  23          void OS_TASK_DLY(unsigned char times);      //线程延时程序
  24          
  25          unsigned char OS_GET_TASK_ID(void (*task));      //获取线程ID
  26          void OS_SET_READY(void (*task),unsigned char key);//设置READY位
  27          unsigned char OS_GET_READY(void (*task));     //获取线程READY状态
  28          
  29          extern void OS_START_TICK(void);                   //开时钟
  30          extern void OS_RESTORE_TICK(void);                 //恢复时钟
  31          
  32          //构造函数声明
  33          void OS_CREATE_TASK(
  34                              void *task,                  //线程入口地址
  35                              unsigned char task_ready,    //线程状态
  36                                                  unsigned char task_pri,      //线程优先级
  37                                                  unsigned char task_sp_bot    //线程堆栈底部
  38                                                  );
  39          
  40          
  41          //*************************************************************
  42          //
  43          //  内核变量声明本声明是内核调度时所需要的临时变量或公共变量
  44          //
  45          //*************************************************************
  46          static unsigned char NOT_CLOCK_ISR=0x00; //是否由非中断过程进入调度器标志位
  47          
  48          //线程TCB
  49          typedef struct OS_TASK_TCB
  50          {
  51           unsigned char task_pri;            //优先级
  52           unsigned char task_ready;          //线程状态
  53           unsigned char task_sp_bot;         //线程堆栈底部
  54           unsigned char task_sp_now;         //现时线程SP指针
  55           unsigned char task_sp_top;         //线程SP指针顶
C51 COMPILER V7.07   MINIX                                                                 11/06/2003 20:00:10 PAGE 2   

  56           void *task_address;                //线程入口地址
  57           unsigned char task_wait_clock;     //线程等待时钟
  58           unsigned char task_on_activation;  //线程活动状态
  59          };
  60          
  61          struct OS_TASK_TCB OS_TASK_ARRY[TASK_NUMBER];  //建立TCB数组
  62          static unsigned char OS_TASK_INT_USED=0X00;    //线程建立数
  63          static unsigned char os_this_task_id=0xff;     //当前线程TCB指针
  64          
  65          
  66          //系统寄存器保存结构
  67          struct OS_SYSTEM_SAVE_TCB
  68          {
  69           unsigned char SYSTEM_SP_NOW;         //现时线程SP指针
  70           //void *task_address;                //线程入口地址
  71           unsigned char PSW;                   //PSW
  72           unsigned char ACC;                   //ACC
  73           unsigned char B;                     //B
  74           unsigned char DPH;                   //DPH
  75           unsigned char DPL;                   //DPL
  76          // unsigned char R7;                  //R寄存器由于无法访问以汇编代替
  77          // unsigned char R6;
  78          // unsigned char R5;
  79          // unsigned char R4;
  80          // unsigned char R3;
  81          // unsigned char R2;
  82          // unsigned char R1;
  83          // unsigned char R0;
  84          }OS_SYSTEM;                           //系统机构明 OS_SYSTEM
  85          
  86          
  87          //*********************************************************
  88          //
  89          //     代码区以下是MINIX内核代码
  90          //
  91          //*********************************************************
  92          
  93          //获取线程ID
  94          unsigned char OS_GET_TASK_ID(void (*task))
  95          {
  96   1       unsigned char loop;
  97   1       for (loop=0x00;loop<TASK_NUMBER;++loop)
  98   1           {
  99   2                if (OS_TASK_ARRY[loop].task_address==task)
 100   2                    {return loop;}
 101   2               }
 102   1      }
 103          
 104          //设置READY位
 105          void OS_SET_READY(void (*task),unsigned char key)
 106          {
 107   1       OS_TASK_ARRY[OS_GET_TASK_ID(task)].task_ready=key;
 108   1      }
 109          
 110          //获取线程READY状态
 111          unsigned char OS_GET_READY(void (*task))
 112          {
 113   1       return OS_TASK_ARRY[OS_GET_TASK_ID(task)].task_ready;
 114   1      }
 115          
 116          //系统调度器
 117          void OS_ATTEMPER(void)
C51 COMPILER V7.07   MINIX                                                                 11/06/2003 20:00:10 PAGE 3   

 118          {
 119   1       unsigned char loop;      //循环临时变量
 120   1      
 121   1       //判断进入线程调度器是否在没有激活线程状态下进行,判断是否第一次进入
 122   1       if (os_this_task_id!=0xff)
 123   1          {
 124   2               OS_TASK_ARRY[os_this_task_id].task_sp_now=SP_POINTER;  //保存线程堆栈指针
 125   2               SP_POINTER=OS_SYSTEM.SYSTEM_SP_NOW;                    //恢复系统指针
 126   2           OS_RESTORE_SYSTEM();                                   //恢复系统寄存器
 127   2           OS_TASK_ARRY[os_this_task_id].task_on_activation=0;    //清除线程活动标志位
 128   2              }
 129   1      
 130   1          OS_RESTORE_TICK();    //恢复时钟设置
 131   1      
 132   1              if (NOT_CLOCK_ISR)    //判断是否为中断操作
 133   1               {NOT_CLOCK_ISR=0;    //清除非中断操作标志未
 134   2               }else
 135   1                {
 136   2            //循环对等待线程中的时间减一
 137   2            for (loop=0x00;loop<TASK_NUMBER;loop++)
 138   2               {
 139   3                       //为等待线程减1
 140   3                       if (OS_TASK_ARRY[loop].task_wait_clock>0)
 141   3                           {
 142   4                                OS_TASK_ARRY[loop].task_wait_clock=OS_TASK_ARRY[loop].task_wait_clock-1;
 143   4                      }
 144   3                        }
 145   2                 }
 146   1      
 147   1       os_this_task_id=OS_TASK_SELECT();     //选出下一条被执行的线程
 148   1      
 149   1       OS_TASK_ARRY[os_this_task_id].task_on_activation=1;  //设置活动标志
 150   1      
 151   1       OS_SAVE_SYSTEM();                     //保存系统寄存器
 152   1       OS_SYSTEM.SYSTEM_SP_NOW=SP_POINTER;   //保存系统指针
 153   1      

⌨️ 快捷键说明

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