/*
*********************************************************************************************************
* uC/OS-II
* The Real-Time Kernel
* EVENT FLAG MANAGEMENT
*
* (c) Copyright 2001, Jean J. Labrosse, Weston, FL
* All Rights Reserved
*
* File : OS_FLAG.C
* By : Jean J. Labrosse
*********************************************************************************************************
*/
#ifndef OS_MASTER_FILE
#include "source\includes.h"
#endif
#if (OS_VERSION >= 251) && (OS_FLAG_EN > 0) && (OS_MAX_FLAGS > 0)
/*
*********************************************************************************************************
* LOCAL PROTOTYPES
*********************************************************************************************************
*/
static void OS_FlagBlock(OS_FLAG_GRP *pgrp, OS_FLAG_NODE *pnode, OS_FLAGS flags, INT8U wait_type, INT16U timeout) reentrant;
static BOOLEAN OS_FlagTaskRdy(OS_FLAG_NODE *pnode, OS_FLAGS flags_rdy) reentrant;
/*$PAGE*/
/*
*********************************************************************************************************
* CHECK THE STATUS OF FLAGS IN AN EVENT FLAG GROUP
*
* Description: This function is called to check the status of a combination of bits to be set or cleared
* in an event flag group. Your application can check for ANY bit to be set/cleared or ALL
* bits to be set/cleared.
*
* This call does not block if the desired flags are not present.
*
* Arguments : pgrp is a pointer to the desired event flag group.
*
* flags Is a bit pattern indicating which bit(s) (i.e. flags) you wish to check.
* The bits you want are specified by setting the corresponding bits in
* 'flags'. e.g. if your application wants to wait for bits 0 and 1 then
* 'flags' would contain 0x03.
*
* wait_type specifies whether you want ALL bits to be set/cleared or ANY of the bits
* to be set/cleared.
* You can specify the following argument:
*
* OS_FLAG_WAIT_CLR_ALL You will check ALL bits in 'flags' to be clear (0)
* OS_FLAG_WAIT_CLR_ANY You will check ANY bit in 'flags' to be clear (0)
* OS_FLAG_WAIT_SET_ALL You will check ALL bits in 'flags' to be set (1)
* OS_FLAG_WAIT_SET_ANY You will check ANY bit in 'flags' to be set (1)
*
* NOTE: Add OS_FLAG_CONSUME if you want the event flag to be 'consumed' by
* the call. Example, to wait for any flag in a group AND then clear
* the flags that are present, set 'wait_type' to:
*
* OS_FLAG_WAIT_SET_ANY + OS_FLAG_CONSUME
*
* err is a pointer to an error code and can be:
* OS_NO_ERR No error
* OS_ERR_EVENT_TYPE You are not pointing to an event flag group
* OS_FLAG_ERR_WAIT_TYPE You didn't specify a proper 'wait_type' argument.
* OS_FLAG_INVALID_PGRP You passed a NULL pointer instead of the event flag
* group handle.
* OS_FLAG_ERR_NOT_RDY The desired flags you are waiting for are not
* available.
*
* Returns : The state of the flags in the event flag group.
*
* Called from: Task or ISR
*********************************************************************************************************
*/
#if OS_FLAG_ACCEPT_EN > 0
OS_FLAGS OSFlagAccept (OS_FLAG_GRP *pgrp, OS_FLAGS flags, INT8U wait_type, INT8U *err) reentrant
{
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr;
#endif
OS_FLAGS flags_cur;
OS_FLAGS flags_rdy;
BOOLEAN consume;
#if OS_ARG_CHK_EN > 0
if (pgrp == (OS_FLAG_GRP *)0) { /* Validate 'pgrp' */
*err = OS_FLAG_INVALID_PGRP;
return ((OS_FLAGS)0);
}
if (pgrp->OSFlagType != OS_EVENT_TYPE_FLAG) { /* Validate event block type */
*err = OS_ERR_EVENT_TYPE;
return ((OS_FLAGS)0);
}
#endif
if (wait_type & OS_FLAG_CONSUME) { /* See if we need to consume the flags */
wait_type &= ~OS_FLAG_CONSUME;
consume = TRUE;
} else {
consume = FALSE;
}
/*$PAGE*/
*err = OS_NO_ERR; /* Assume NO error until proven otherwise. */
OS_ENTER_CRITICAL();
switch (wait_type) {
case OS_FLAG_WAIT_SET_ALL: /* See if all required flags are set */
flags_rdy = pgrp->OSFlagFlags & flags; /* Extract only the bits we want */
if (flags_rdy == flags) { /* Must match ALL the bits that we want */
if (consume == TRUE) { /* See if we need to consume the flags */
pgrp->OSFlagFlags &= ~flags_rdy; /* Clear ONLY the flags that we wanted */
}
} else {
*err = OS_FLAG_ERR_NOT_RDY;
}
flags_cur = pgrp->OSFlagFlags; /* Will return the state of the group */
OS_EXIT_CRITICAL();
break;
case OS_FLAG_WAIT_SET_ANY:
flags_rdy = pgrp->OSFlagFlags & flags; /* Extract only the bits we want */
if (flags_rdy != (OS_FLAGS)0) { /* See if any flag set */
if (consume == TRUE) { /* See if we need to consume the flags */
pgrp->OSFlagFlags &= ~flags_rdy; /* Clear ONLY the flags that we got */
}
} else {
*err = OS_FLAG_ERR_NOT_RDY;
}
flags_cur = pgrp->OSFlagFlags; /* Will return the state of the group */
OS_EXIT_CRITICAL();
break;
#if OS_FLAG_WAIT_CLR_EN > 0
case OS_FLAG_WAIT_CLR_ALL: /* See if all required flags are cleared */
flags_rdy = ~pgrp->OSFlagFlags & flags; /* Extract only the bits we want */
if (flags_rdy == flags) { /* Must match ALL the bits that we want */
if (consume == TRUE) { /* See if we need to consume the flags */
pgrp->OSFlagFlags |= flags_rdy; /* Set ONLY the flags that we wanted */
}
} else {
*err = OS_FLAG_ERR_NOT_RDY;
}
flags_cur = pgrp->OSFlagFlags; /* Will return the state of the group */
OS_EXIT_CRITICAL();
break;
case OS_FLAG_WAIT_CLR_ANY:
flags_rdy = ~pgrp->OSFlagFlags & flags; /* Extract only the bits we want */
if (flags_rdy != (OS_FLAGS)0) { /* See if any flag cleared */
if (consume == TRUE) { /* See if we need to consume
没有合适的资源?快使用搜索试试~ 我知道了~
ucos-ii.rar_ucos ii移植到51
共78个文件
c:24个
obj:22个
h:12个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 51 浏览量
2022-09-23
09:00:58
上传
评论 1
收藏 196KB RAR 举报
温馨提示
成功把ucosii移植到51单片机上......
资源推荐
资源详情
资源评论
收起资源包目录
ucos-ii.rar (78个子文件)
myucos251_c51成功
myuCOS251_C51
uCosii_51_Uv2.Bak 3KB
uCosii_51.Opt 3KB
uCosii_51_Opt.Bak 3KB
OutPut
uCOS-II.lnp 812B
OS_MEM.obj 966B
OS_CORE.obj 10KB
OS_TASK.obj 2KB
OS_SEM.obj 966B
OS_Q.obj 948B
uCOS-II.plg 1KB
main.obj 2KB
OS_TIME.obj 2KB
STARTUP.obj 1KB
OS_CPU_C.obj 6KB
OS_CPU_A.obj 3KB
uCOS-II 17KB
uCOS-II.hex 11KB
OS_MBOX.obj 975B
Source
main.c 481B
INCLUDES.H 994B
uCosii
OS_MBOX.C 23KB
uCOS_II.C 1KB
uCOS_II.H 46KB
OS_TIME.C 10KB
OS_CPU_C.C 12KB
OS_MUTEX.C 27KB
OS_TASK.C 35KB
OS_CPU.H 4KB
OS_FLAG.C 44KB
OS_CPU_A.ASM 7KB
OS_SEM.C 19KB
OS_CORE.C 44KB
STARTUP.A51 5KB
OS_Q.C 34KB
STC89C51RC_RD_PLUS.H 3KB
OS_MEM.C 14KB
OS_CFG.H 8KB
STC89C51RC_RD_PLUS.H 3KB
uCosii_51.Uv2 3KB
myuCOS251_C51
uCosii_51_Uv2.Bak 3KB
uCosii_51.Opt 3KB
uCosii_51_Opt.Bak 3KB
OutPut
uCOS-II.lnp 300B
OS_MEM.obj 454B
OS_CORE.obj 9KB
OS_TASK.obj 2KB
OS_SEM.obj 454B
OS_Q.obj 436B
uCOS-II.plg 607B
main.obj 1KB
OS_TIME.obj 1KB
STARTUP.obj 855B
OS_CPU_C.obj 5KB
OS_CPU_A.obj 2KB
uCOS-II 17KB
uCOS-II.hex 11KB
OS_MBOX.obj 463B
Source
main.c 481B
INCLUDES.H 994B
uCosii
OS_MBOX.C 23KB
uCOS_II.C 1KB
uCOS_II.H 46KB
OS_TIME.C 10KB
OS_CPU_C.C 12KB
OS_MUTEX.C 27KB
OS_TASK.C 35KB
OS_CPU.H 4KB
OS_FLAG.C 44KB
OS_CPU_A.ASM 7KB
OS_SEM.C 19KB
OS_CORE.C 44KB
STARTUP.A51 5KB
OS_Q.C 34KB
STC89C51RC_RD_PLUS.H 3KB
OS_MEM.C 14KB
OS_CFG.H 8KB
STC89C51RC_RD_PLUS.H 3KB
uCosii_51.Uv2 3KB
共 78 条
- 1
资源评论
局外狗
- 粉丝: 64
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 51单片机学习(1)-软件keil下载
- 历届(第1-21届)希望杯数学竞赛初一试题及答案(最新整理).doc全国数学邀请赛(264页资料)
- 水滴.psd
- TokenPocket_V2.1.2_release.apk
- Apache-druid-kafka-rce.yaml
- 基于C#的ASP.NET数据库原理及应用技术课程指导平台的开发
- 基于ROS的智能车轨迹跟踪算法的仿真与设计源码运用PID跟踪算法.zip.zip
- Bug Bounty Tip - i春秋Self-XSS变废为宝的奇思妙想
- 1991-2015年全国初中化学竞赛复赛试题汇编(212页)(24年竞赛复赛真题).docx天原杯
- Apache Flink 未授权访问+远程代码执行.pdf
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功