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

📄 os_cpu_c.lst

📁 利用SMALL RTOS51做的一个项目
💻 LST
📖 第 1 页 / 共 2 页
字号:
 165          ** 功能描述: 优先级最低的任务
 166          ** 输 入: 无
 167          ** 输 出 : 无
 168          ** 全局变量: 无
 169          ** 调用模块: 无
 170          ** 
 171          ** 作 者: 陈明计
 172          ** 日 期: 2002年12月2日
 173          **-------------------------------------------------------------------------------------------------------
 174          ** 修改人:
 175          ** 日 期:
 176          **-------------------------------------------------------------------------------------------------------
 177          ********************************************************************************************************/
 178          
C51 COMPILER V7.50   OS_CPU_C                                                              12/29/2004 20:23:48 PAGE 4   

 179                  void OSIdle(void)
 180          {
 181   1          while(1)
 182   1          {
 183   2         //      PCON = PCON | 0x01;                     /* CPU进入休眠状态 */
 184   2      
 185   2          }
 186   1      }
 187          
 188          /*********************************************************************************************************
 189          ** 函数名称: OSStart
 190          ** 功能描述: Small RTOS 51初始化函数,调用此函数后多任务开始运行,首先执ID为0的任务
 191          ** 输 入: 无
 192          ** 输 出 : 无
 193          ** 全局变量: OSTsakStackBotton,SP
 194          ** 调用模块: 无
 195          ** 
 196          ** 作 者: 陈明计
 197          ** 日 期: 2002年2月22日
 198          **-------------------------------------------------------------------------------------------------------
 199          ** 修改人: 陈明计
 200          ** 日 期: 2002年12月2日
 201          **-------------------------------------------------------------------------------------------------------
 202          ** 修改人: 陈明计
 203          ** 日 期: 2002年12月30日
 204          **-------------------------------------------------------------------------------------------------------
 205          ** 修改人:
 206          ** 日 期:
 207          **-------------------------------------------------------------------------------------------------------
 208          ********************************************************************************************************/
 209                  void OSStart(void)
 210                  
 211          {
 212   1          uint8 idata *cp;
 213   1          uint8 i;
 214   1          
 215   1          cp = STACK;
 216   1          
 217   1          OSTsakStackBotton[0] = STACK;
 218   1          OSTsakStackBotton[OS_MAX_TASKS + 1] = (uint8 idata *)(IDATA_RAM_SIZE % 256);
 219   1          
 220   1          /* 初始化优先级最高的任务堆栈,使返回地址为任务开始地址 */
 221   1          *cp++ = ((uint16)(TaskFuction[0])) % 256;
 222   1          SP = (uint8) cp;
 223   1          *cp = ((uint16)(TaskFuction[0])) / 256;
 224   1      
 225   1          /* 初始化优先级最低的任务堆栈 */
 226   1          cp = (uint8 idata *)(IDATA_RAM_SIZE - 1) ;
 227   1          *cp-- = 0;
 228   1          *cp-- =  ((uint16)(OSIdle)) / 256;
 229   1          OSTsakStackBotton[OS_MAX_TASKS] = cp;
 230   1          *cp-- =  ((uint16)(OSIdle)) % 256;
 231   1          
 232   1          /* 初始化其它优先级的任务堆栈 */
 233   1          for(i = OS_MAX_TASKS - 1; i > 0; i--)
 234   1          {
 235   2              *cp-- = 0;
 236   2              *cp-- =  ((uint16)(TaskFuction[i])) / 256;
 237   2              OSTsakStackBotton[i] = cp;
 238   2              *cp-- =  ((uint16)(TaskFuction[i])) % 256;
 239   2          }
 240   1          /* 允许中断 */
C51 COMPILER V7.50   OS_CPU_C                                                              12/29/2004 20:23:48 PAGE 5   

 241   1          Os_Enter_Sum = 1;
 242   1          OS_EXIT_CRITICAL();
 243   1      
 244   1          /* 函数返回优先级最高的任务 */
 245   1      }
 246          
 247          /*********************************************************************************************************
 248          ** 函数名称: OSTickISR
 249          ** 功能描述: 系统时钟中断服务函数
 250          ** 输 入: 无
 251          ** 输 出 : 无
 252          ** 全局变量: 无
 253          ** 调用模块: OS_IBT_ENTER,(UserTickTimer),OSTimeTick,OSIntExit
 254          ** 
 255          ** 作 者: 陈明计
 256          ** 日 期: 2002年2月22日
 257          **-------------------------------------------------------------------------------------------------------
 258          ** 修改人: 陈明计
 259          ** 日 期: 2002年10月23日
 260          **-------------------------------------------------------------------------------------------------------
 261          ** 修改人:
 262          ** 日 期:
 263          **-------------------------------------------------------------------------------------------------------
 264          ********************************************************************************************************/
 265          #if EN_OS_INT_ENTER >0 
 266          #pragma disable                                        /* 除非最高优先级中断,否则,必须加上这一句        
             -         */
 267          #endif
 268                  void OSTickISR(void) interrupt OS_TIME_ISR
 269          
 270          {
 271   1      
 272   1      #if TICK_TIMER_SHARING >1 
                  static uint8 TickSum = 0;
              #endif
 275   1      
 276   1      #if OS_TIME_ISR == 1
                      extern uint8 _Reg_TH0;          //TH0缓存
                      extern uint8 _Reg_TL0;          //TL0缓存
              #endif  
 280   1      
 281   1      
 282   1      
 283   1      #if     OS_TIME_ISR == 1
                      TR0=0;
                      TH0 = _Reg_TH0;
                  TL0 = _Reg_TL0;
                      TR0=1;
              #endif
 289   1      
 290   1      
 291   1      #if EN_USER_TICK_TIMER > 0 
 292   1          UserTickTimer();                                    /* 用户函数                                       
             -          */
 293   1      #endif
 294   1      
 295   1      #if TICK_TIMER_SHARING >1 
                  TickSum = (TickSum + 1) % TICK_TIMER_SHARING;
                  if (TickSum != 0)
                  {
                      return;
                  }
C51 COMPILER V7.50   OS_CPU_C                                                              12/29/2004 20:23:48 PAGE 6   

              #endif
 302   1      
 303   1      #if EN_OS_INT_ENTER > 0 
 304   1          OS_INT_ENTER();                                     /* 中断开始处理                                   
             - */
 305   1      #endif
 306   1          
 307   1      
 308   1      #if EN_TIMER_SHARING > 0
 309   1          OSTimeTick();                                       /* 调用系统时钟处理函数                           
             - */
 310   1      #else
                  OSIntSendSignal(TIME_ISR_TASK_ID);                  /* 唤醒ID为TIME_ISR_TASK_ID的任务                 
             -*/
              #endif
 313   1          
 314   1          OSIntExit();                                        /* 中断结束处理                                   
             -          */
 315   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    204    ----
   CONSTANT SIZE    =      9    ----
   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 + -