发新帖我要提问
12
返回列表
打印
[程序源码]

求教程序架构,望吐槽

[复制链接]
楼主: langgao183
手机看帖
扫描二维码
随时随地手机跟帖
21
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 和中断优先级这类的还不是很清晰。
   了解汇编,上述的三个东西本质是一个东西。

使用特权

评论回复
22
wxjcan| | 2014-12-16 11:16 | 只看该作者
我的程序一直都有很多全局变量,每次看到就头大

使用特权

评论回复
23
ayb_ice| | 2014-12-16 11:54 | 只看该作者
sedatefire 发表于 2014-12-16 11:09
3、这点是我想了很久但是没有实现的,例如;上面提到的keymode,这是按键改变按键模式的,显示的时候根据key ...

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

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

使用特权

评论回复
24
sedatefire| | 2014-12-16 11:59 | 只看该作者
ayb_ice 发表于 2014-12-16 11:54
很多代码完全可以不在中断里完成,

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

按键扫描译码  和 按键事件的应用处理,最好是分开的。在重的系统,前者要放入中断。
你的系统太轻,所以有此结论。

使用特权

评论回复
25
luofeng2g| | 2014-12-16 12:27 | 只看该作者
本帖最后由 luofeng2g 于 2014-12-16 12:29 编辑
cjseng 发表于 2014-12-15 11:55
随便借楼主的宝地问一句:变量名用拼音写行不行?嘿嘿!
比如,State_Djs,我定义的是倒计时状态,感觉有点 ...

名字不怕长,把要表达的意思说清楚,这样注释有时候都省了!不要用拼音啦,老老实实用english

使用特权

评论回复
26
luofeng2g| | 2014-12-16 12:33 | 只看该作者
程序模块间的解耦
https://bbs.21ic.com/forum.php?mo ... &fromuid=909509
借楼主宝地,都来讨论讨论!!

使用特权

评论回复
27
john_lee| | 2014-12-16 12:53 | 只看该作者
终极的程序架构:
1、只有一个全局变量。
.......

使用特权

评论回复
28
原野之狼| | 2014-12-16 13:03 | 只看该作者
john_lee 发表于 2014-12-16 12:53
终极的程序架构:
1、只有一个全局变量。
.......

theApp->create()

使用特权

评论回复
29
ayb_ice| | 2014-12-16 13:34 | 只看该作者
sedatefire 发表于 2014-12-16 11:59
按键扫描译码  和 按键事件的应用处理,最好是分开的。在重的系统,前者要放入中断。
你的系统太轻,所以 ...

也许吧
不过我的项目从没有在中断中扫键

使用特权

评论回复
30
大道至简| | 2014-12-16 15:04 | 只看该作者
langgao183 发表于 2014-12-15 21:28
望斑竹指教,该如何去避免?能给个例子吗?

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

我们10000行的代码,全局变量不超过10个。而且大部分是跨越任务通讯或者中断和主流程通讯的变量。

使用特权

评论回复
31
大道至简| | 2014-12-16 15:06 | 只看该作者
代码就不方便给了,代码都是公司的资产

使用特权

评论回复
32
hnkf118| | 2014-12-16 19:20 | 只看该作者
呵呵,走模块化操作,对外函数操作, 模拟内变量 封装起来。就满足大部分需求了。

使用特权

评论回复
33
cuya| | 2014-12-16 22:51 | 只看该作者
8 K 的程序就别要求那么高了。

如果是大型程序还是这么混乱,那么有苦头可吃了。吃一堑,长一智,吃了苦头,自然会去想办法的。
程序混乱往往都是随意,任性, 不严谨认真造成的, 还真不是技术问题。

使用特权

评论回复
34
cuya| | 2014-12-16 22:58 | 只看该作者
例如 State_Djs。 不知道 CountDown, 那么为什么不写成 State_DaoJiShi 呢? 这很显然是不够认真的结果。

使用特权

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

使用特权

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

本版积分规则