打印

这样的程序结构怎么样?

[复制链接]
2489|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
一大堆草|  楼主 | 2010-4-11 14:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
void main(void)
{
      init();//各种初始化
      if(!wake_flag)sleep();//休眠
      ;---------------
      while(wake_flag) //初始化mode是0
      {
             display(); //显示
             --------; // 其他任务
             keyscan();//键盘扫描(不同的键码有不同的mode,没有按键就是mode=0)
             timeout_sleep();//没有按键,超时则休眠
             judge_mode();  //判断mode
             whiele(mode1)
             {
                     display(); //显示
                     --------; // 其他任务
                     keyscan();
                     //键盘扫描(不同的键码有不同的mode,没有按键就是mode=0)
                     timeout_sleep();//没有按键,超时则休眠
             }
             whiele(mode2)
             {
                     display(); //显示
                     --------; // 其他任务
                     keyscan();
                     //键盘扫描(不同的键码有不同的mode,没有按键就是mode=0)
                     timeout_sleep();//没有按键,超时则休眠
             }

             ----有100多个mode:L         
      }
}



这种程序结构不算是超级循环吧?我理解的超级循环是就一个大大循环,而没有小循环。像这个程序结构中,有100多个小循环呢---------

这个还不算,其他任务当中也有小循环,小循环也有显示,也有其他任务,也有按键扫描----------当然,就3,4层小循环而已:shutup:

这样的程序结构真是-----最起码我认为很不好!这个不要以为是我杜撰的,这样的程序结构,有些公司里面就有!因为我公司就是一个例子,而且我也在接手-----有点想哭

相关帖子

沙发
mohanwei| | 2010-4-11 16:14 | 只看该作者
没什么好与不好,看具体项目的要求了

使用特权

评论回复
板凳
algr| | 2010-4-11 17:23 | 只看该作者
程序框架当然有优劣之分,呵呵

大多数项目都要考虑扩展、升级、移植等一系列问题
项目之初,架构程序时就应考虑上述问题。。。

使用特权

评论回复
地板
znmcu| | 2010-4-11 18:19 | 只看该作者
关于编程模式与方法,你可以看《单片机基础外设9日通》的第九日(下),即第10集,你应该公悟到一些东西!

www.znmcu.cn  振南电子网  “视频教程下载”

使用特权

评论回复
5
FDLock| | 2010-4-11 23:10 | 只看该作者
这个结构不好,1. 在一个函数内的代码太长("有100多个mode"),这还是main函数;2. 太多“display(); keyscan();”了, 占用代码空间,如果是动态LED数码管显示,一般采用定时中断扫描;

使用特权

评论回复
6
ejack| | 2010-4-12 08:04 | 只看该作者
旁的不说,
1. whiele让人很镇精……
2. 系统只在上电后休眠?一旦触发就再也不睡了?那还休眠个啥啊

使用特权

评论回复
7
yuyixuanta| | 2010-4-12 11:33 | 只看该作者
不好。
如果你后面要在上面做很多事,最好早点改善,否则,真正的郁闷在后面。

使用特权

评论回复
8
xuexiwen33| | 2010-4-12 11:43 | 只看该作者
只能说不好。

使用特权

评论回复
9
xymxym| | 2010-4-12 16:24 | 只看该作者
:L
显示和键盘扫描放到后台去处理(定时中断),主程序只要根据相应模式做相应事就可以了,参考一下多级菜单架构!

whiele好雷人!

使用特权

评论回复
10
大白菜营| | 2010-4-12 19:34 | 只看该作者
如果不在呼程序空间的话,这样子的结构也许更好一些,因为这样子程序方便控制,而且变量少,控制容易,非常推荐这种结构。想想就知道了,那么多的MODE,如果单单一个大循环,那需要控制多少变量,多少流程,而且容易出错!这种结构比一个大循环好多了,唯一的缺点是:可能程序增大十几倍。

使用特权

评论回复
11
John-lv| | 2010-4-12 21:24 | 只看该作者
书慢慢看,估计是陷入死循环了

使用特权

评论回复
12
highgear| | 2010-4-12 22:43 | 只看该作者
这种方式也可以看作效率低下的顺序状态(机), 状态变量 mode. mode100 至少要经过 100 次判断,才能运行。建议参照状态机划分状态, 合理分配任务, 同时简化框架:

  while(wake_flag) //初始化mode是0
      {
            judge_mode();  //判断mode
            display(); //显示
             LaunchTasks(mode);  // --------; // 其他任务
             keyscan();//键盘扫描(不同的键码有不同的mode,没有按键就是mode=0)
             timeout_sleep();//没有按键,超时则休眠
       }

LaunchTasks 可以使用 switch case, 也可以使用效率更高的函数指针数组。

使用特权

评论回复
13
xwj| | 2010-4-12 22:49 | 只看该作者
相当的糟糕。

使用特权

评论回复
14
踢球老越位| | 2010-4-12 23:11 | 只看该作者
效率低下,如果在状态机里面有条件地状态转移,楼主就郁闷了。。。

使用特权

评论回复
15
我很纠结| | 2010-4-13 17:44 | 只看该作者
作者是不是以为这是OS啊,开了那么多“进程”

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

7

帖子

1

粉丝