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

📄 os_cpu_c.lst

📁 一种51单片机嵌入式系统SMALL RTOS 51的应用
💻 LST
📖 第 1 页 / 共 2 页
字号:
 177          #endif
 178              *cp = 0;
C51 COMPILER V6.23a  OS_CPU_C                                                              01/01/2001 02:30:57 PAGE 4   

 179          }
 180              */
 181          
 182          
 183          /*********************************************************************************************************
 184          ** 函数名称: OSTaskStkDel
 185          ** 功能描述: 任务堆栈删除
 186          ** 输 入: 无
 187          ** 输 出 : 无
 188          ** 全局变量: OSTaskID,OSTsakStackBotton,SP
 189          ** 调用模块: LoadCtx
 190          ** 
 191          ** 作 者: 陈明计
 192          ** 日 期: 2002年2月22日
 193          **-------------------------------------------------------------------------------------------------------
 194          ** 修改人:
 195          ** 日 期:
 196          **-------------------------------------------------------------------------------------------------------
 197          ********************************************************************************************************/
 198          
 199                  void StkDelA(uint8 TaskID)
 200          {
 201   1          uint8 idata *cp;
 202   1          uint8 idata *cp1;
 203   1          uint8 temp, i;
 204   1          
 205   1          cp = OSTsakStackBotton[TaskID];
 206   1          cp1 = OSTsakStackBotton[TaskID + 1];
 207   1          temp = cp1 - cp;
 208   1          for (i = TaskID + 1; i <= OSRunningTaskID(); i++)
 209   1          {
 210   2              OSTsakStackBotton[i] -= temp;
 211   2          }
 212   1          i = SP - (uint8)(cp1) + 1;
 213   1          do
 214   1          {
 215   2              *cp++ = *cp1++;
 216   2          } while (--i != 0);
 217   1          SP = SP - temp;
 218   1      }
 219          
 220          
 221                  void StkDelB(uint8 TaskID)
 222          {
 223   1          uint8 idata *cp;
 224   1          uint8 idata *cp1;
 225   1          uint8 temp, i;
 226   1      
 227   1          cp = OSTsakStackBotton[TaskID];
 228   1          cp1 = OSTsakStackBotton[TaskID + 1];
 229   1          i = OSTsakStackBotton[TaskID] - OSTsakStackBotton[OSRunningTaskID() + 1];
 230   1          if (i != 0)
 231   1          {
 232   2              do
 233   2              {
 234   3                  *cp1++ = *cp++;
 235   3              } while (--i != 0);
 236   2          }
 237   1          temp = cp1 - cp;
 238   1          for (i = OSRunningTaskID() + 1; i <= TaskID; i++)
 239   1          {
 240   2              OSTsakStackBotton[i] += temp;
C51 COMPILER V6.23a  OS_CPU_C                                                              01/01/2001 02:30:57 PAGE 5   

 241   2          }
 242   1      }
 243          
 244                  void StkDelC(uint8 TaskID)
 245          {
 246   1          uint8 idata *cp;
 247   1          extern void C_OSCtxSw(void);
 248   1          
 249   1          
 250   1          cp = OSTsakStackBotton[TaskID];
 251   1          *cp++ = (uint16)C_OSCtxSw % 256;
 252   1          *cp = (uint16)C_OSCtxSw / 256;
 253   1          SP = (uint8) cp;
 254   1          OSFindNextRunningTask();
 255   1      }
 256          
 257                  void OSTaskStkDel(uint8 TaskID)  small
 258          {
 259   1          uint8 temp;
 260   1      
 261   1          temp = 1;
 262   1          if (TaskID == OSRunningTaskID())
 263   1          {
 264   2              temp = 2;
 265   2          }
 266   1          else if (TaskID < OSRunningTaskID())
 267   1          {
 268   2              temp = 0;
 269   2          }
 270   1          switch (temp)
 271   1          {
 272   2              case 0:
 273   2                  StkDelA(TaskID);
 274   2                  break;
 275   2              case 1:
 276   2                  StkDelB(TaskID);
 277   2                  break;
 278   2              case 2:
 279   2                  StkDelC(TaskID);
 280   2                  break;
 281   2              default:
 282   2                  break;
 283   2          }
 284   1      }
 285          
 286          /*********************************************************************************************************
 287          ** 函数名称: OSTickISR
 288          ** 功能描述: 系统时钟中断服务函数
 289          ** 输 入: 无
 290          ** 输 出 : 无
 291          ** 全局变量: 无
 292          ** 调用模块: OS_IBT_ENTER,(UserTickTimer),OSTimeTick,OSIntExit
 293          ** 
 294          ** 作 者: 陈明计
 295          ** 日 期: 2002年2月22日
 296          **-------------------------------------------------------------------------------------------------------
 297          ** 修改人: 陈明计
 298          ** 日 期: 2002年10月23日
 299          **-------------------------------------------------------------------------------------------------------
 300          ** 修改人:
 301          ** 日 期:
 302          **-------------------------------------------------------------------------------------------------------
C51 COMPILER V6.23a  OS_CPU_C                                                              01/01/2001 02:30:57 PAGE 6   

 303          ********************************************************************************************************/
 304          #pragma disable                                        /* 除非最高优先级中断,否则,必须加上这一句        
             -         */
 305          
 306                  void OSTickISR(void) interrupt OS_TIME_ISR
 307          
 308          {
 309   1      #if TICK_TIMER_SHARING >1 
                  static uint8 TickSum = 0;
              #endif
 312   1      
 313   1      #if EN_USER_TICK_TIMER > 0 
 314   1          UserTickTimer();                                    /* 用户函数                                       
             -          */
 315   1      #endif
 316   1      
 317   1      #if TICK_TIMER_SHARING >1 
                  TickSum = (TickSum + 1) % TICK_TIMER_SHARING;
                  if (TickSum != 0)
                  {
                      return;
                  }
              #endif
 324   1      
 325   1          OS_INT_ENTER();                                     /* 中断开始处理                                   
             - */
 326   1      
 327   1      #if EN_TIMER_SHARING > 0
 328   1          OSTimeTick();                                       /* 调用系统时钟处理函数                           
             - */
 329   1      #else
                  OSIntSendSignal(TIME_ISR_TASK_ID);                  /* 唤醒ID为TIME_ISR_TASK_ID的任务                 
             -*/
              #endif
 332   1          
 333   1          OSIntExit();                                        /* 中断结束处理                                   
             -          */
 334   1      }
 335          
 336          /*********************************************************************************************************
 337          **                            End Of File
 338          ********************************************************************************************************/


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    291    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      5    ----
   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 + -