随想录(rtos中的signal)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】
从2012-2017年这段时间,自己对rtos很痴迷。市面上能学习的rtos,一般都会把代码拿过来看一看,学一学怎么实现的。要说现在linux和rtos,基本上应用场景还是分的很清楚的。中低频率的soc,但是对实时性要求很高的场景一般用rtos,其他则用linux。然而很多场景下,人们希望复用linux的代码,这就存在一些问题了。signal就是其中一个。
由于较早就比较熟悉rtthread,所以这次在github上看到rtos下signal的实现方法,还是觉得有一些吃惊。原来代码的地址在这,https://github.com/RT-Thread/rt-thread/blob/master/src/signal.c。相信有些经验的同学都可以看懂。
1、注册signal函数
rt_signal_install函数
2、发送signal
rt_thread_kill
3、具体signal发送过程
_signal_deliver
else if (!((tid->stat & RT_THREAD_STAT_SIGNAL_MASK) & RT_THREAD_STAT_SIGNAL)){/* add signal state */tid->stat |= RT_THREAD_STAT_SIGNAL;/* point to the signal handle entry */tid->sig_ret = tid->sp;tid->sp = rt_hw_stack_init((void *)_signal_entry, RT_NULL,(void *)((char *)tid->sig_ret - 32), RT_NULL);rt_hw_interrupt_enable(level);LOG_D("signal stack pointer @ 0x%08x", tid->sp);/* re-schedule */rt_schedule();}
注意,这里判断如果接受signal的一方是其他thread,那么需要修改thread的入参,即thread再次唤醒的时候,会先进入_signal_entry。
4、进入_signal_entry,具体处理信号的函数
rt_thread_handle_sig
5、信号返回的部分代码
#ifdef RT_USING_SMPrt_hw_context_switch_to((rt_ubase_t)&(tid->sp), tid);
#elsert_hw_context_switch_to((rt_ubase_t)&(tid->sp));
#endif /*RT_USING_SMP*/
6、其他信号相关的函数
a,rt_signal_mask
b,rt_signal_unmask
c,rt_signal_wait
随想录(rtos中的signal)相关推荐
- Python中的signal模块和Ctrl+C操作
2019独角兽企业重金招聘Python工程师标准>>> Python中的signal模块处理OS级别的信号.例如Ctrl+C会进程发送信号. 参考这里:https://my.osch ...
- 【DBC专题】-4-DBC文件中的Signal信号字节顺序Motorola和Intel介绍
目录 0 引言 1 小端(Intel)编码格式 1.1 Signal信号不跨字节 1.2 Signal信号跨字节 2 大端(Motorola)编码格式 2.1 Signal信号不跨字节 2.2 Sig ...
- golang中os/signal包的使用
golang中os/signal包的使用 os/signal包实现对信号的处理 golang中对信号的处理主要使用os/signal包中的两个方法:一个是notify方法用来监听收到的信号:一个是 s ...
- python signal模块作用_Python中的signal模块和Ctrl+C操作
Python中的signal模块处理OS级别的信号.例如Ctrl+C会进程发送信号. Linux上查看信号的方法: [appadmin@BJLTPGPLM1007T ~]$ kill -l 1) SI ...
- RTOS中的消息队列的原理以及应用
消息队列的原理 RTOS中的消息队列是一种用于任务间通信的机制,它可以实现任务之间的异步通信,从而实现任务间的解耦.消息队列是一个先进先出的数据结构,任务可以向队列中发送消息,也可以从队列中接收消息. ...
- 当当网电子书能打印吗_一行代码就能写一个日志打印组件,你信吗?为你揭晓RTOS中日志打印组件的核心
1. 做实验引发的思考 在学习LiteOS日志打印组件使用的时候,我记录了一篇博客:atiny_log | LiteOS 物联网操作系统中的日志打印组件使用分享,关于实验的具体内容,请阅读这篇博客(点 ...
- VHDL中的signal(信号)variable(变量)的定义与赋值
VHDL中的signal(信号)variable(变量)的定义与赋值 variable(变量) 1.变量只能在process(进程)和子程序中定义和使用 process (clk)variable v ...
- OSE RTOS中APP进程接收消息机制
在OSE运行的APP进程均有一个PCB结构体,结构体中包含了指向该进程signal list的指针,是一个链表,实际上是指向链表的头指针与尾指针,头指针结构中包含指向下一个signal的next指针. ...
- RTOS 中采样任务的设计
引言 在现实生活中,大多数我们所接触到的信号都是一种模拟信号,电压.电流.声音信号等.我们在嵌入式开发过程中,有时候会涉及到模拟信号的采集,在采集过程中,为了更好地还原出信号原本的样子,有这个一个采样 ...
最新文章
- php 安装 phpunit,phpunit的安装
- python、中循环功能可通过什么命令实现_python定时执行指定函数的方法 Python如何定时循环执行命令?...
- shiro学习(7):shiro连接数据库 方式二
- PL/SQL 存储过程
- eclipse默认项目部署路径(.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps) 改为自己的tomcat真实路径方法
- axure树形表格_Axure教程:可增删改的树型结构
- 锐捷linux上网教程,校园网Ubuntu锐捷(myxrgsu)安装联网方法
- 后台数据量太大传输慢_哪些因素会导致慢查询?
- Java开发两年:java简历包装工作经验
- TCP AIMD Algorithm (copy)
- Dynamic Web Module 3.1 requires Java 1.7 or newer. 错误解决方案
- 如何快速的开发一个完整的iOS直播app(美颜篇)
- 【实战】物联网安防监控项目【5】———把模拟数据传输到web网页、web显示mjpeg-streamer视频图像
- sql 获取当前年份的12个月
- Image2Lcd图片取模软件
- 我的世界服务器怎么制作头颅,我的世界怎么刷生物头颅_生物头颅制作方法_游戏城...
- css规则定义的分类,.css规则定义
- MindManager2020官方中文版思维导图软件使用激活安装免费教程下载
- 亮紫色晶体meso四(4-氨基苯基)卟啉TAPP/TAPPPt/TAPPCo/TAPPCd/TAPPZn/TAPPPd/TAPPCu/TAPPNi/TAPPFe/TAPPMn金属配合物-齐岳供应
- [论文笔记] 大型车牌检测数据集CCPD 阅读笔记
热门文章
- VMware虚拟机Bridged(桥接模式)
- 12月4日云栖精选夜读:乌镇AI论坛最全盘点:中国互联网半壁江山坐在了一起,他们怎么看AI...
- 天律的云端大数据分析挖掘之旅
- Linux中文件颜色所代表的属性和颜色
- 连载《一个程序猿的生命周期》-6、自学C++,二级考过后,为工作的机会打下了基础...
- javascript正则表达式一
- Flash与数学:圆(2)
- virus test
- Android Drawable文件夹对应像素密度
- bzoj 5093 [Lydsy1711月赛]图的价值——第二类斯特林数