1 /******************************************************************************/
3 /* src/lib/libMk/MkMsg.c */
5 /* Copyright (C) 2018-2019 Mochi. */
7 /******************************************************************************/
8 /******************************************************************************/
10 /******************************************************************************/
15 #include <kernel/message.h>
18 /******************************************************************************/
20 /******************************************************************************/
21 /******************************************************************************/
24 * @details 指定したタスクからのメッセージまたは全てのタスクからのメッセー
27 * @param[in] rcvTaskId 受信待ちタスクID
28 * - MK_TASKID_NULL 全てのタスク
29 * - MK_TASKID_NULL以外 タスク指定
30 * @param[out] *pBuffer メッセージバッファ
31 * @param[in] size メッセージバッファサイズ
32 * @param[out] *pSrcTaskId 送信元タスクID
33 * @param[out] *pErrNo エラー番号
34 * - MK_MSG_ERR_NONE エラー無し
35 * - MK_MSG_ERR_NO_EXIST 存在しないタスクID指定
36 * - MK_MSG_ERR_PROC_TYPE 非隣接プロセスタイプ
37 * - MK_MSG_ERR_NO_MEMORY メモリ不足
39 * @return 受信したメッセージサイズを返す。
40 * @retval MK_MSG_RET_FAILURE 失敗
41 * @retval MK_MSG_RET_FAILURE以外 受信メッセージサイズ
43 /******************************************************************************/
44 int32_t MkMsgReceive( MkTaskId_t rcvTaskId,
47 MkTaskId_t *pSrcTaskId,
50 volatile MkMsgParam_t param;
53 param.funcId = MK_MSG_FUNCID_RECEIVE;
54 param.errNo = MK_MSG_ERR_NONE;
55 param.ret = MK_MSG_RET_FAILURE;
56 param.rcv.src = rcvTaskId;
57 param.rcv.pBuffer = pBuffer;
58 param.rcv.size = size;
61 __asm__ __volatile__ ( "mov esi, %0\n"
65 "i" ( MK_CONFIG_INTNO_MESSAGE )
69 if ( pErrNo != NULL ) {
73 *pErrNo = param.errNo;
77 if ( pSrcTaskId != NULL ) {
80 *pSrcTaskId = param.rcv.src;
87 /******************************************************************************/
90 * @details 指定したタスクにメッセージを送信する。送信先タスクがメッセージ
93 * @param[in] dst 送信元タスク
94 * @param[in] *pMsg メッセージ
96 * @param[out] *pErrNo エラー番号
97 * - MK_MSG_ERR_NONE エラー無し
98 * - MK_MSG_ERR_SIZE_OVER 送信サイズ超過
99 * - MK_MSG_ERR_NO_EXIST 存在しないタスクID指定
100 * - MK_MSG_ERR_PROC_TYPE 非隣接プロセスタイプ
101 * - MK_MSG_ERR_NO_MEMORY メモリ不足
104 * @retval MK_MSG_RET_SUCCESS 成功
105 * @retval MK_MSG_RET_FAILURE 失敗
107 /******************************************************************************/
108 int32_t MkMsgSend( MkTaskId_t dst,
113 volatile MkMsgParam_t param;
116 param.funcId = MK_MSG_FUNCID_SEND;
117 param.errNo = MK_MSG_ERR_NONE;
118 param.ret = MK_MSG_RET_FAILURE;
120 param.snd.pMsg = pMsg;
121 param.rcv.size = size;
124 __asm__ __volatile__ ( "mov esi, %0\n"
128 "i" ( MK_CONFIG_INTNO_MESSAGE )
132 if ( pErrNo != NULL ) {
136 *pErrNo = param.errNo;
143 /******************************************************************************/