Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
操作系统
KEY_按键
有什么足够体现操作系统优越性的按键检测方式
发布于 2023-12-15 00:27:07 浏览:397
订阅该版
如题,以下是我原来使用的,从逐飞科技那抄的,一个是信号量,一个是邮箱 ```c #define KEY_1 GET_PIN(C, 5) // 定义主板上按键对应引脚 #define KEY_2 GET_PIN(A, 15) #define KEY_3 GET_PIN(A, 0) #define KEY_4 GET_PIN(A, 1) //开关状态变量 rt_uint8_t key1_status = 1; rt_uint8_t key2_status = 1; rt_uint8_t key3_status = 1; rt_uint8_t key4_status = 1; //上一次开关状态变量 rt_uint8_t key1_last_status; rt_uint8_t key2_last_status; rt_uint8_t key3_last_status; rt_uint8_t key4_last_status; //开关信号量 static rt_sem_t key1_sem = RT_NULL; static rt_sem_t key2_sem = RT_NULL; static rt_sem_t key3_sem = RT_NULL; static rt_sem_t key4_sem = RT_NULL; rt_ubase_t keycode=0; static void button_entry(void *parameter) { //保存按键状态 key1_last_status = key1_status; key2_last_status = key2_status; key3_last_status = key3_status; key4_last_status = key4_status; //读取当前按键状态 key1_status = rt_pin_read(KEY_1); key2_status = rt_pin_read(KEY_2); key3_status = rt_pin_read(KEY_3); key4_status = rt_pin_read(KEY_4); //检测到按键按下之后并放开 释放一次信号量 if(key1_status && !key1_last_status) { rt_sem_release(key1_sem); rt_mb_send(key_mailbox, KEY_1_ok); } if(key2_status && !key2_last_status) { rt_sem_release(key2_sem); rt_mb_send(key_mailbox, KEY_2_ok); } if(key3_status && !key3_last_status) { rt_sem_release(key3_sem); rt_mb_send(key_mailbox, KEY_3_ok); } if(key4_status && !key4_last_status) { rt_sem_release(key4_sem); rt_mb_send(key_mailbox, KEY_4_ok); } } rt_timer_t timer_button=RT_NULL; rt_mailbox_t key_mailbox=RT_NULL; int button_init(void)//按键初始化 { rt_pin_mode(KEY_1, PIN_MODE_INPUT_PULLUP );//上拉输入 rt_pin_mode(KEY_2, PIN_MODE_INPUT_PULLUP );//上拉输入 rt_pin_mode(KEY_3, PIN_MODE_INPUT_PULLDOWN );//下拉输入 rt_pin_mode(KEY_4, PIN_MODE_INPUT_PULLUP );//上拉输入 key1_sem = rt_sem_create("key1", 0, RT_IPC_FLAG_FIFO); //创建按键的信号量,当按键按下就释放信号量,在需要使用按键的地方获取信号量即可 key2_sem = rt_sem_create("key2", 0, RT_IPC_FLAG_FIFO); key3_sem = rt_sem_create("key3", 0, RT_IPC_FLAG_FIFO); key4_sem = rt_sem_create("key4", 0, RT_IPC_FLAG_FIFO); //创建邮箱 key_mailbox = rt_mb_create("key_mb",5, RT_IPC_FLAG_FIFO); //创建线程 timer_button = rt_timer_create("button", button_entry, RT_NULL, 50, RT_TIMER_FLAG_PERIODIC); if(RT_NULL != timer_button) { rt_timer_start(timer_button); } return 0; } ```
查看更多
7
个回答
默认排序
按发布时间排序
oxlm
2023-12-15
这家伙很懒,什么也没写!
有多少个按键,搞多少个信号量,完全没必要,除了浪费资源,看不出有啥优势
没有认真
2023-12-15
这家伙很懒,什么也没写!
按键检测还是用简单一点儿的,没有太大必要。就类似于,“如何体现操作系统的LED转换...”
哈喽你好啊
2023-12-16
这家伙很懒,什么也没写!
按键体现不出操作系统的优越性,因为本身足够简单,复杂的驱动才能体现
winfeng
认证专家
2023-12-17
这家伙很懒,什么也没写!
入门级
道友
2023-12-17
这家伙很懒,什么也没写!
按键检测没什么感觉
CrazyH
2023-12-18
这家伙很懒,什么也没写!
按键实在没啥好说的
梦笑真美
2023-12-18
这家伙很懒,什么也没写!
按键没啥体现的,太简单了
撰写答案
登录
注册新账号
关注者
0
被浏览
397
关于作者
djjznb
这家伙很懒,什么也没写!
提问
3
回答
2
被采纳
0
关注TA
发私信
相关问题
1
操作系统下的(软件)看门狗怎么应用
2
在电机驱动领域有必要跑RT-Thread吗?
3
STM32G070工程不能运行?
4
创建静态任务和动态任务
5
在rt thread下如何流畅驱动音频(PWM)? 有思路、方案或现成案例更好!
6
关于操作系统分类,抢占式与合作式,rtthread属于哪一类
7
rtt不断复位,找不到排查方向
8
请问可不可以在使用qemu模拟出Cortex-A53的架构来运行rt-thread
9
如何将RTT移植到自制的CH32V307板上?
10
产品兼容适配相关问题
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
使用百度AI助手辅助编写一个rt-thread下的ONVIF设备发现功能的功能代码
2
RT-Thread 发布 EtherKit开源以太网硬件!
3
rt-thread使用cherryusb实现虚拟串口
4
《C++20 图形界面程序:速度与渲染效率的双重优化秘籍》
5
《原子操作:程序世界里的“最小魔法单位”解析》
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
WIZnet_W5500
UART
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
keil_MDK
rt_mq_消息队列_msg_queue
ulog
C++_cpp
at_device
本月问答贡献
踩姑娘的小蘑菇
7
个答案
3
次被采纳
a1012112796
13
个答案
2
次被采纳
张世争
9
个答案
2
次被采纳
rv666
5
个答案
2
次被采纳
用户名由3_15位
11
个答案
1
次被采纳
本月文章贡献
程序员阿伟
8
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
大龄码农
1
篇文章
3
次点赞
ThinkCode
1
篇文章
1
次点赞
Betrayer
1
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部