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

📄 os_cpu_c.lst

📁 在51上运行的小的OS系统
💻 LST
📖 第 1 页 / 共 2 页
字号:
 153          }
 154          */
 155          
 156          /*********************************************************************************************************
 157          ** 函数名称: OSIdle
 158          ** 功能描述: 优先级最低的任务
 159          ** 输 入: 无
 160          ** 输 出 : 无
 161          ** 全局变量: 无
 162          ** 调用模块: 无
 163          ** 
 164          ** 作 者: 陈明计
 165          ** 日 期: 2002年12月2日
 166          **-------------------------------------------------------------------------------------------------------
 167          ** 修改人:
 168          ** 日 期:
 169          **-------------------------------------------------------------------------------------------------------
 170          ********************************************************************************************************/
 171          
 172                  void OSIdle(void)
 173          {
 174   1          while(1)
 175   1          {
 176   2              PCON = PCON | 0x01;                     /* CPU进入休眠状态 */
 177   2          }
 178   1      }
C51 COMPILER V8.08   OS_CPU_C                                                              10/17/2008 09:11:32 PAGE 4   

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

 241          ** 输 入: 无
 242          ** 输 出 : 无
 243          ** 全局变量: 无
 244          ** 调用模块: OS_IBT_ENTER,(UserTickTimer),OSTimeTick,OSIntExit
 245          ** 
 246          ** 作 者: 陈明计
 247          ** 日 期: 2002年2月22日
 248          **-------------------------------------------------------------------------------------------------------
 249          ** 修改人: 陈明计
 250          ** 日 期: 2002年10月23日
 251          **-------------------------------------------------------------------------------------------------------
 252          ** 修改人:
 253          ** 日 期:
 254          **-------------------------------------------------------------------------------------------------------
 255          ********************************************************************************************************/
 256          #if EN_OS_INT_ENTER >0 
 257          #pragma disable                                        /* 除非最高优先级中断,否则,必须加上这一句        
             -         */
 258          #endif
 259                  void OSTickISR(void) interrupt OS_TIME_ISR
 260          
 261          {
 262   1      #if TICK_TIMER_SHARING >1 
                  static uint8 TickSum = 0;
              #endif
 265   1      
 266   1      #if EN_USER_TICK_TIMER > 0 
                  UserTickTimer();                                    /* 用户函数                                       
             -          */
              #endif
 269   1      
 270   1      #if TICK_TIMER_SHARING >1 
                  TickSum = (TickSum + 1) % TICK_TIMER_SHARING;
                  if (TickSum != 0)
                  {
                      return;
                  }
              #endif
 277   1      
 278   1      #if EN_OS_INT_ENTER > 0 
 279   1          OS_INT_ENTER();                                     /* 中断开始处理                                   
             - */
 280   1      #endif
 281   1          
 282   1      
 283   1      #if EN_TIMER_SHARING > 0
 284   1          OSTimeTick();                                       /* 调用系统时钟处理函数                           
             - */
 285   1      #else
                  OSIntSendSignal(TIME_ISR_TASK_ID);                  /* 唤醒ID为TIME_ISR_TASK_ID的任务                 
             -*/
              #endif
 288   1          
 289   1          OSIntExit();                                        /* 中断结束处理                                   
             -          */
 290   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    204    ----
   CONSTANT SIZE    =      9    ----
   XDATA SIZE       =   ----    ----
C51 COMPILER V8.08   OS_CPU_C                                                              10/17/2008 09:11:32 PAGE 6   

   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 + -