📄 zy_if.c
字号:
#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 + -