[程序源码] 求教程序架构,望吐槽

[复制链接]
4021|34
sedatefire 发表于 2014-12-16 11:09 | 显示全部楼层
langgao183 发表于 2014-12-15 13:48
谢斑竹.1、我不喜欢在中断里执行任务,除非需要及时和时间精确的,个个习惯把。                          ...

3、这点是我想了很久但是没有实现的,例如;上面提到的keymode,这是按键改变按键模式的,显示的时候根据keymode的不同显示不同数据和不同闪烁时间,这个时候还要来个单独读取keymode的函数吗?这样不是反而增加了函数的代码吗?增加了单片机执行的时间吗?


1. 从模块技术角度,我会建议你在.h文件定义一个宏,这样兼顾模块和效率。
#define  GET_KEY_MODE()   (keymode)

2. 但从系统架构的角度,你把一些实时性要求很高的操作也放在main里面,随着系统功能越来越多,总有一天要糟。
倘若哪天,上个lcd,刷屏时间就要30~100ms,你就会发现Timer2_4ms就是个炸*。

3. 你不喜欢中断,源于畏惧。我推测你是对  volatile 和 using 和中断优先级这类的还不是很清晰。
   了解汇编,上述的三个东西本质是一个东西。

wxjcan 发表于 2014-12-16 11:16 | 显示全部楼层
我的程序一直都有很多全局变量,每次看到就头大
ayb_ice 发表于 2014-12-16 11:54 | 显示全部楼层
sedatefire 发表于 2014-12-16 11:09
3、这点是我想了很久但是没有实现的,例如;上面提到的keymode,这是按键改变按键模式的,显示的时候根据key ...

很多代码完全可以不在中断里完成,

显示,按键这些更是没有必要
sedatefire 发表于 2014-12-16 11:59 | 显示全部楼层
ayb_ice 发表于 2014-12-16 11:54
很多代码完全可以不在中断里完成,

显示,按键这些更是没有必要

按键扫描译码  和 按键事件的应用处理,最好是分开的。在重的系统,前者要放入中断。
你的系统太轻,所以有此结论。
luofeng2g 发表于 2014-12-16 12:27 | 显示全部楼层
本帖最后由 luofeng2g 于 2014-12-16 12:29 编辑
cjseng 发表于 2014-12-15 11:55
随便借楼主的宝地问一句:变量名用拼音写行不行?嘿嘿!
比如,State_Djs,我定义的是倒计时状态,感觉有点 ...

名字不怕长,把要表达的意思说清楚,这样注释有时候都省了!不要用拼音啦,老老实实用english
luofeng2g 发表于 2014-12-16 12:33 | 显示全部楼层
程序模块间的解耦
https://bbs.21ic.com/forum.php?mo ... &fromuid=909509
借楼主宝地,都来讨论讨论!!
john_lee 发表于 2014-12-16 12:53 | 显示全部楼层
终极的程序架构:
1、只有一个全局变量。
.......
原野之狼 发表于 2014-12-16 13:03 | 显示全部楼层
john_lee 发表于 2014-12-16 12:53
终极的程序架构:
1、只有一个全局变量。
.......

theApp->create()
ayb_ice 发表于 2014-12-16 13:34 | 显示全部楼层
sedatefire 发表于 2014-12-16 11:59
按键扫描译码  和 按键事件的应用处理,最好是分开的。在重的系统,前者要放入中断。
你的系统太轻,所以 ...

也许吧
不过我的项目从没有在中断中扫键
大道至简 发表于 2014-12-16 15:04 | 显示全部楼层
langgao183 发表于 2014-12-15 21:28
望斑竹指教,该如何去避免?能给个例子吗?

如果你充分理解了c++,回过头来写c语言,把每个变量的作用域都管理好,就很好了。
反正你不要随便做全局变量。

我们10000行的代码,全局变量不超过10个。而且大部分是跨越任务通讯或者中断和主流程通讯的变量。
大道至简 发表于 2014-12-16 15:06 | 显示全部楼层
代码就不方便给了,代码都是公司的资产
hnkf118 发表于 2014-12-16 19:20 | 显示全部楼层
呵呵,走模块化操作,对外函数操作, 模拟内变量 封装起来。就满足大部分需求了。
cuya 发表于 2014-12-16 22:51 | 显示全部楼层
8 K 的程序就别要求那么高了。

如果是大型程序还是这么混乱,那么有苦头可吃了。吃一堑,长一智,吃了苦头,自然会去想办法的。
程序混乱往往都是随意,任性, 不严谨认真造成的, 还真不是技术问题。
cuya 发表于 2014-12-16 22:58 | 显示全部楼层
例如 State_Djs。 不知道 CountDown, 那么为什么不写成 State_DaoJiShi 呢? 这很显然是不够认真的结果。

浮世涤生 发表于 2015-1-26 10:59 | 显示全部楼层
提几个意见,共同成长:
1. 数据类型没有封装:从8位单片机移植到32位单片机时会出现可移植性的问题。
2. 软件中应该使用宏定义代替数值,用术语说就是不应该使用MagicNumber。
3. 函数命名:有些函数有下划线,有些没有下划线。同一个软件中的函数风格应该统一,如Windows风格、Unix风格、匈牙利风格等。
4. 有一些函数,如LED_process()中可以考虑采用表驱动的方法来实现。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部