完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
对,你没看错。作为一款 RTOS,RT-Thread 提供了 Linux 才有的信号机制。其他常用的 RTOS 没有提供信号机制。 在 Linux 中,信号作为进程间通信的一种方式。而在 RT-Thread 中,仿照类似的原理,实现信号机制,用于线程(任务)间通信。 本篇文章,我们来学习 RT-Thread 信号的相关内容,以及如何进行管理和使用。 信号的工作机制 同 Linux 中的信号类似,是一种软件层次的中断。 在 RT-Thread 中,信号用作异步通信。POSIX 标准定义了很多种信号,在 RT-Thread 中,应用程序能够使用的信号只有两种: SIGUSR1 SIGUSR2 一个线程不需要任何操作来就可以等待信号的到达。线程对信号的处理分为三类: 类似中断处理,设定信号处理函数。 忽略信号,不进行处理 默认处理,采用系统默认的处理方式 线程接收到信号时,可能处于两种状态: 正在处于挂起状态,此时线程进入就绪状态去处理对应的信号 处于运行状态,系统会创建新的栈空间去处理对应的信号 管理信号 在 RT-Thread 中,对信号的操作包括以下几种: 安装信号、阻塞信号、解除阻塞、信号发送、信号等待。 1.安装信号 安装信号,主要用来确定信号值以及处理信号所采取的动作之间的映射。 RT-Thread 提供的安装信号接口函数如下: 参数 signo 为信号值;handler 为对信号的处理方式函数。 安装成功,返回信号之前的处理函数指针;安装错误,则返回 SIG_ERR。 其中,rt_sighandler_t 的定义如下,是信号处理函数的函数指针类型。 2.阻塞信号 阻塞信号,也就是屏蔽信号。若信号被阻塞,则该信号将不会传递为安装此信号的线程。 函数原型如下: 3.解除信号阻塞 线程安装好某个信号后,需要对该信号解除阻塞,线程才能够接收到该信号。 RT-Thread 提供的解除信号函数接口如下: 4.发送信号 一个线程给其他线程发送信号的函数接口如下: 参数 tid 为接收信号的线程句柄;sig 为发送的信号值。 发送成功,返回 RT_EOK;发送失败,则返回 -RT_EINVAL。 5.等待信号 线程可以选择挂起等待某个信号。 参数 set 指定等待的信号;si 指向存储等待信号信息的指针;timeout 等待的超时时间。 函数返回 RT_EOK 说明信号到达,接收成功。等待超时,返回 -RT_ETIMEOUT。参数错误,则返回 -RT_EINVAL。 实战演练 我们用一个示例来演示如何使用 RT-Thread 信号机制。 编译、运行结果如下 小结 至此,RT-Thread 提供的线程间通信方式全部介绍完毕: 邮箱 消息队列 信号 |
|
相关推荐
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
【Vision Board创客营连载体验】RA8D1-Vision Board上OSPI-Flash实践
697 浏览 0 评论
I.MX6ULL-飞凌 ElfBoard ELF1板卡- 应用层更改引脚复用的方法
3461 浏览 0 评论
1463 浏览 0 评论
【英飞凌PSoC 6 RTT开发板试用】串口测试标准输入输出重定向
1141 浏览 0 评论
5020 浏览 0 评论
56839 浏览 21 评论
【参与有奖】激扬代码,千元现金!RT-Thread主题征文大赛
57188 浏览 88 评论
野火 ISO STM32资料合集(程序、原理图、项目初高级篇)
18311 浏览 47 评论
280680 浏览 76 评论
51565 浏览 31 评论
16060 浏览 53 评论
13311 浏览 50 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-5-15 19:25 , Processed in 0.698953 second(s), Total 65, Slave 48 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号