void send_task(void* pdata) { INT8U return_code = OS_NO_ERR; INT32U msg = 0; OS_Q_DATA queue_data; while (1) { return_code = OSQQuery(msgqueue, &queue_data); alt_ucosii_check_return_code(return_code); if(queue_data.OSNMsgs < MSG_QUEUE_SIZE) /*Check the number of messages*/ { /*in the message queue*/ return_code = OSQPostOpt(msgqueue, (void *)&msg, OS_POST_OPT_BROADCAST); alt_ucosii_check_return_code(return_code); msg++; number_of_messages_sent++; } else { OSTimeDlyHMSM(0, 0, 1, 0); } } }
/********************************************************************************************************* ** 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; } }