工大后院

 找回密码
 加入后院

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
查看: 3035|回复: 7

嵌入式设备进行按键切换程序, 如何实现好?

[复制链接]
发表于 2008-7-16 15:36 | 显示全部楼层 |阅读模式
简单地说, 就是我按一下按键, 就执行程序的这部分代码, 再按一下, 就执行程序的那一部分代码..

这两部分的代码属于平行关系, 其实在程序中可以设置if ..else..类似的语句的

但是因为要用按键进行切换, 所以不知道怎样实现好?

暂时计划另写一个程序, 进行按键检测(这部分肯定是阻塞的), 然后把那程序分别编译成两个程序, 有按键则Kill掉原程序, 启动新程序.

感觉这样好笨, 想一下大家有什么看法??

如表述不清导致理解错误~ 请跟帖...
 楼主| 发表于 2008-7-16 15:36 | 显示全部楼层
忘了说, 嵌入式是Linux系统
回复

使用道具 举报

发表于 2008-7-17 00:10 | 显示全部楼层
不懂

是不是可以看成这样
A是按键检测程序,B和C的两个不同的程序?
按一下A就执行B,再按一下就执行C?

为什么不可以做成A检测到按键就向B和C发消息,然后由B和C去决定是否运行,
而B和C只需要置个位就可以决定是否让程序继续执行,
比如当前B跑两个线程,,一个消息处理的,收到按键消息,把相应位置位
然后在另外一个线程里面判断这个位来决定是否执行下面的操作,如下,B_MsgProc是消息处理
B_Proc是具体的处理

然后C程序也可以是一样的处理?

B_MsgProc()
{
    flag = !flag;
}
B_Proc()
{
    while(1)
    {
        if (flag == false)
        {
            sleep(1);
            continue;
        }
        else
        {
            XXXX;
        }
    }
}

不知道这样能不能满足LZ的要求?
回复

使用道具 举报

发表于 2008-7-17 03:08 | 显示全部楼层
有点深度哦
回复

使用道具 举报

发表于 2008-7-17 04:53 | 显示全部楼层
LS别TMD瞎灌水...
回复

使用道具 举报

 楼主| 发表于 2008-7-19 15:09 | 显示全部楼层
其实最好是把全部都做成同一个程序里
回复

使用道具 举报

 楼主| 发表于 2008-7-19 15:18 | 显示全部楼层
... 还没打完字就发表了

我是说, 同一个程序, 进行按键检测, 然后判断, 对两部分的功能模块进行切换~
描述一下这程序的功能:
主线程进行数据采集, 数据可以通过A模块, 也可以通过B模块发送出去, 两个模块没有主从关系.
现在就是加一个按键检测, 使数据在A模块和B模块的传送中切换, 数据是不断地采集的
所以A, B模块都分别启动一个线程, 按键检测也启动一个线程.

我之前想的笨方法是, 把数据采集+A模块传输这部分做成一个程序, 把数据采集+B模块传输做成一个程序,
这样就简单但看起来不太好~~

现在的想法就是如上描述了.
但是具体还没实现, 之后再发贴说明测试结果.
回复

使用道具 举报

发表于 2008-7-19 15:42 | 显示全部楼层
还是不太明白,如果是要做在一个进程里面跑,那更简单一点了...

不知道这样可不可以?
A-->数据采集
B-->按键检测
C-->处理1
D-->处理2
四个分别以线程方式运行

1. 这样来处理的话, 在A中不断地采集数据到一个buffer里面,由处理程序来使用这个buffer的数据,就是和处理程序一个生产者-消费者的模型, 要注意数据读写的加锁和解锁

2. 在设置一个全局变量,在B的按键检测中设置这个全局变量的值bSwitch, 其实这个全局变量就是一个开关, 控制是C还是D来处理

3. C判断如果bSwitch是1,那么就运行,否则像前面帖子里面描述的 sleep一小个时间,比如100ms,注意时间不能太长,否则响应会很慢

4. D判断如果bSwitch是0,那么就运行,否则同样地sleep一小个时间再检测这个变量
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

QQ|Archiver|手机版|小黑屋|广告业务Q|工大后院 ( 粤ICP备10013660号 )

GMT+8, 2025-5-13 21:11

Powered by Discuz! X3.5

Copyright © 2001-2024 Tencent Cloud.

快速回复 返回顶部 返回列表