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

📄 zy_if.c

📁 LPC1768工程模板
💻 C
📖 第 1 页 / 共 3 页
字号:
#endif                                                                  /*  OS_ARG_CHK_EN               */

    OSSemPend((OS_EVENT *)ulSem, (INT16U)((ulDly * OS_TICKS_PER_SEC + 999) / 1000), &ucErr);
    
    switch (ucErr) {
    
    case OS_ERR_PEVENT_NULL:
        return -ZY_PARAMETER_ERR;

    case OS_ERR_EVENT_TYPE:
        return -ZY_NO_FIND_OBJECT;

    case OS_TIMEOUT:
        return -ZY_TIME_OUT;

    case OS_NO_ERR:
        return 0;
    
    default:
        return -ZY_NOT_OK;
    }
}

/*********************************************************************************************************
** Function name:           zySemPost
** Descriptions:            发送信号量
** input parameters:        ulSem: zySemCreate返回值
**                          ucMod: 发送模式,一般为0
** output parameters:       none
** Returned value:          ZY_OK: 成功
**                          负数:  错误,绝对值参考zy_if.h
** Created by:              Chenmingji
** Created Date:            2009-07-23
**--------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
*********************************************************************************************************/
INT32S zySemPost (unsigned long ulSem, INT8U ucMod)
{
#if OS_ARG_CHK_EN == 0    
    /*
     *  参数检查
     */
    if (ulSem == 0) {
        return -ZY_PARAMETER_ERR;
    }
#endif                                                                  /*  OS_ARG_CHK_EN               */

    switch (OSSemPost((OS_EVENT *)ulSem)) {
    
    case OS_ERR_PEVENT_NULL:
        return -ZY_PARAMETER_ERR;

    case OS_ERR_EVENT_TYPE:
        return -ZY_NO_FIND_OBJECT;

    case OS_SEM_OVF:
        return -ZY_NOT_OK;

    case OS_NO_ERR:
        return 0;
    
    default:
        return -ZY_NOT_OK;
    }
}

/*********************************************************************************************************
** Function name:           zyMsgCreate
** Descriptions:            创建消息通道
** input parameters:        ulMsgs:    可以缓存消息数目
**                          ulMsgSize: 消息大小
** output parameters:       none
** Returned value:          消息通道标识
**                          0: 不成功
** Created by:              Chenmingji
** Created Date:            2009-07-23
**--------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
*********************************************************************************************************/
unsigned long zyMsgCreate (INT32S ulMsgs, INT32U ulMsgSize)
{
    INT32U       ulSize;                                                /*  需要的内存空间              */
    INT8U        ucErr;                                                 /*  错误代码                    */
    __ZY_IF_MSG *pimTmp1;
    INT8U       *pucTmp2;
    
    /*
     *  参数校验
     */
    if (ulMsgs == 0) {
        return 0;
    }

    if (ulMsgSize == 0) {
        return 0;
    }
    
    /*
     *  分配存储空间
     */
    ulSize  = sizeof(__ZY_IF_MSG) + ulMsgs * sizeof(void *) + ulMsgs * ulMsgSize;
    pucTmp2 = (INT8U *)zyHeapMalloc(ulSize);
    if (pucTmp2 == NULL) {
        return 0;
    }

    pimTmp1 = (__ZY_IF_MSG  *)pucTmp2;

    /*
     *  创建消息队列
     */
    pimTmp1->poeQ = OSQCreate((void **)(pucTmp2 + sizeof(__ZY_IF_MSG)), (INT16U)ulMsgs);
    if (pimTmp1->poeQ == NULL) {
        zyHeapFree(pucTmp2);
        return 0;
    }
    
    /*
     *  创建内存管理单元
     */
    pimTmp1->pomMsg = OSMemCreate((void *)(pucTmp2 + sizeof(__ZY_IF_MSG) * ulMsgs),
                                  (INT16U)ulMsgs,
                                  ulMsgSize,
                                  &ucErr
                                  );


    if (pimTmp1->pomMsg == NULL) {
        OSQDel(pimTmp1->poeQ, OS_DEL_ALWAYS, &ucErr);
        zyHeapFree(pucTmp2);
        return 0;
    }
    
    pimTmp1->ulMsgSize = ulMsgSize;

    return (unsigned long)pimTmp1;
}

/*********************************************************************************************************
** Function name:           zyMsgDel
** Descriptions:            删除消息通道
** input parameters:        ulMsg:  zyMsgCreate返回值
** output parameters:       none
** Returned value:          ZY_OK: 成功
**                          负数:  错误,绝对值参考zy_if.h
** Created by:              Chenmingji
** Created Date:            2009-07-23
**--------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
*********************************************************************************************************/
INT32S zyMsgDel (unsigned long ulMsg)
{
    __ZY_IF_MSG *pimThis;                                               /*  消息通道信息                */
    INT8U        ucErr;                                                 /*  错误代码                    */

    if (ulMsg == 0) {
        return -ZY_PARAMETER_ERR;
    }
    
    pimThis = (__ZY_IF_MSG *)ulMsg;

    if (pimThis->poeQ != NULL) {
        OSQDel(pimThis->poeQ, OS_DEL_ALWAYS, &ucErr);
    }
    zyHeapFree((void *)pimThis);
    return -ZY_NOT_OK;
}

/*********************************************************************************************************
** Function name:           zyMsgAccept
** Descriptions:            无等待获得消息
** input parameters:        ulMsg:  zyMsgCreate返回值
** output parameters:       pucMsg: 保存获得的消息
** Returned value:          ZY_OK:  成功
**                          负数:   错误,绝对值参考zy_if.h
** Created by:              Chenmingji
** Created Date:            2009-07-23
**--------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
*********************************************************************************************************/
INT32S zyMsgAccept (unsigned long ulMsg, INT8U *pucMsgRt)
{
    __ZY_IF_MSG *pimThis;                                               /*  消息通道信息                */
    void        *pvTmp;

    pimThis = (__ZY_IF_MSG *)ulMsg;

    /*
     *  参数检查
     */
    if (ulMsg == 0) {
        return -ZY_PARAMETER_ERR;
    }
#if OS_ARG_CHK_EN == 0    
    if (pimThis->poeQ == NULL) {
        return -ZY_PARAMETER_ERR;
    }
    if (pimThis->pomMsg == NULL) {
        return -ZY_PARAMETER_ERR;
    }
#endif                                                                  /*  OS_ARG_CHK_EN               */

    pvTmp = OSQAccept(pimThis->poeQ);
    if (pvTmp == NULL) {
        return -ZY_NOT_OK;
    }

    memcpy(pucMsgRt, pvTmp, (size_t)(pimThis->ulMsgSize));              /*  拷贝数据                    */
    OSMemPut(pimThis->pomMsg, pvTmp);                                   /*  归还缓冲区                  */
    
    return ZY_OK;
}

/*********************************************************************************************************
** Function name:           zyMsgPend
** Descriptions:            等待消息
** input parameters:        ulMsg:  zyMsgCreate返回值
**                          ulDly: 最长等待时间,毫秒为单位
** output parameters:       pucMsgRt: 保存获得的消息
** Returned value:          ZY_OK: 成功
**                          负数:  错误,绝对值参考zy_if.h
** Created by:              Chenmingji
** Created Date:            2009-07-23
**--------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
*********************************************************************************************************/
INT32S zyMsgPend (unsigned long ulMsg, INT8U *pucMsgRt, INT32U ulDly)
{
    __ZY_IF_MSG *pimThis;                                               /*  消息通道信息                */
    INT8U        ucErr;                                                 /*  错误代码                    */
    void        *pvTmp;

    pimThis = (__ZY_IF_MSG *)ulMsg;

    /*
     *  参数检查
     */
    if (ulMsg == 0) {
        return -ZY_PARAMETER_ERR;
    }
#if OS_ARG_CHK_EN == 0    
    if (pimThis->poeQ == NULL) {
        return -ZY_PARAMETER_ERR;
    }
    if (pimThis->pomMsg == NULL) {
        return -ZY_PARAMETER_ERR;
    }
#endif                                                                  /*  OS_ARG_CHK_EN               */

    pvTmp = OSQPend(pimThis->poeQ, (INT16U)((ulDly * OS_TICKS_PER_SEC + 999) / 1000), &ucErr);

    switch (ucErr) {
    
    case OS_ERR_PEVENT_NULL:
        return -ZY_PARAMETER_ERR;

    case OS_ERR_EVENT_TYPE:
        return -ZY_NO_FIND_OBJECT;

    case OS_TIMEOUT:
        return -ZY_TIME_OUT;

    case OS_NO_ERR:
        break;
    
    default:
        return -ZY_NOT_OK;
    }

    memcpy(pucMsgRt, pvTmp, (size_t)(pimThis->ulMsgSize));              /*  拷贝数据                    */
    OSMemPut(pimThis->pomMsg, pvTmp);                                   /*  归还缓冲区                  */
    
    return ZY_OK;
}

/*********************************************************************************************************
** Function name:           zyMsgPost
** Descriptions:            发送消息
** input parameters:        ulMsg:      zyMsgCreate返回值
**                          pucMsgSend: 要发送的消息
**                          ucMod:      发送模式,一般为0
** output parameters:       none
** Returned value:          ZY_OK: 成功
**                          负数:  错误,绝对值参考zy_if.h
** Created by:              Chenmingji
** Created Date:            2009-07-23
**--------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
*********************************************************************************************************/
INT32S zyMsgPost (unsigned long ulMsg, INT8U *pucMsgSend, INT8U ucMod)
{
    __ZY_IF_MSG *pimThis;                                               /*  消息通道信息                */
    INT8U        ucErr;                                                 /*  错误代码                    */
    void        *pvTmp;

    pimThis = (__ZY_IF_MSG *)ulMsg;

    /*
     *  参数检查
     */
    if (ulMsg == 0) {
        return -ZY_PARAMETER_ERR;
    }
#if OS_ARG_CHK_EN == 0    
    if (pimThis->poeQ == NULL) {
        return -ZY_PARAMETER_ERR;
    }
    if (pimThis->pomMsg == NULL) {
        return -ZY_PARAMETER_ERR;
    }
#endif                                                                  /*  OS_ARG_CHK_EN               */

    /*
     *  申请缓冲区
     */
    pvTmp = OSMemGet(pimThis->pomMsg, &ucErr);

    switch (ucErr) {

    case OS_MEM_INVALID_PMEM:
        return -ZY_NO_FIND_OBJECT;

    case OS_MEM_NO_FREE_BLKS:
        return -ZY_NO_MEMORY;

    case OS_NO_ERR:
        break;
    
    default:
        return -ZY_NOT_OK;
    }

    /*
     *  发送消息
     */
    memcpy(pvTmp, pucMsgSend, (size_t)(pimThis->ulMsgSize));            /*  拷贝数据                    */
    ucErr = OSQPostOpt(pimThis->poeQ, pvTmp, ucMod);                    /*  保存消息存储位置            */
    
    if (ucErr == OS_NO_ERR) {
        return ZY_OK;
    }

    OSMemPut(pimThis->pomMsg, pvTmp);                                   /*  归还缓冲区                  */

    switch (ucErr) {
    
    case OS_ERR_PEVENT_NULL:
        return -ZY_PARAMETER_ERR;

    case OS_ERR_EVENT_TYPE:
        return -ZY_NO_FIND_OBJECT;

    case OS_Q_FULL:
        return -ZY_NO_MEMORY;

    default:
        return -ZY_NOT_OK;
    }
}

/*********************************************************************************************************
  END FILE
*********************************************************************************************************/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -