RT-Thread 25. 信号-按键发送

1.设置
include:
..\rt-thread-v4.1.0\components\libc\compilers\common
..\rt-thread-v4.1.0\components\libc\compilers\common\extension
开启signal,保存并退出menuconfig,这样在rtconfig.h中自动添加RT_USING_SIGNALS宏定义

在这里插入图片描述

//rtconfig.h
/* Inter-Thread communication */

#define RT_USING_SEMAPHORE
#define RT_USING_MUTEX
#define RT_USING_EVENT
#define RT_USING_MAILBOX
#define RT_USING_MESSAGEQUEUE
#define RT_USING_SIGNALS
2.代码

如果线程要处理某一信号,那么就要在线程中安装该信号。安装信号主要用来确定信号值及线程针对 该信号值的动作之间的映射关系,即线程将要处理哪个信号,该信号被传递给线程时,将执行何种操作。
//sg.c

#include <rtthread.h>
#include <rtdevice.h>
#include "drv_gpio.h"

#define THREAD_PRIORITY   27
#define THREAD_TIMESLICE  10

#define THREAD_STACK_SIZE    500

static rt_thread_t thread61 = RT_NULL;
/* 线 程 1 的 信 号 处 理 函 数 */
void thread1_signal_handler(int sig)
{
  rt_kprintf("thread1 received signal %d\n", sig);
}

/* 线 程 1 的 入 口 函 数 */
static void thread61_entry(void *parameter)
{
  int cnt = 0;
  /* 安 装 信 号 */
  rt_signal_install(SIGUSR1, thread1_signal_handler);
  rt_signal_unmask(SIGUSR1);
  while (1)
  {
    /* 线 程 1 采 用 低 优 先 级 运 行, 一 直 打 印 计 数 值 */
    rt_kprintf("thread1 count : %d\n", cnt);
    cnt++;
    rt_thread_mdelay(5000);
  }
}

void SgKeyScanCallBack(void)
{
  /* 发 送 信 号 SIGUSR1 给 线 程 1 */
  rt_thread_kill(thread61, SIGUSR1);  
}

int SgTaskInit(void)
{
  /* 创 建 线 程 1 */
  thread61 = rt_thread_create("thread61",
                          thread61_entry, RT_NULL,
                          THREAD_STACK_SIZE,
                          THREAD_PRIORITY, THREAD_TIMESLICE);
  if (thread61 != RT_NULL)
  {
    rt_thread_startup(thread61);
  }  
  return 0;
}

/* 信 号 示 例 的 初 始 化 */
int signal_sample(void)
{

  rt_thread_mdelay(300);
  /* 发 送 信 号 SIGUSR1 给 线 程 1 */
  rt_thread_kill(thread61, SIGUSR1);
  return 0;
}
/* 导 出 到 msh 命 令 列 表 中 */
//MSH_CMD_EXPORT(signal_sample, signal sample);
2. 输出
thread1 count : 27

key press val is 1
thread1 received signal 10
thread1 count : 28

key press val is 1
thread1 received signal 10
thread1 count : 29

thread1 count : 30
  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值