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

📄 minix.lst

📁 minix rtos 测试代码
💻 LST
📖 第 1 页 / 共 2 页
字号:
 154   1       //恢复线程堆栈指针
 155   1       SP_POINTER=OS_TASK_ARRY[os_this_task_id].task_sp_now;
 156   1       OS_GOTO_TASK();    //进入线程
 157   1      }
 158          
 159          
 160          //线程选择器
 161          //如果主要线程都处于等待状态,会返回空闲线程ID
 162          unsigned char OS_TASK_SELECT(void)   
 163          {
 164   1       unsigned char loop;
 165   1       unsigned char min_pri=0xff;       //线程优先级临时变量
 166   1       unsigned char min_pri_number;     //被选择出线程临时变量
 167   1       for (loop=0x00;loop<TASK_NUMBER;loop++)
 168   1         {
 169   2           if (OS_TASK_ARRY[loop].task_pri<=min_pri)
 170   2                   {
 171   3                        if (OS_TASK_ARRY[loop].task_ready>0)
 172   3                            {
 173   4                                   if (OS_TASK_ARRY[loop].task_wait_clock==0)
 174   4                                           {
 175   5                                min_pri=OS_TASK_ARRY[loop].task_pri;
 176   5                                min_pri_number=loop;
 177   5                                               }
 178   4                                }
 179   3                       }
C51 COMPILER V7.07   MINIX                                                                 11/06/2003 20:00:10 PAGE 4   

 180   2         }
 181   1       return min_pri_number;  //返回线程编号
 182   1      }
 183          
 184          //线程延时程序
 185          //用于设置线程进入等待状态
 186          void OS_TASK_DLY(unsigned char times)
 187          {
 188   1       NOT_CLOCK_ISR=1;      //设置非中断操作标志位
 189   1       OS_TASK_ARRY[os_this_task_id].task_wait_clock=times;  //送入等待时间
 190   1      
 191   1       //保存线程堆栈
 192   1       OS_TASK_ARRY[os_this_task_id].task_sp_now=SP_POINTER+CPU_SAVE_DUP;
 193   1       OS_SAVE_THIS_TASK();  //保存当前线程
 194   1      }
 195          
 196          //*********************************************
 197          //
 198          //  与CPU有关的函数 移植时可能需要修改
 199          //
 200          //*********************************************
 201          
 202          
 203          //线程构造器
 204          void OS_CREATE_TASK(
 205                              void *task,                  //线程入口地址
 206                              unsigned char task_ready,    //线程状态
 207                                                  unsigned char task_pri,      //线程优先级
 208                                                  unsigned char task_sp_bot    //线程堆栈底部
 209                                                  )
 210          {
 211   1        unsigned char *sp_temp; //临时线程指针
 212   1      
 213   1        OS_TASK_ARRY[OS_TASK_INT_USED].task_pri=task_pri;       //线程优先级
 214   1        OS_TASK_ARRY[OS_TASK_INT_USED].task_ready=task_ready;   //线程状态
 215   1        OS_TASK_ARRY[OS_TASK_INT_USED].task_sp_bot=task_sp_bot; //线程堆栈底部
 216   1        OS_TASK_ARRY[OS_TASK_INT_USED].task_address=task;       //线程入口地址
 217   1      
 218   1        OS_TASK_INT_USED=OS_TASK_INT_USED+1;                    //修改线程数目
 219   1      
 220   1        //初始化线程堆栈
 221   1        sp_temp=(char *)OS_TASK_ARRY[OS_TASK_INT_USED-1].task_sp_bot;
 222   1        *sp_temp=(char )task&0x00ff;           //PCL
 223   1        sp_temp=sp_temp+1;
 224   1        *sp_temp=(char)((int)task>>8);         //PCH
 225   1        sp_temp=sp_temp+1;
 226   1      
 227   1        *sp_temp=0x00;                         //PSW
 228   1        sp_temp=sp_temp+1;
 229   1        *sp_temp=0x00;                         //ACC
 230   1        sp_temp=sp_temp+1;
 231   1        *sp_temp=0x00;                         //B
 232   1        sp_temp=sp_temp+1;
 233   1        *sp_temp=0x00;                         //DPH
 234   1        sp_temp=sp_temp+1;
 235   1        *sp_temp=0x00;                         //DPL
 236   1        sp_temp=sp_temp+1;
 237   1        *sp_temp=0x00;                         //R0
 238   1        sp_temp=sp_temp+1;
 239   1        *sp_temp=0x00;                         //R1
 240   1        sp_temp=sp_temp+1;
 241   1        *sp_temp=0x00;                         //R2
C51 COMPILER V7.07   MINIX                                                                 11/06/2003 20:00:10 PAGE 5   

 242   1        sp_temp=sp_temp+1;
 243   1        *sp_temp=0x00;                         //R3
 244   1        sp_temp=sp_temp+1;
 245   1        *sp_temp=0x00;                         //R4
 246   1        sp_temp=sp_temp+1;
 247   1        *sp_temp=0x00;                         //R5
 248   1        sp_temp=sp_temp+1;
 249   1        *sp_temp=0x00;                         //R6
 250   1        sp_temp=sp_temp+1;
 251   1        *sp_temp=0x00;                         //R7
 252   1      
 253   1        //设置线程入口SP地址
 254   1        OS_TASK_ARRY[OS_TASK_INT_USED-1].task_sp_now=(char)sp_temp; 
 255   1      }
 256          
 257          /*
 258          //开时钟
 259          void OS_START_TICK(void) 
 260          {
 261           IE=IE|0X82;
 262           TH0=0Xf0;
 263           TL0=0X00;
 264           TMOD=TMOD|0X01;
 265           TCON=TCON|0X10;
 266          }
 267          
 268          //恢复时钟
 269          void OS_RESTORE_TICK(void) 
 270          {
 271           TH0=0Xf0;
 272           TL0=0X00;
 273          }
 274          */
 275          
 276          //保存调度系统的寄存器
 277          void OS_SAVE_SYSTEM(void)
 278          {
 279   1       OS_SYSTEM.PSW=PSW;
 280   1       OS_SYSTEM.ACC=ACC;
 281   1       OS_SYSTEM.B  =B;
 282   1       OS_SYSTEM.DPH=DPH;
 283   1       OS_SYSTEM.DPL=DPL;
 284   1       OS_SAVE_SYSTEM_R();//保存R寄存器
 285   1      }
 286          
 287          //恢复调度系统寄存器
 288          void OS_RESTORE_SYSTEM(void)
 289          {
 290   1       PSW=OS_SYSTEM.PSW;
 291   1       OS_RESTORE_SYSTEM_R();//恢复R寄存器
 292   1       ACC=OS_SYSTEM.ACC;
 293   1       B  =OS_SYSTEM.B;
 294   1       DPH=OS_SYSTEM.DPH;
 295   1       DPL=OS_SYSTEM.DPL;
 296   1      }
 297          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    675    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
C51 COMPILER V7.07   MINIX                                                                 11/06/2003 20:00:10 PAGE 6   

   PDATA SIZE       =   ----    ----
   DATA SIZE        =     49      12
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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