请问rt-thread信号(signal)如何使用?

发布于 2021-02-05 12:16:11

rt_thread_kill函数和rt_signal_wait函数如何配套使用?除了SIGUSR1和SIGUSR2外,请问这个rt_thread_kill函数可以发送自定义的信号吗?
还有这个rt_signal_wait(const rt_sigset_t *set, rt_siginfo_t *si, rt_int32_t timeout)函数如何填写参数,大神能给个例程参考参考吗?
官方用的是这个rt_signal_install函数,没有使用过rt_signal_wait函数。
下面代码是基于我个人理解写的,但是线程1无法等到该信号,应该是使用方法不对。

#include <rtthread.h>

#define THREAD_PRIORITY         25
#define THREAD_STACK_SIZE       512
#define THREAD_TIMESLICE        5

static rt_thread_t tid1;

static const rt_sigset_t my_signal = 111;//自定义的信号
static rt_siginfo_t *si;

static void thread1_entry(void *parameter)
{
    rt_signal_wait(&my_signal, si, RT_WAITING_FOREVER);
    rt_kprintf("si = %p\n", si);
}

void signal_sample(void)
{
    tid1 = rt_thread_creat("thread1",
                            thread1_entry,
                            RT_NULL,
                            THREAD_STACK_SIZE,
                            THREAD_PRIORITY,
                            THREAD_TIMESLICE
                            );
    if(tid1 != RT_NULL)
    {
        rt_thread_startup(tid1);
    }
    
    rt_thread_mdelay(500);
    
    rt_thread_kill(tid1, my_signal);
}

MSH_CMD_EXPORT(signal_sample, signal sample);

查看更多

关注者
0
被浏览
244
2 个回答
我夏了夏天
我夏了夏天 认证专家 2021-02-05

信号这块应该是要在微内核里使用,如果你是用宏内核版本,不推荐使用信号功能。

Alone_Tomcat
Alone_Tomcat 2021-02-24

首先static const rt_sigset_t my_signal = 111;赋值时需要采用系统中已经定义的值,例如SIGUSR1。
另外rt_siginfo_t *si;定义完需要赋值,否则传下去是空指针会返回错误。解决如下:

si= (rt_siginfo_t *)rt_malloc(sizeof(rt_siginfo_t));
rt_signal_wait(&my_signal, si, RT_WAITING_FOREVER);

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览