打印

循环问题

[复制链接]
1004|20
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lium|  楼主 | 2023-1-13 23:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这种程序结构不算是超级循环吧?我理解的超级循环是就一个大大循环,而没有小循环。像这个程序结构中,有100多个小循环呢---------

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

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

使用特权

评论回复
沙发
lium|  楼主 | 2023-1-13 23:55 | 只看该作者
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         
        }
}

使用特权

评论回复
板凳
zhanghqi| | 2023-1-13 23:57 | 只看该作者
没什么好与不好,看具体项目的要求了

使用特权

评论回复
地板
pangb| | 2023-1-13 23:59 | 只看该作者
程序框架当然有优劣之分,呵呵

使用特权

评论回复
5
zwll| | 2023-1-14 08:03 | 只看该作者
项目之初,架构程序时就应考虑上述问题。。。

使用特权

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

使用特权

评论回复
7
huangchui| | 2023-1-14 08:07 | 只看该作者
系统只在上电后休眠?一旦触发就再也不睡了?那还休眠个啥啊

使用特权

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

使用特权

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

使用特权

评论回复
10
zhuhuis| | 2023-1-14 08:12 | 只看该作者
个人觉得应该是系统复位问题。看复位电路,内部复位是需要设定的。

使用特权

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

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

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

使用特权

评论回复
12
heweibig| | 2023-1-14 08:17 | 只看该作者

有人解释一下whiele(mode1)是做什么的吗,好像是函数还是写错了;

使用特权

评论回复
13
wangzsa| | 2023-1-14 08:20 | 只看该作者
下载程序时是不是要把扩展片也连在一起呢?

使用特权

评论回复
14
Stahan| | 2023-1-19 20:09 | 只看该作者
一旦触发就再也不睡了?

使用特权

评论回复
15
tpgf| | 2023-2-4 09:21 | 只看该作者
超级循环或者说事普通循环的界限又是什么呢

使用特权

评论回复
16
nawu| | 2023-2-4 09:31 | 只看该作者
这种嵌入的多重循环 感觉效率会非常的不好

使用特权

评论回复
17
coshi| | 2023-2-4 09:40 | 只看该作者
建议楼主跑系统 这样能分担压力

使用特权

评论回复
18
qcliu| | 2023-2-4 09:57 | 只看该作者
wenfen 发表于 2023-1-14 08:11
如果不在呼程序空间的话,这样子的结构也许更好一些,因为这样子程序方便控制,而且变量少,控制容易,非常 ...

那么需要占用的代码空间会多出来多少呢

使用特权

评论回复
19
wiba| | 2023-2-4 10:02 | 只看该作者
heweibig 发表于 2023-1-14 08:17
有人解释一下whiele(mode1)是做什么的吗,好像是函数还是写错了;

这个肯定是笔误了  估计是按照模式进行的循环操作

使用特权

评论回复
20
tfqi| | 2023-2-4 10:20 | 只看该作者
huangchui 发表于 2023-1-14 08:07
系统只在上电后休眠?一旦触发就再也不睡了?那还休眠个啥啊

极有可能上电很长一段时间之后都不使用啊 所以需要低功耗睡眠模式

使用特权

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

本版积分规则

915

主题

9578

帖子

3

粉丝