其实聊这个话题多多少少还是有点心虚的,因为到现在我也只是摸索到了门口,但为啥还是想聊这个话题呢? 可能是因为热爱。。。也可能是不甘心。。。所以一路从入门到入门到再入门。。。 拥有八年单片机软件开发的经验的我想到这个问题的时候,还是会心慌,说实话我不知道该怎么写,我只会那个最简单的套路。。。
裸奔时代:查过专业的资料以后,我知道了一个名词叫前后台程序,记不清到底谁算前台谁算后台 暂且理解为前台有个中断程序,后台有个超级循环在不停工作:
后来觉得这样搞不行,现在都开始流行RTOS了,你要不上个RTOS,面试你都不好意思和别人say hello ,于是,学习freeRTOS 跑了个例程放弃了 ,学习UCOS,因为不免费放弃了,学习RTthread,写了个简单的面板显示的项目,放弃了。放弃不代表他们不够优秀,而是我不够优秀,写着写着又回到了我以前的老路,多多少少是有点 成长的,聊以自慰吧。 应用RTOS我大概是这样写的:
后来写着写着发现又回到了裸机的套路,蓝瘦啊,但是还是学到了一点,就是程序其实是有控制权的,当你裸奔的时候,程序的控制权就在你的手里,因为这个时候整个程序就只有应用程序(你自己写的部分) 真正移植RTOS以后,发现需要移植系统的很多代码,这个时候,程序就分为应用部分和系统部分,而控制权是属于系统所有的, 只是再运行过程中,需要某个应用程序运行的时候,系统把控制权下放给你,等你运行完了,再把控制权交给系统,这里交出是必须的 大概分为主动上交和被抢走,主动上交就是相当于执行系统提供的sleep,我完事了,要睡了,这个时候控制权回归系统。 另一种情况,我就是不交,哪怕没事儿我也要占着,这时候系统会根据计算你已经获得控制权的时间,如果超过了我给你规定的时候,就强行 给你关灯盖被子。
这是两种不同的方式的本质区别,这里用方式而没有用构架二字,是因为这并不是我想要获得的知识。 我想要的知道这个单片机程序到底该怎么写?你引入了系统他不会告诉你应该怎么写。
传统我们应用的构架我称为是顺序式程序构架,这个玩意儿基本不用教,看一遍大家都会了。 那么另一种更加优美的构架方式是什么呢?或许有人会讲当然是面向对象了,但是面向对象只是一种思想,并不是一种程序构架,其实也是 说对了一半,我想要获得的是那种基于面向对象的思想而实现程序构架。
假如你搞过 安卓 C# 等等一系列开发应用程序的软件以后,你就知道了另一种构架其实是:事件驱动型构架。
目前我只知道这两种了,你要知道第三种,请一定要告诉我,后面会边学边分享给大家这种东西到底怎么在单片机上玩。 当你掌握了这种构架的核心,变成你自己的东西,你就再也不想回到那个通篇if else的结构当中了。