程序越编越简单(一)
比如要编写多个功放程序.
目前有三个型号: 功放a;功放b;功放c;

规则一,
对每个功放建立一个.c和.h文档.
创建相应的结构体.
规则二,
建立一个程序中切换功放的接口程序.
建立一个功放Z的.c和.h文件.
所有的功放,a,b,c
无论选中了哪个功放,都要把数据复制给功放Z.
只有这样参数给了Z,才会生效.
因为Z是最终的功放.
规则三,
从整体去看,
这个要结合你的程序整体.
因为功放是需要监控的,就是你的程序需要发送和接收的.
编写程序也就是从这两部分入手.

首先看发送.
第一类:直接发送
这些发送指令都是一条语句.只要把这些指令写死,然后对应去发送就行了.
比如:
按绿灯:发送"打开功放"
按红灯:发送"关闭功放"
按复位:发送"复位功放"
第二类:需要定期发送
还有一些是需要定期循环发送的
比如:
"心跳"包;
"获取功放状态"
这里就直接在程序主while中写一个定时发送.
第三类:传参指令
这一类就是在指令中有变量.
需要把变量写进去,然后再发送.
比如:
定时开关,我先把旋钮拧到一定时长,然后再按下,
就开始按照我的倒计数分钟数计数.
这里倒计时的数字是我设置的,这就是一个变量.
总结:
关于发送还会有很多情况......
还需要结合实际,
要考虑一些特殊的情况,
比如:
两个发送按键和复位按键同时按下.
就会同时发送两条指令"打开指令"和"复位指令".
这两条指令会不会有遗漏的情况.也就是如果程序不好,可能会只发送了其中一条指令.
还需要考虑功放能不能同时接受两条指令.
有的时候外设,
不接受两条指令,比如单发"打开指令"或者单发"复位指令"都很好用.
但是两个指令一起发送的时候,"打开指令 ,复位指令".
这样有些功放可能会认为错误.
这时就必须要在两条指令之间加入延迟了.
这个时候就需要改变编写程序的策略.
比如:
按下按键,或按下多个按键的时候,不进行直接的发送.
而是把对应的发送标志位置一.
然后,
在主循环while中进行轮询检测标志位.
每次轮询可以用计数器中断进行计数,达到某个值之后进行一次标志位查询.
这样就实现了没有delay的延迟.(可以提高程序运行效率这个后面讲解)
然后,
检测到一个打开功放按键按下的标志位置一,就发送"打开指令".然后跳出.
下一轮接着检测其他标志位有没有置一,如果复位标志置一,就发送"复位指令".然后跳出.
因为每一轮都只响应一个标志位,
并且每一轮之间有若干个中断计数.
从而实现了每条发送指令之间都会有时间间隔.不会出现指令粘连的情况.
这里面其实还是可以设置一个缓存.
然后每次主循环中检测缓存里面是不是按键按下.

上面就是发送指令了,
下面开始讲解接收指令.
接收要和发送区分开来.
好的程序是:
接收就是只管接收,
发送就是只管发送.
当然在很多情况下是不容易做到的.但是要向着这个方向去努力.

接收指令部分,
接收就很简单了.
需要设置一个循环缓存,
如论收到什么,先不管,通通先存到缓存里面.
然后再主循环while中写一个截取循环缓存数据的函数.
比如摘取循环缓存中包头和包尾之间的数据.
这样就可以接收到一条完整的指令了.