![](https://img-blog.csdnimg.cn/20200909093634255.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
单片机
单片机软硬件技术
银铠电子
电路板软硬件开发、生产,
单片机,ARM,上位机,云服务,电子产品,自动控制
展开
-
谨慎处理单片机中断,中断等价于比主程序优先级更高的线程
有些小伙伴喜欢在单片机中断里做任务,殊不知可能会因此遇到棘手的bug,然后查半天查不出个所以然。本文为了纠正这个不良习惯,对单片机中断进行阐述。 无中断时,单片机跑着主程序,当中断时,单片机进入中断服务程序。所以,中断其实是比主程序优先级更高的线程,定时中断、串口中断,每一个中断都是一个线程。既是多线程,那必然有资源共享冲突问题。所以,小小单片机,背负着“多线程”的重任。共享资源冲突,可能是全局变量访问冲突,或是函数调用冲突。 全局变量访问冲突,是在主程序中读写一个全局变量时,中断来了,在中断服务程序原创 2020-09-12 17:19:17 · 1549 阅读 · 1 评论 -
一个简单实用的MCU程序框架(非操作系统,简单调度任务) - 串口接收环形缓冲区
前面的文章介绍了一个简单实用的MCU程序框架,定时节拍的加入,这一篇文章来介绍串口接收怎样加入到框架中。 单片机的串口接收通常是在中断里。如果数据解析在串口里边,那很多跟主程序共享的资源就容易冲突了。如上一篇文章讲的,中断其实是比主程序优先级更高的线程,定时中断、串口中断,每一个中断都是一个线程。既是多线程,那必然有资源共享冲突问题。详细情况,可以查看我的另一篇博文:谨慎处理单片机中断,中断等价于比主程序优先级更高的线程。所以正确的做法,是先在中断里缓存起来,然后再在主循环判断接收缓冲区是否有数据,有则原创 2020-09-12 11:25:25 · 632 阅读 · 0 评论 -
一个简单实用的MCU程序框架(非操作系统,简单调度任务) - 总体介绍
一个简单实用的MCU程序框架(非操作系统,简单调度任务) - 总体介绍 单片机程序,总体上可分为跑操作系统的和没操作系统,对于无MMU的小单片机,操作系统通常是UCOS、RTOS等实时操作系统。实际上,在我的使用过程中发现,应用这类实时操作系统的场景其实非常小,更多的应用无需操作系统,要做的只有简单的几个事情。 在无操作系统的程序上,如果没有一个框架,代码凌乱、易冲突,调试程序非常麻烦。这就像刚开始写单片机程序的时候,要加个闪灯的程序,都要折腾一番。本文介绍的,是一个简单实用的MCU程序框架,简化程序开原创 2020-09-10 16:30:28 · 2036 阅读 · 0 评论