【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱: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)相关推荐

  1. Python中的signal模块和Ctrl+C操作

    2019独角兽企业重金招聘Python工程师标准>>> Python中的signal模块处理OS级别的信号.例如Ctrl+C会进程发送信号. 参考这里:https://my.osch ...

  2. 【DBC专题】-4-DBC文件中的Signal信号字节顺序Motorola和Intel介绍

    目录 0 引言 1 小端(Intel)编码格式 1.1 Signal信号不跨字节 1.2 Signal信号跨字节 2 大端(Motorola)编码格式 2.1 Signal信号不跨字节 2.2 Sig ...

  3. golang中os/signal包的使用

    golang中os/signal包的使用 os/signal包实现对信号的处理 golang中对信号的处理主要使用os/signal包中的两个方法:一个是notify方法用来监听收到的信号:一个是 s ...

  4. python signal模块作用_Python中的signal模块和Ctrl+C操作

    Python中的signal模块处理OS级别的信号.例如Ctrl+C会进程发送信号. Linux上查看信号的方法: [appadmin@BJLTPGPLM1007T ~]$ kill -l 1) SI ...

  5. RTOS中的消息队列的原理以及应用

    消息队列的原理 RTOS中的消息队列是一种用于任务间通信的机制,它可以实现任务之间的异步通信,从而实现任务间的解耦.消息队列是一个先进先出的数据结构,任务可以向队列中发送消息,也可以从队列中接收消息. ...

  6. 当当网电子书能打印吗_一行代码就能写一个日志打印组件,你信吗?为你揭晓RTOS中日志打印组件的核心

    1. 做实验引发的思考 在学习LiteOS日志打印组件使用的时候,我记录了一篇博客:atiny_log | LiteOS 物联网操作系统中的日志打印组件使用分享,关于实验的具体内容,请阅读这篇博客(点 ...

  7. VHDL中的signal(信号)variable(变量)的定义与赋值

    VHDL中的signal(信号)variable(变量)的定义与赋值 variable(变量) 1.变量只能在process(进程)和子程序中定义和使用 process (clk)variable v ...

  8. OSE RTOS中APP进程接收消息机制

    在OSE运行的APP进程均有一个PCB结构体,结构体中包含了指向该进程signal list的指针,是一个链表,实际上是指向链表的头指针与尾指针,头指针结构中包含指向下一个signal的next指针. ...

  9. RTOS 中采样任务的设计

    引言 在现实生活中,大多数我们所接触到的信号都是一种模拟信号,电压.电流.声音信号等.我们在嵌入式开发过程中,有时候会涉及到模拟信号的采集,在采集过程中,为了更好地还原出信号原本的样子,有这个一个采样 ...

最新文章

  1. php 安装 phpunit,phpunit的安装
  2. python、中循环功能可通过什么命令实现_python定时执行指定函数的方法 Python如何定时循环执行命令?...
  3. shiro学习(7):shiro连接数据库 方式二
  4. PL/SQL 存储过程
  5. eclipse默认项目部署路径(.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps) 改为自己的tomcat真实路径方法
  6. axure树形表格_Axure教程:可增删改的树型结构
  7. 锐捷linux上网教程,校园网Ubuntu锐捷(myxrgsu)安装联网方法
  8. 后台数据量太大传输慢_哪些因素会导致慢查询?
  9. Java开发两年:java简历包装工作经验
  10. TCP AIMD Algorithm (copy)
  11. Dynamic Web Module 3.1 requires Java 1.7 or newer. 错误解决方案
  12. 如何快速的开发一个完整的iOS直播app(美颜篇)
  13. 【实战】物联网安防监控项目【5】———把模拟数据传输到web网页、web显示mjpeg-streamer视频图像
  14. sql 获取当前年份的12个月
  15. Image2Lcd图片取模软件
  16. 我的世界服务器怎么制作头颅,我的世界怎么刷生物头颅_生物头颅制作方法_游戏城...
  17. css规则定义的分类,.css规则定义
  18. MindManager2020官方中文版思维导图软件使用激活安装免费教程下载
  19. 亮紫色晶体meso四(4-氨基苯基)卟啉TAPP/TAPPPt/TAPPCo/TAPPCd/TAPPZn/TAPPPd/TAPPCu/TAPPNi/TAPPFe/TAPPMn金属配合物-齐岳供应
  20. [论文笔记] 大型车牌检测数据集CCPD 阅读笔记

热门文章

  1. VMware虚拟机Bridged(桥接模式)
  2. 12月4日云栖精选夜读:乌镇AI论坛最全盘点:中国互联网半壁江山坐在了一起,他们怎么看AI...
  3. 天律的云端大数据分析挖掘之旅
  4. Linux中文件颜色所代表的属性和颜色
  5. 连载《一个程序猿的生命周期》-6、自学C++,二级考过后,为工作的机会打下了基础...
  6. javascript正则表达式一
  7. Flash与数学:圆(2)
  8. virus test
  9. Android Drawable文件夹对应像素密度
  10. bzoj 5093 [Lydsy1711月赛]图的价值——第二类斯特林数