📄 os_q.lst
字号:
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 + -