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

📄 os_cpu_c.lst

📁 一个通过方向判别芯片进行角度计算的程序
💻 LST
📖 第 1 页 / 共 2 页
字号:

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

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

 303          ** 修改人: 陈明计
 304          ** 日 期: 2002年10月23日
 305          **-------------------------------------------------------------------------------------------------------
 306          ** 修改人:
 307          ** 日 期:
 308          **-------------------------------------------------------------------------------------------------------
 309          ********************************************************************************************************/
 310          #pragma disable                                        /* 除非最高优先级中断,否则,必须加上这一句        
             -         */
 311          
 312          void OSTickISR(void) interrupt OS_TIME_ISR
 313          
 314          {
 315   1      #if TICK_TIMER_SHARING >1 
                  static uint8 TickSum = 0;
              #endif
 318   1      
 319   1      #if EN_USER_TICK_TIMER > 0 
 320   1          UserTickTimer();                                    /* 用户函数                                       
             -          */
 321   1      #endif
 322   1      
 323   1      #if TICK_TIMER_SHARING >1 
                  TickSum = (TickSum + 1) % TICK_TIMER_SHARING;
                  if (TickSum != 0)
                  {
                      return;
                  }
              #endif
 330   1      
 331   1          OS_INT_ENTER();                                     /* 中断开始处理                                   
             - */
 332   1      
 333   1      #if EN_TIMER_SHARING > 0
 334   1          OSTimeTick();                                       /* 调用系统时钟处理函数                           
             - */
 335   1      #else
                  OSIntSendSignal(TIME_ISR_TASK_ID);                  /* 唤醒ID为TIME_ISR_TASK_ID的任务                 
             -*/
              #endif
 338   1          
 339   1          OSIntExit();                                        /* 中断结束处理                                   
             -          */
 340   1      }
 341          
 342          /*********************************************************************************************************
 343          **                            End Of File
 344          ********************************************************************************************************/


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