欢迎光临散文网 会员登陆 & 注册

程序越编越简单(一)

2021-07-11 15:57 作者:GXTon_阿通  | 我要投稿

比如要编写多个功放程序.

目前有三个型号: 功放a;功放b;功放c;

规则一,

对每个功放建立一个.c和.h文档.

创建相应的结构体.


规则二,

建立一个程序中切换功放的接口程序.

建立一个功放Z的.c和.h文件.

所有的功放,a,b,c

无论选中了哪个功放,都要把数据复制给功放Z.

只有这样参数给了Z,才会生效.

因为Z是最终的功放.


规则三,

从整体去看,

这个要结合你的程序整体.

因为功放是需要监控的,就是你的程序需要发送和接收的.

编写程序也就是从这两部分入手.

首先看发送.

第一类:直接发送

这些发送指令都是一条语句.只要把这些指令写死,然后对应去发送就行了.

比如:

按绿灯:发送"打开功放"

按红灯:发送"关闭功放"

按复位:发送"复位功放"

第二类:需要定期发送

还有一些是需要定期循环发送的

比如:

"心跳"包;

"获取功放状态"

这里就直接在程序主while中写一个定时发送.

第三类:传参指令

这一类就是在指令中有变量.

需要把变量写进去,然后再发送.

比如:

定时开关,我先把旋钮拧到一定时长,然后再按下,

就开始按照我的倒计数分钟数计数.

这里倒计时的数字是我设置的,这就是一个变量.


总结:

关于发送还会有很多情况......

 还需要结合实际,

要考虑一些特殊的情况,

比如:

两个发送按键和复位按键同时按下.

就会同时发送两条指令"打开指令"和"复位指令".

这两条指令会不会有遗漏的情况.也就是如果程序不好,可能会只发送了其中一条指令.

还需要考虑功放能不能同时接受两条指令.

有的时候外设,

不接受两条指令,比如单发"打开指令"或者单发"复位指令"都很好用.

但是两个指令一起发送的时候,"打开指令 ,复位指令".

这样有些功放可能会认为错误.

这时就必须要在两条指令之间加入延迟了.

这个时候就需要改变编写程序的策略.


比如:

按下按键,或按下多个按键的时候,不进行直接的发送.

而是把对应的发送标志位置一.

然后,

在主循环while中进行轮询检测标志位.

每次轮询可以用计数器中断进行计数,达到某个值之后进行一次标志位查询.

这样就实现了没有delay的延迟.(可以提高程序运行效率这个后面讲解)

然后,

检测到一个打开功放按键按下的标志位置一,就发送"打开指令".然后跳出.

下一轮接着检测其他标志位有没有置一,如果复位标志置一,就发送"复位指令".然后跳出.

因为每一轮都只响应一个标志位,

并且每一轮之间有若干个中断计数.

从而实现了每条发送指令之间都会有时间间隔.不会出现指令粘连的情况.


这里面其实还是可以设置一个缓存.

然后每次主循环中检测缓存里面是不是按键按下.


上面就是发送指令了,

下面开始讲解接收指令.

接收要和发送区分开来.

好的程序是:

接收就是只管接收,

发送就是只管发送.

当然在很多情况下是不容易做到的.但是要向着这个方向去努力.

接收指令部分,

接收就很简单了.

需要设置一个循环缓存,

如论收到什么,先不管,通通先存到缓存里面.

然后再主循环while中写一个截取循环缓存数据的函数.

比如摘取循环缓存中包头和包尾之间的数据.

这样就可以接收到一条完整的指令了.







程序越编越简单(一)的评论 (共 条)

分享到微博请遵守国家法律