蓝牙,温控风扇制作过程问题记录

来源:互联网 发布:windows to go装win10 编辑:程序博客网 时间:2024/04/28 16:38

蓝牙,温控风扇,从星期1开始利用课余时间到现在已有3天了。刚开始由于用的都是一些以前写过的模板没遇到什么实质性的大问题,都是一些操作上的逻辑问题对程序改一下优化一下就行了,今天下午算是遇到了一个真正学知识的问题。

对于直流电机采用的是比较广泛和成熟的PWM脉冲调制。程序单独写了并下载到单片机里单独运行了一下,没什么问题于是就把他加到了整个工程里面,这时问题出现了(我设计的风扇暂时有4个按键分别是一档,二挡,自动和定时调时 并且定时使用的定时器0中断)电机能旋转但是任何按键都无效。当时就有点没有头绪了,期初以为单片机两个定时器中断不能同时用不过想了想应该不是百度一下的确可以同时用。但是发现有个优先级问题,但是我用的定时器0的优先级是高于定时器1的。那么问题究竟出在哪?

出去转了一圈想想突然发现我的按键不是中断产生的,并且PWM所需要的中断频率过高以至于单片机几乎都处于定时器1的中断中导致所有按键都失效。找到问题所在那么怎么解决?首先我是在每一个按键按下后关闭中断等到按键处理程序结束后再打开中断,这样就能使按键起到作用。修改程序后发现效果不是很理想整理了一下思路发现我的程序时自上而下运行,运行到按键程序处如果这时正好有按键按下则进行按键处理,如果没有按键按下则继续往下执行。每个按键后面都要关中断然后在打开这样很容易乱于是我想整个程序大部分时间无按键操作,如果把按键操作集中于一个函数然后在函数开始前关中断在函数结束后开中断这样应该好一点。在此期间我又把温度显示函数加到了期间防止无法读写温度。经过测试的确效果要好温度也能更新但是有个缺点就是按键时间不能太短要稍有延时否者还是会被程序屏蔽掉。

这次问题是第一次碰到,让我认识到了中断的威力和中断优先级的问题。


这两天把实物做了一下,把程序综合了一下运行后发现有许多BUG,程序运行并不理想老是出现一些意想不到的情况。接下来并没有忙着加入蓝牙程序而是对原有的程序进行调试。的确写一个小程序简单,但是把许多的小程序综合成一个大的程序需很难,他需要考虑到各个程序的影响并且让程序的逻辑更为合理。

经过不断地修改调试,最终的结果还算满意,但是感觉我写的程序在层次上有些混乱不明确。我想这应该是事先没有做好程序规划导致的,但是我又感觉一些逻辑控制上的关系事先并不能想到,很多是在实际运行中发现的,然后再去修改添加程序导致程序有点混乱。

调试到最后程序报了几个警告MULTIPLE CALL TO SEGMENT,以前并没有遇到过,网上搜了一下原因发现问题的原因是在主循环里调用了一个函数,而在中断服务中,你又一次调用了同样的函数。这样当主循环运行到该函数中时,一旦产生中断,则在中断里又再次调用该函数!而使得该子函数发生了重入。解决办法是把程序内容复制一下修改了程序名字。




0 0