• «
  • 1
  • 2
  • »
  • Pages: 1/2     Go
主题 : 请教如何编写实时响应的应用程序[哈哈哈哈]? 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 418
精华: 0
发帖: 21
金钱: 205 两
威望: 39 点
综合积分: 42 分
注册时间: 2008-03-29
最后登录: 2011-05-06
楼主  发表于: 2008-05-23 22:35

 请教如何编写实时响应的应用程序[哈哈哈哈]?

大体框架是这样的:
main()
{
  init();    /*初始化*/
  while(1)
  {
    key_func();  /*阻塞方式读键值,按键中断触发该函数*/
    switch(key)  /*检测QQ2440开发板的哪一个键被按下,执行相应功能*/
    {
      case 1:
          while(1)
            {
              /*按下1键后,循环执行该部分,直到有其他键按下*/
            }      /*疑问点!!!!!!!!!!!!!!!!!!*/
          break;
      case 2:
      ...
    }
  }
}

如何做到程序在case1的循环中执行时,一有其他按键按下就利马跳出该循环?以前做单片机的时候,类似的程序结构直接用中断就可以了,不知道在linux下应该如何实现?

或者是程序结构有问题?

...
[ 此贴被idolspawn在2008-06-10 15:13重新编辑 ]
级别: 新手上路
UID: 418
精华: 0
发帖: 21
金钱: 205 两
威望: 39 点
综合积分: 42 分
注册时间: 2008-03-29
最后登录: 2011-05-06
1楼  发表于: 2008-05-24 15:48
大神还没现身吗~
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
2楼  发表于: 2008-05-24 19:37
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."
级别: 新手上路
UID: 418
精华: 0
发帖: 21
金钱: 205 两
威望: 39 点
综合积分: 42 分
注册时间: 2008-03-29
最后登录: 2011-05-06
3楼  发表于: 2008-05-24 21:23
如果不牵扯到linux的进程、线程的话,有没有实现的可能?
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
4楼  发表于: 2008-05-25 09:14
有,不过我不知道:)
有一点希望你了解,在Linux操作系统环境下,尽量用操作系统提供的服务,比如系统调用。不要尝试用无操作系统单片机的方式去做操作系统已经为你做的事
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
5楼  发表于: 2008-05-25 09:17
如果想了解更多Linux下处理设备事件的编程,你可以看看MiniGUI thread版本里mginit的写法
http://www.minigui.com/index.php?id=27&L=0
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."
级别: 新手上路
UID: 418
精华: 0
发帖: 21
金钱: 205 两
威望: 39 点
综合积分: 42 分
注册时间: 2008-03-29
最后登录: 2011-05-06
6楼  发表于: 2008-05-25 15:12
喔,谢谢。看线程去
级别: 新手上路
UID: 418
精华: 0
发帖: 21
金钱: 205 两
威望: 39 点
综合积分: 42 分
注册时间: 2008-03-29
最后登录: 2011-05-06
7楼  发表于: 2008-06-04 01:03
新的疑问,麻烦斑竹了
1.第一次建立了2个线程,线程A用于阻塞地读按键,读到后修改全局变量key;
  线程B执行如下结构的循环:
while(1)
{
    switch(key)  /*检测哪一个键被按下,执行相应功能*/
    {
      case 1:
            while(1)
            {
              func1();
              usleep(10000);
              if (key != prev_key)        /*新的疑问*/
                  break;
            }   
            break;
      case 2:
          ....
    }
}
这样可以随时检测到按键的按下并执行相应功能,问题是(这是个小问题)这种程序结构符合编程习惯吗,尤其是"if (key != prev_key)那句判断。资料上的例子都是单纯讲线程相关函数的,是分立的讲的,没讲解编程技巧等等吧。说到底还是程序结构合理不合理的问题

2.这个问题就很困扰了。跟上例无关。假如~!我同时运行2个线程threadA和threadB:
void threadA(void)
{
    while(1)
      printf("i'm threadA\n");
}
void threadB(void)
{
  while(1)
  {
      /*每10ms执行func一次*/
      {
        func();
        usleep(10000);
      }
  }
}
同时运行threadA和threadB时,threadB的func相当受影响,根本无法保证每10ms执行一次,时间差别特别大,而且输出结果亦有问题。而只运行threadB时那是一~点问题也没有哇。是不是在多线程的情况下某具体线程内的定时任务(如本例)受线程调度的影响无法准确执行?这种情况下如何保证threadB的每10ms执行一次func()?
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
8楼  发表于: 2008-06-05 17:39
关于编程习惯的问题,知道地球人的小孩子是怎么学说话的吧:)
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."
级别: 新手上路
UID: 418
精华: 0
发帖: 21
金钱: 205 两
威望: 39 点
综合积分: 42 分
注册时间: 2008-03-29
最后登录: 2011-05-06
9楼  发表于: 2008-06-06 19:26
小孩子学说话总得有人教的罢。问题可能有些弱智但是这是我实在不懂的。完全自己摸索不可想象的尤其对我这种天资愚笨的来说~:) 斑竹随便一回答就可以,我只想知道有实际开发经验的人是什么样的思路,估计任何一个自学者都希望得到这样的“指点”吧。呵呵
  • «
  • 1
  • 2
  • »
  • Pages: 1/2     Go