第一个函数(获得信号量、互斥量、邮箱或者队列名字的函数)的流程图和分析图如下所示:

/*$PAGE*/
/*
*********************************************************************************************************
*                         GET THE NAME OF A SEMAPHORE, MUTEX, MAILBOX or QUEUE
*                           获得信号量、互斥量、邮箱或队列的名称
* Description: This function is used to obtain the name assigned to a semaphore, mutex, mailbox or queue.
*该功能用来获得信号量、互斥量、邮箱或者队列的名称
* Arguments  : pevent    is a pointer to the event group.  'pevent' can point either to a semaphore,
*   参数                 a mutex, a mailbox or a queue.  Where this function is concerned, the actual
*                        type is irrelevant.
*                       pevent是一个指向事件组的指针,也可以指向信号量、互斥量、邮箱或队列。在功能方面,实际的类型无关
*              pname     is a pointer to a pointer to an ASCII string that will receive the name of the semaphore,
*                        mutex, mailbox or queue.
*                       pname是一个指向代表信号量、互斥量、邮箱或队列名称的ASCII码字符串的指针
*              perr      is a pointer to an error code that can contain one of the following values:
*                       perr是一个指向错误码的指针。错误码包括以下几种:
*                        OS_ERR_NONE                if the name was copied to 'pname' --名字被复制到pname,无错误
*                        OS_ERR_EVENT_TYPE          if 'pevent' is not pointing to the proper event
*                                                   control block type.  --pevent指向的事件控制块(ECB)类型错误
*                        OS_ERR_PNAME_NULL          You passed a NULL pointer for 'pname'--pname指针为空
*                        OS_ERR_PEVENT_NULL         if you passed a NULL pointer for 'pevent'--pevent指针为空指针
*                        OS_ERR_NAME_GET_ISR        if you are trying to call this function from an ISR --调用中断函数
*
* Returns    : The length of the string or 0 if the 'pevent' is a NULL pointer.
返回值:当pevent不是空指针时返回0或者字符串长度
*********************************************************************************************************
*/#if (OS_EVENT_EN) && (OS_EVENT_NAME_EN > 0u)   /*如果可以产生事件并且可以给事件命名*/
INT8U  OSEventNameGet(OS_EVENT   *pevent,       /*获得时间名称函数(指向事件组的指针,事件名称,错误码指针)*/INT8U     **pname,                           INT8U      *perr)
{INT8U      len;
#if OS_CRITICAL_METHOD == 3u                     /* Allocate storage for CPU status register 中断类型为3,断点*/OS_CPU_SR  cpu_sr = 0u;
#endif#ifdef OS_SAFETY_CRITICAL                     /*定义安全中断*/if (perr == (INT8U *)0) {                   /*如果错误码为0.调用安全中断异常函数OS_SAFETY_CRITICAL_EXCEPTION()*/OS_SAFETY_CRITICAL_EXCEPTION();}
#endif#if OS_ARG_CHK_EN > 0u                         /*检查参数*/if (pevent == (OS_EVENT *)0) {               /* Is 'pevent' a NULL pointer? 如果指向事件的指针为空 */*perr = OS_ERR_PEVENT_NULL;              /*将错误码指针设为OS_ERR_PEVENT_NULL*/return (0u);                      }if (pname == (INT8U **)0) {                   /* Is 'pname' a NULL pointer? 如果pname为空指针  */*perr = OS_ERR_PNAME_NULL;             /*将错误码指针设为OS_ERR_PNAME_NULL*/return (0u);}
#endifif (OSIntNesting > 0u) {                     /* See if trying to call from an ISR 如果嵌套中断>0,即检测是否要调用中断函数*/*perr = OS_ERR_NAME_GET_ISR;           /*将错误码指针设为 OS_ERR_NAME_GET_ISR*/return (0u);}switch (pevent->OSEventType) {              /*如果pevent指向的是事件类型*/case OS_EVENT_TYPE_SEM:                     /*OS_EVENT_TYPE_SEM,OS_EVENT_TYPE_MUTEX,OS_EVENT_TYPE_MBOX,OS_EVENT_TYPE_Q四个+*/case OS_EVENT_TYPE_MUTEX:                  /*+事件类型处理为空*/case OS_EVENT_TYPE_MBOX:case OS_EVENT_TYPE_Q:break;default:                                   /*默认情况下,将错误码设置成OS_ERR_EVENT_TYPE*/*perr = OS_ERR_EVENT_TYPE;return (0u);}//====以上是各种if下的情况,下面是该函数主体===//OS_ENTER_CRITICAL();                      /*关中断*/*pname = pevent->OSEventName;                /*将事件名字赋给pname指针*/len = OS_StrLen(*pname);                 /*得到名字的长度len*/OS_EXIT_CRITICAL();                           /*开中断*/*perr = OS_ERR_NONE;                        /*将错误码设置为OS_ERR_NONE,即无错误*/return (len);                             /*返回len*/
}
#endif
/*$PAGE*/
/*
*********************************************************************************************************
*                         ASSIGN A NAME TO A SEMAPHORE, MUTEX, MAILBOX or QUEUE
*                           给信号量、互斥量、邮箱或队列设置名字
* Description: This function assigns a name to a semaphore, mutex, mailbox or queue.
*描述:该功能是给信号量、互斥量、邮箱或队列设置名字
* Arguments  : pevent    is a pointer to the event group.  'pevent' can point either to a semaphore,
*                        a mutex, a mailbox or a queue.  Where this function is concerned, it doesn't
*                        matter the actual type.
*                       pervent是指向事件组的指针,也可以指向信号量、互斥量、邮箱或队列。
*              pname     is a pointer to an ASCII string that will be used as the name of the semaphore,
*                        mutex, mailbox or queue.
*                       pname是一个指向代表信号量、互斥量、邮箱或队列名称的ASCII码字符串的指针
*              perr      is a pointer to an error code that can contain one of the following values:
*                       perr是一个指向错误码的指针。错误码包括以下几种:
*                        OS_ERR_NONE                if the requested task is resumed--所请求的任务是恢复
*                        OS_ERR_EVENT_TYPE          if 'pevent' is not pointing to the proper event
*                                                   control block type.--pevent没有正确指向事件控制块类型
*                        OS_ERR_PNAME_NULL          You passed a NULL pointer for 'pname'--pname指针为空
*                        OS_ERR_PEVENT_NULL         if you passed a NULL pointer for 'pevent'--pevent为空指针
*                        OS_ERR_NAME_SET_ISR        if you called this function from an ISR--中断
*
* Returns    : None--无返回值
*********************************************************************************************************
*/#if (OS_EVENT_EN) && (OS_EVENT_NAME_EN > 0u)   /*如果可以生成时间并且可以设置名称*/
void  OSEventNameSet(OS_EVENT  *pevent,         /*调用设置名称函数(指向事件组的指针,指向名称的指针,指向错误码的指针)*/INT8U     *pname,INT8U     *perr)
{
#if OS_CRITICAL_METHOD == 3u                     /* Allocate storage for CPU status register 将中断类型设置为3  */OS_CPU_SR  cpu_sr = 0u;
#endif#ifdef OS_SAFETY_CRITICAL                     /*定义安全中断*/if (perr == (INT8U *)0) {                   /*如果错误码为0*/OS_SAFETY_CRITICAL_EXCEPTION();          /*调用安全中断异常函数OS_SAFETY_CRITICAL_EXCEPTION()*/}
#endif#if OS_ARG_CHK_EN > 0u                         /*检查参数*/if (pevent == (OS_EVENT *)0) {               /* Is 'pevent' a NULL pointer? --pevent是空指针么? */*perr = OS_ERR_PEVENT_NULL;                /*将错误码设为OS_ERR_PEVENT_NULL*/return;                                 /*无返回值*/}if (pname == (INT8U *)0) {                   /* Is 'pname' a NULL pointer? --pname是空指针么? */*perr = OS_ERR_PNAME_NULL;              /*将错误码设为OS_ERR_PNAME_NULL*/return;                                  /*无返回值*/}
#endifif (OSIntNesting > 0u) {                     /* See if trying to call from an ISR  检查是否要进行中断 */*perr = OS_ERR_NAME_SET_ISR;           /*将错误码设为OS_ERR_NAME_SET_ISR*/return;                                    /*无返回值*/}switch (pevent->OSEventType) {case OS_EVENT_TYPE_SEM:case OS_EVENT_TYPE_MUTEX:case OS_EVENT_TYPE_MBOX:case OS_EVENT_TYPE_Q:break;default:*perr = OS_ERR_EVENT_TYPE;return;}OS_ENTER_CRITICAL();                        /*关中断*/pevent->OSEventName = pname;             /*设置名称*/OS_EXIT_CRITICAL();                         /*开中断*/*perr = OS_ERR_NONE;                        /*将错误码设置为OS_ERR_NONE*/
}
#endif


												

OS_CORE.C(1)相关推荐

  1. OS_CORE.C(11)

    OS_SchedNew(void)找到将要运行的最高优先级任务函数 和任务调度函数OS_Sched(void): /* **************************************** ...

  2. OS_CORE.C(10)

    今天看os_core.c文件中的各种初始化函数. OS_EventWaitListInit(OS_EVENT *pevent)初始化事件控制块的等待列表: /*$PAGE*/ /*2018/2/8 * ...

  3. OS_CORE.C(总结)

    在内核的功能模块中,重点函数为: static  void  OS_InitEventList(void);/*初始化事件列表*/ static  void  OS_InitMisc(void);/* ...

  4. OS_CORE.C(9)

    本篇介绍以下几个函数: OSVersion()获得版本号函数. OS_Dummy()虚拟函数. OS_EventTaskRdy (OS_EVENT *pevent, void *msg, INT8U ...

  5. OS_CORE.C(8)

    本篇介绍的是OSStart()函数和OSStatInit()函数和OSTimeTick()函数. OSStart()多任务开始函数: /*$PAGE*/ /* ******************** ...

  6. OS_CORE.C(6)

    先介绍一下优先级反转的相关知识: 优先级翻转是当一个高优先级任务通过信号量机制访问共享资源时,该信号量已被一低优先级任务占有,因此造成高优先级任务被许多具有较低优先级任务阻塞,实时性难以得到保证. 例 ...

  7. OS_CORE.C(5)

    /*$PAGE*/ /* *************************************************************************************** ...

  8. OS_CORE.C(3)

    OSTCBCur->OSTCBStat |= events_stat | /* Resource not available, ...无法获得资源的话就将其挂起 */OS_STAT_MULTI; ...

  9. OS_CORE.C(7)

    本篇介绍的是调度器的上锁和解锁: 调度器上锁函数OSSchedlock()的功能是用于禁止任务调度,使任务保持对CPU的控制权. 调度器开锁函数OSSchedUnlock()的功能是解除对任务调度的禁 ...

最新文章

  1. 在 Linux 系统中安装Load Generator ,并在windows 调用
  2. HDFS设计思路,HDFS使用,查看集群状态,HDFS,HDFS上传文件,HDFS下载文件,yarn web管理界面信息查看,运行一个mapreduce程序,mapreduce的demo
  3. 操作系统上机作业--使用系统调用实现mycp
  4. 谷歌返华或联手腾讯;华为否认5G专利收费;滴滴外挂让车费翻倍 | 极客头条...
  5. Delphi中Chrome Chromium、Cef3学习笔记(三)
  6. 华栖云科技图形图像视音频算法岗面试经验
  7. 25.Linux/Unix 系统编程手册(上) -- 进程的终止
  8. ConcurrentHashMap(JDK1.8)的源码解析
  9. vivo解bl锁_黔隆科技刷机教程酷派Y82820忘记密码刷机解锁降级救砖解屏幕锁账户锁教程...
  10. Devart Excel Addins 2.5.660 插件 Crack
  11. 解决:视频中有噪声(电流声)怎么办的问题(简单实用高效的视频降噪方法)
  12. Linux的触屏手势软件安装,linux触摸板手势
  13. 2019年新一年目标
  14. vue3+ts+vite,使用高德api实现搜索城市展示在地图上
  15. tf.transpose()
  16. 经纬度转换XY坐标,并计算距离
  17. 解决Error: EPERM: operation not permitted, mkdir
  18. Verilog——Chipscope简单实用的使用方法(基于ISE14.7 )
  19. C# 成员默认访问权限(public、private、protected、internal)
  20. N-炔丙基马来酰亚胺N-Propargylmaleimide,Propargyl-Maleimide,209395-32-4能够简单有效地将末端炔基并入抗体、含半胱氨酸的肽或其他含硫醇的分子

热门文章

  1. Latex学习(脚注)
  2. Centos 7.4 安装ipython和mysql-python遇到的问题
  3. Webpack入门教程三
  4. Apache OpenWebBeans 发布适用于 Java EE 微服务的 Meecrowave 服务器 1.0
  5. 欧盟出台首个网络与信息安全指导性法律
  6. 实用windows short cut
  7. 中国爬虫违法违规案例汇总
  8. Java 线程池详解
  9. linux多线程编写哲学家,Linux系统编程(三) ------ 多线程编程
  10. list修改元素的值_第115天:Python 到底是值传递还是引用传递