高通 RCEVT 框架简介

RCEVT 框架是一种基于字符串的信号传递机制,适用于任何操作系统。
该框架可用于在RCINIT 任务与序列组中启动的其他任务之间传递信号。
这些信号是字符串,任何任务都可以等待 RCEVT 事件。
此外,如果涉及的任务具有正确的名称,任何任务都可以发出事件信号。

一、将 RCEVT 用于 POSIX

包括 rcevt_posix.h 文件,该文件提供对 RCEVT API 和 NHLOS 内核信令 API 的访问。

  1. 注册事情,在C代码中添加如下命令:
#include <rcevt_posix.h>

pthread_mutex_t posix_mutex;
pthread_mutexattr_t posix_mutexattr;
pthread_cond_t posix_cond;
pthread_condattr_t posix_condattr;
RCEVT_SIGEX_SIGPOSIX rcevt_sigex;
pthread_mutexattr_init(&posix_mutexattr);
pthread_mutex_init(&posix_mutex, &posix_mutexattr);
pthread_mutexattr_destroy(&posix_mutexattr);
pthread_condattr_init(&posix_condattr);
pthread_cond_init(&posix_cond, &posix_condattr);
pthread_condattr_destroy(&posix_condattr);
rcevt_sigex.mutex_p = &posix_mutex;
rcevt_sigex.cond_p = &posix_cond;
if (RCEVT_NULL == rcevt_register_sigex_name(RCEVT_EVENTNAME,
RCEVT_SIGEX_TYPE_SIGPOSIX, &rcevt_sigex))
{
MSG(“event register); // handle error
}
// utilization of specific NHLOS convenience API wrappers is suggested
  1. 等待事件,添加以下代码
pthread_mutex_lock(&posix_mutex);
pthread_cond_wait(&posix_cond, &posix_mutex);
pthread_mutex_unlock(&posix_mutex);
MSG(“event handler” );
  1. 要发出事件信号,添加以下代码
if (RCEVT_NULL == rcevt_signal_name(RCEVT_EVENTNAME))
{
	MSG(“event signal” ); // handle error
}
  1. 要取消注册事件,添加以下代码
if (RCEVT_NULL == rcevt_unregister_sigex_name(RCEVT_EVENTNAME, RCEVT_SIGEX_TYPE_SIGPOSIX, &rcevt_sigex))
{
	MSG(“event unregister” ); // handle error
}
pthread_mutex_destroy(&posix_mutex);
pthread_cond_destroy(&posix_cond);

二、将 RCEVT 用于 QuRT

包括 rcevt_qurt.h 文件,该文件提供对 RCEVT API 和 NHLOS 内核信令 API 的访问。

  1. 要注册一个事件,在头文件中添加以下代码
qurt_anysignal_t qurt_signal;
RCEVT_SIGEX_SIGQURT rcevt_sigex;
qurt_anysignal_init(&qurt_signal);
rcevt_sigex.signal = &qurt_signal;
rcevt_sigex.mask = RCEVT_QURT_SIGNAL_MASK;
if (RCEVT_NULL == rcevt_register_sigex_name(RCEVT_EVENTNAME, RCEVT_SIGEX_TYPE_SIGQURT, &rcevt_sigex))
{
	MSG(“event register); // handle error
}
// utilization of specific NHLOS convenience API wrappers is suggested
  1. 要等待事件,添加以下代码
unsigned int recv = qurt_anysignal_wait(&qurt_signal,
RCEVT_QURT_SIGNAL_MASK);
if (0 == (recv & RCEVT_QURT_SIGNAL_MASK))
{
	MSG(“event wait” ); // handle error
}
else
{
	MSG(“event handler” );
}
  1. 要发出事件信号,添加以下代码
if (RCEVT_NULL == rcevt_signal_name(RCEVT_EVENTNAME))
{
	MSG(“event signal” ); // handle error
}
  1. 要取消注册事件,添加以下代码
if (RCEVT_NULL == rcevt_unregister_sigex_name(RCEVT_EVENTNAME, RCEVT_SIGEX_TYPE_SIGQURT, &rcevt_sigex))
{
	MSG(“event unregister” ); // handle error
}
qurt_anysignal_destroy(&qurt_signal);

三、将 RCEVT 用于 REX

包括 rcevt_rex.h 文件,该文件提供对 RCEVT API 和 NHLOS 内核信令 API 的访问。
使用QuRT 和 DAL API,而不是 REX API。

  1. 要注册一个事件,在头文件中添加以下代码
RCEVT_SIGEX_SIGREX rcevt_sigex;
rcevt_sigex.signal = rex_self();
rcevt_sigex.mask = RCEVT_REX_SIGNAL_MASK;
if (RCEVT_NULL == rcevt_register_sigex_name(RCEVT_EVENTNAME,RCEVT_SIGEX_TYPE_SIGREX, &rcevt_sigex))
{
	MSG(“event register); // handle error
}
// utilization of specific NHLOS convenience API wrappers is suggested
  1. 要等待事件,添加以下代码
rex_sigs_type recv = rex_wait(RCEVT_REX_SIGNAL_MASK);
if (0 == (recv & RCEVT_REX_SIGNAL_MASK))
{
	MSG(“event wait” ); // handle error
}
else
{
	MSG(“event handler” );
}
  1. 要发出事件信号,添加以下代码
if (RCEVT_NULL == rcevt_signal_name(RCEVT_EVENTNAME))
{
	MSG(“event signal” ); // handle error
}
  1. 要取消注册事件,添加以下代码
if (RCEVT_NULL == rcevt_unregister_sigex_name(RCEVT_EVENTNAME, RCEVT_SIGEX_TYPE_SIGREX, &rcevt_sigex))
{
	MSG(“event unregister” ); // handle error
}
#To signal an event, add this code:
if (RCEVT_NULL == rcevt_signal_name(RCEVT_EVENTNAME))
{
	MSG(“event signal” ); // handle error
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小馋喵星人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值