K230核间通讯API参考
1. 概述
1.1 概述
该文档描述了K230异构核间通讯的相关内容。
1.1.1 核间通讯实现原理
- 共享内存用于大小核发送通信消息的具体内容
- 共享内存管理用于标识通信消息的属性例如地址,大小,端口号等
- Mailbox通过中断方式实现大小核发送消息后的通知机制
1.1.2 内存空间使用
目前大小核使用的数据共享内存区域设计共1M空间,对于参与通讯的一方来说发送和接收各占512KB的空间大小。用于维护各个核状态的共享内存区域为4KB。
1.2 功能描述
1.2.1 IPCMSG
IPCMSG是K230大小核在用户态进行通讯的组件,主要用于发送控制类消息。该模块包括服务添加删除,消息创建删除,断开连接,发送消息等功能。支持三种消息发送方式,发送异步消息,发送同步消息,以及发送不需要对方回复的消息。其中同步消息支持超时机制,用户调用API时可自定义设置超时时间。需要得到回复的消息,在发出60秒之后才收到回复消息的话,该回复消息会被丢弃。
1.2.2 DATAFIFO
DATAFIFO是K230大小核在用户态进行大量数据交互(例如编码数据)时,使用的核间通讯组件。内部主要使用共享内存来完成数据的交互,数据传递的是指针,不会拷贝数据的内容,数据的收发通知依靠线程轮询来实现。
DATAFIFO 主要包含通路的打开、关闭、数据的写入和读出,以及其他控制命令
2. API 参考
2.1 IPCMSG
该功能模块提供以下API:
- kd_ipcmsg_add_service
- kd_ipcmsg_del_service
- kd_ipcmsg_try_connect
- kd_ipcmsg_connect
- kd_ipcmsg_disconnect
- kd_ipcmsg_is_connect
- kd_ipcmsg_send_only
- kd_ipcmsg_send_async
- kd_ipcmsg_send_sync
- kd_ipcmsg_run
- kd_ipcmsg_create_message
- kd_ipcmsg_create_resp_message
- kd_ipcmsg_destory_message
2.1.1 kd_ipcmsg_add_service
【描述】
添加服务
【语法】
k_s32 kd_ipcmsg_add_service(const k_char* pszServiceName, const k_ipcmsg_connect_s* pstConnectAttr);
【参数】
参数名称 | 描述 | 输入/输出 |
---|---|---|
pszServiceName | 服务的名称指针。。 | 输入 |
pstConnectAttr | 连接对端服务器的属性结构体。 | 输入 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功。 |
非 0 | 失败,其值为错误码 |
【芯片差异】
无
【需求】
- 头文件:k_comm_ipcmsg.h k_ipcmsg.h
- 库文件:libipcmsg.a
【注意】
Service 可以添加多个,但不同的 service 不能使用相同的端口号,client 跟 service 是通
过相同的端 口号来通信的,因此一个 service能对应一个 client
【举例】
无
【相关主题】
2.1.2 kd_ipcmsg_del_service
【描述】
删除服务
【语法】
k_s32 kd_ipcmsg_del_service(const k_char* pszServiceName);
【参数】
参数名称 | 描述 | 输入/输出 |
---|---|---|
pszServiceName | 服务的名称指针。服务名称最大长度: K_IPCMSG_MAX_SERVICENAME_LEN。 | 输入 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功。 |
非 0 | 失败,其值为错误码 |
【芯片差异】
无
【需求】
- 头文件:k_comm_ipcmsg.h k_ipcmsg.h
- 库文件:libipcmsg.a
【注意】
无
【举例】
无
【相关主题】
2.1.3 kd_ipcmsg_try_connect
【描述】
非阻塞方式建立连接
【语法】
k_s32 kd_ipcmsg_try_connect(k_s32* ps32Id, const k_char* pszServiceName, k_ipcmsg_handle_fn_ptr pfnMessageHandle);
【参数】
参数名称 | 描述 | 输入/输出 |
---|---|---|
ps32Id | 消息通信 ID 指针。 | 输出 |
pszServiceName | 服务名称指针。 | 输入 |
pfnMessageHandle | 消息处理回调函数。 | 输入 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功。 |
非 0 | 失败,其值为错误码 |
【芯片差异】
无
【需求】
- 头文件:k_comm_ipcmsg.h k_ipcmsg.h
- 库文件:libipcmsg.a
【注意】
无
【举例】
无
【相关主题】
2.1.4 kd_ipcmsg_connect
【描述】
阻塞方式建立连接
【语法】
k_s32 kd_ipcmsg_connect(k_s32* ps32Id, const k_char* pszServiceName, k_ipcmsg_handle_fn_ptr pfnMessageHandle);
【参数】
参数名称 | 描述 | 输入/输出 |
---|---|---|
ps32Id | 消息通信 ID 指针。 | 输出 |
pszServiceName | 服务名称指针。 | 输入 |
pfnMessageHandle | 消息处理函数。 | 输入 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功。 |
非 0 | 失败,其值为错误码 |
【芯片差异】
无
【需求】
- 头文件:k_comm_ipcmsg.h k_ipcmsg.h
- 库文件:libipcmsg.a
【注意】
无
【举例】
无
【相关主题】
2.1.5 kd_ipcmsg_disconnect
【描述】
断开连接
【语法】
k_s32 kd_ipcmsg_disconnect(k_s32 s32Id);
【参数】
参数名称 | 描述 | 输入/输出 |
---|---|---|
s32Id | 消息通信 ID。 | 输入 |
【返回值】
返回值 | 描述 |
---|---|
0 | 成功。 |
非 0 | 失败,其值为错误码 |
【芯片差异】
无
【需求】
- 头文件:k_comm_ipcmsg.h k_ipcmsg.h
- 库文件:libipcmsg.a
【注意】
无
【举例】
无
【相关主题】