问题发现
我们会发现,同时存在定时器中断和数码管操作时,有时会导致数码管显示异常。
原因探究
在定时器中断函数中不要操作P2和P0,因为定时器(T)和主板(M)的时钟频率不一样。有可能导致M刚操作完P2,T又去操作P0,导致正确的P2和P0没有成对出现,会造成数码管重影、闪烁之类的“异步冲突”。
解决方案
在《计算机操作系统》课程中,我们采用信号量机制来协调这种“互斥”操作。但是单片机里面我们只需要在定时器中断里面操作标志变量K,在M中判断K的值根据K值不同做出不同的操作。这样操作P2和P0的操作就全在M里面进行,也能成对出现了,不会导致“异步冲突”。
示例
总结
这个问题一直困扰了我很久,之前有人给我讲过但是没说原因,导致我后面就忘了。后来又遇到这个问题就下定决心搞清楚。其实也是恰好我们的《计算机操作系统》课给了我一些启发。这告诫我在平时的学习过程中一定要多思考,多联系已学的知识。如有问题欢迎大家给我指正!