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

📄 os_q.lst

📁 一个分选系统的软件:用SmallRtos操作系统
💻 LST
📖 第 1 页 / 共 3 页
字号:
 507   4                      temp = temp >> 1;
 508   4                  }
 509   3                  if (i < OS_MAX_TASKS )
 510   3                  {
 511   4                      /* 查到,使其中优先级最高的任务进入就绪状态,并将其从等待队列中清除 */
 512   4                      Buf[3] &= ~OSMapTbl[i];
 513   4                      OSIntSendSignal(i);
 514   4                  }
 515   3      #else
                          for (i = 0; i < 8; i++)
                          {
                              if ((temp & 0x01) != 0)
                              {
                                  break;
                              }
                              temp = temp >> 1;
                          }
                          if (i >= 8 )
                          {
                              temp = Buf[4];
                              for (; i < OS_MAX_TASKS; i++)
                              {
                                  if ((temp & 0x01) != 0)
                                  {
                                      break;
                                  }
                                  temp = temp >> 1;
                              }
                          }
                          if (i < OS_MAX_TASKS )
                          {
                              /* 查到,使其中优先级最高的任务进入就绪状态,并将其从等待队列中清除 */
                              if (i < 8)
                              {
                                  Buf[3] &= ~OSMapTbl[i];
                              }
                              else
                              {
                                  Buf[4] &= ~OSMapTbl[i & 0x07];
                              }
                              OSIntSendSignal(i);
                          }
              #endif
 550   3              }
C51 COMPILER V7.06   OS_Q                                                                  06/06/2005 16:32:36 PAGE 10  

 551   2              OS_EXIT_CRITICAL();
 552   2              return OS_Q_OK;
 553   2          }
 554   1          else
 555   1          {
 556   2              OS_EXIT_CRITICAL();
 557   2              return OS_Q_FULL;
 558   2          }
 559   1      }
 560          #endif
 561          
 562          /*********************************************************************************************************
 563          ** 函数名称: OSQPost
 564          ** 功能描述: FIFO方式发送消息
 565          ** 输 入: Buf:指向队列的指针
 566          **         Data:消息数据
 567          ** 输 出: OS_Q_FULL:队列满
 568          **         OS_Q_OK:发送成功
 569          ** 全局变量: 无
 570          ** 调用模块: OSQIntPost,OSSched
 571          **
 572          ** 作 者: 陈明计
 573          ** 日 期: 2002年9月1日
 574          **-------------------------------------------------------------------------------------------------------
 575          ** 修改人:
 576          ** 日 期:
 577          **-------------------------------------------------------------------------------------------------------
 578          ********************************************************************************************************/
 579          #if EN_OS_Q_POST > 0
 580                  uint8 OSQPost(uint8 OS_Q_MEM_SEL *Buf, uint8 Data)
 581          {
 582   1      #if EN_OS_Q_CHK > 0
 583   1          if (Buf == NULL)
 584   1          {
 585   2              return NOT_OK;
 586   2          }
 587   1      #endif
 588   1      
 589   1          if (OSQIntPost(Buf,Data) == OS_Q_OK)
 590   1          {
 591   2              OSSched();
 592   2              return OS_Q_OK;
 593   2          }
 594   1          else
 595   1          {
 596   2              return OS_Q_FULL;
 597   2          }
 598   1      }
 599          #endif
 600          
 601          /*********************************************************************************************************
 602          ** 函数名称: OSQPostFront
 603          ** 功能描述: LIFO方式发送消息
 604          ** 输 入: Buf:指向队列的指针
 605          **         Data:消息数据
 606          ** 输 出: OS_Q_FULL:队列满
 607          **         OS_Q_OK:发送成功
 608          ** 全局变量: 无
 609          ** 调用模块: OSQIntPostFront,OSSched
 610          **
 611          ** 作 者: 陈明计
 612          ** 日 期: 2002年9月1日
C51 COMPILER V7.06   OS_Q                                                                  06/06/2005 16:32:36 PAGE 11  

 613          **-------------------------------------------------------------------------------------------------------
 614          ** 修改人:
 615          ** 日 期:
 616          **-------------------------------------------------------------------------------------------------------
 617          ********************************************************************************************************/
 618          #if EN_OS_Q_POST_FRONT > 0
 619                  uint8 OSQPostFront(uint8 OS_Q_MEM_SEL *Buf, uint8 Data)
 620          {
 621   1      #if EN_OS_Q_CHK > 0
 622   1          if (Buf == NULL)
 623   1          {
 624   2              return NOT_OK;
 625   2          }
 626   1      #endif
 627   1      
 628   1          if (OSQIntPostFront(Buf,Data) == OS_Q_OK)
 629   1          {
 630   2              OSSched();
 631   2              return OS_Q_OK;
 632   2          }
 633   1          else
 634   1          {
 635   2              return OS_Q_FULL;
 636   2          }
 637   1      }
 638          #endif
 639          
 640          /*********************************************************************************************************
 641          ** 函数名称: OSQNMsgs
 642          ** 功能描述: 取得消息队列中消息数
 643          ** 输 入: Buf:指向队列的指针
 644          ** 输 出: 消息数
 645          ** 全局变量: 无
 646          ** 调用模块: OS_ENTER_CRITICAL,OS_EXIT_CRITICAL
 647          **
 648          ** 作 者: 陈明计
 649          ** 日 期: 2002年9月1日
 650          **-------------------------------------------------------------------------------------------------------
 651          ** 修改人:
 652          ** 日 期:
 653          **-------------------------------------------------------------------------------------------------------
 654          ********************************************************************************************************/
 655          #if EN_OS_Q_NMsgs > 0
 656                  uint8 OSQNMsgs(uint8 OS_Q_MEM_SEL *Buf)
 657          {
 658   1          uint8 temp;
 659   1      
 660   1      #if EN_OS_Q_CHK > 0
 661   1          if (Buf == NULL)
 662   1          {
 663   2              return 0;
 664   2          }
 665   1      #endif
 666   1      
 667   1          OS_ENTER_CRITICAL();
 668   1          temp = Buf[0];
 669   1          OS_EXIT_CRITICAL();
 670   1          return temp;
 671   1      }
 672          #endif
 673          
 674          /*********************************************************************************************************
C51 COMPILER V7.06   OS_Q                                                                  06/06/2005 16:32:36 PAGE 12  

 675          ** 函数名称: OSQSize
 676          ** 功能描述: 取得消息队列总容量
 677          ** 输 入: Buf:指向队列的指针
 678          ** 输 出: 消息队列总容量
 679          ** 全局变量: 无
 680          ** 调用模块: OS_ENTER_CRITICAL,OS_EXIT_CRITICAL
 681          **
 682          ** 作 者: 陈明计
 683          ** 日 期: 2002年9月1日
 684          **-------------------------------------------------------------------------------------------------------
 685          ** 修改人:
 686          ** 日 期:
 687          **-------------------------------------------------------------------------------------------------------
 688          ********************************************************************************************************/
 689          #if EN_OS_Q_SIZE > 0
 690                  uint8 OSQSize(uint8 OS_Q_MEM_SEL *Buf)
 691          {
 692   1          uint8 temp;
 693   1      
 694   1      #if EN_OS_Q_CHK > 0
 695   1          if (Buf == NULL)
 696   1          {
 697   2              return 0;
 698   2          }
 699   1      #endif
 700   1      
 701   1          OS_ENTER_CRITICAL();
 702   1      #if OS_MAX_TASKS < 9
 703   1          temp = Buf[1] - 4;
 704   1      #else
                  temp = Buf[1] - 5;
              #endif
 707   1          OS_EXIT_CRITICAL();
 708   1          return temp;
 709   1      }
 710          #endif
 711          
 712          /*********************************************************************************************************
 713          ** 函数名称: OSQFlush
 714          ** 功能描述: 清空队列
 715          ** 输 入: Buf:指向队列的指针
 716          ** 输 出: 无
 717          ** 全局变量: 无
 718          ** 调用模块: OS_ENTER_CRITICAL,OS_EXIT_CRITICAL
 719          **
 720          ** 作 者: 陈明计
 721          ** 日 期: 2002年9月1日
 722          **-------------------------------------------------------------------------------------------------------
 723          ** 修改人: 陈明计
 724          ** 日 期: 2002年10月26日
 725          **-------------------------------------------------------------------------------------------------------
 726          ** 修改人:
 727          ** 日 期:
 728          **-------------------------------------------------------------------------------------------------------
 729          ********************************************************************************************************/
 730          #if EN_OS_Q_FLUSH > 0
 731                  void OSQFlush (uint8 OS_Q_MEM_SEL *Buf)
 732          {
 733   1      #if EN_OS_Q_CHK > 0
 734   1          if (Buf == NULL)
 735   1          {
 736   2              return;
C51 COMPILER V7.06   OS_Q                                                                  06/06/2005 16:32:36 PAGE 13  

 737   2          }
 738   1      #endif
 739   1      
 740   1          Buf[0] = 0;
 741   1      #if OS_MAX_TASKS < 9
 742   1          Buf[2] = 4;
 743   1      #else
                  Buf[2] = 5;
              #endif
 746   1      }
 747          #endif
 748          
 749          #endif


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