OpenEdv-开源电子网

标题: FREERTOS下的键盘输入相关问题! [打印本页]

作者: sinus    时间: 2022-11-20 16:45
标题: FREERTOS下的键盘输入相关问题!
不懂就问,当在freertos,我们进到某一个任务,需要获取键盘的值,除了while()一直等(得到要的值就break出来)还有其他方法吗?如果使用while等是要不要加延时好?
请懂得大侠指导一下!
两问。


作者: 正点原子    时间: 2022-11-22 00:11
直接搞个任务,死循环扫描即可,任务优先级可以调低点
作者: 霸王猫    时间: 2022-11-22 09:07
正点原子 发表于 2022-11-22 00:11
直接搞个任务,死循环扫描即可,任务优先级可以调低点



   1、直接搞个任务,死循环扫描即可
   2、任务优先级可以调低点
   3、采集到按键,用消息队列发送给主任务
            消息队列用自定义协议
                 例如:消息队列缓冲区buffer[]
                              buffer[0]=1  代表 按键任务发送的消息队列
                              buffer[1]=  按键码
                     

作者: sinus    时间: 2022-11-22 12:33
本帖最后由 sinus 于 2022-11-22 12:38 编辑
正点原子 发表于 2022-11-22 00:11
直接搞个任务,死循环扫描即可,任务优先级可以调低点

感谢回复蛤,但是我这边需要按键处理的任务有多个,且进任务后有类似状态机的需要按钮,处理方式是:每个需要需要键值的时候就等队列的消息吗?如果不是或者有更好的方式,请指导一下。

作者: sinus    时间: 2022-11-22 12:38
霸王猫 发表于 2022-11-22 09:07
1、直接搞个任务,死循环扫描即可
   2、任务优先级可以调低点
   3、采集到按键,用消息队列发 ...

感谢回复蛤,但是我这边需要按键处理的任务有多个,且进任务后有类似状态机的需要按钮,处理方式是:每个需要需要键值的时候就等队列的消息吗?如果不是或者有更好的方式,请指导一下。
作者: 霸王猫    时间: 2022-11-22 18:40
sinus 发表于 2022-11-22 12:38
感谢回复蛤,但是我这边需要按键处理的任务有多个,且进任务后有类似状态机的需要按钮,处理方式是:每个 ...



     假如有4个任务
               (1)、按键任务,任务A,任务B,任务C

消息队列只支持以下2种方法:
    1、一对一
             按键任务给任务A发送按键码。          -----> 任务A
    2、多对一
             按键任务给任务A发送键码
             任务B给任务A发送模拟量AI数据          -----> 任务A
             任务C给任务A发送开关量DI数据。

    消息队列不支持:一对多和多对多。
               不支持:一对多
                               例如:   按键任务给任务A发送按键码。
                                          按键任务给任务B发送按键码。
                                          按键任务给任务c发送按键码。
               不支持:多对多
                                例如:   按键任务给任务A发送按键码。
                                          按键任务给任务B发送按键码。
                                          任务C任务给任务A发送按键码。   


      你提出的【但是我这边需要按键处理的任务有多个】不符合FREERTOS消息队列要求, FREERTOS解决方案:

                 把你【需要按键处理的任务有多个】合并成一个任务。




作者: 霸王猫    时间: 2022-11-24 17:08
(, 下载次数: 0)