嵌入式单片机编程魔法之三权分立-程序员宅基地

技术标签: java  编程语言  人工智能  嵌入式  单片机  

关注、星标公众号,直达精彩内容

ID:技术让梦想更伟大

整理:李肖遥

在单片机编程中,有很多人会因为一些貌似简单的处理而把问题弄得乱七八糟,如林中蛛网一样,错综复杂。

而事实上,根据编程魔法之思想,对程序处理的过程严格划分部门、各施其职、部门内部互不干涉内政,是成功编程的关键。

也许我这样说,很多人还觉得很抽象。因为人人都知道模块化设计的理念,但是又有几人能把这个理念运用自如?

好,为了说明这个问题,我们举一例而示三

现在,我们要编写一个单片机的数据显示程序。

根据单片机编程魔法师的面向对象思想,显然我们要把我们的显示处理进行独立化处理,这种处理的结果是:这个显示处理我们将得到一个显示器对象,这个对象就是一个独立的模块,当我们在对这个显示器对象进行使用的时候,我们不必感觉到这个显示器对象所对应的硬件是什么显示器,例如到底是液晶显示器还是8段数码管什么的。

我们都知道,我们在编程的时候拥有至高无上的ducai权力。但是如果你真的要行使这样的权力,那你和你的程序最终都将会痛不欲生,特别是当你的程序规模不断扩大之后。

对于类似诸如显示器这类的编程,我们首先得从思想上将其理清关系,要做到分块清晰,结构合理。

为了做到这一点,我们就对这种程序使用三权分立。如图:

这幅图,配上三权分立思想,相信大家都能明白吧?这里就不多解释了。很多人会想:这思想想想就能想到。

本例子不考虑图像与动画处理,也不考虑单屏显示不下的问题。

首先,我们考虑三权分立中的数据区的管辖权。

数据区存放显示用的所有数据,我们以字符型显示器为例,数据区保存所有要显示的。

言下之意,其它地方不能有显示所需要的数据。

我们称这个数据区为显存。相信看到这个词,坛友多少能想起点什么吧。

下面我们就简单地对显存进行一个定义:

1#define ROWS        2
2#define COLS          16
3unsigned char vm[ROWS][COLS];

显存定义便结束了。

其显存者,分立三权之其一也。

本来,我们可以直接修改显存以更改显示内容,但是考虑到大通用与大继承,所以我们不能那么做。

因此我们不允许直接读写显存,为此,我们得提供一个通用的读写工具,如下:

1// 功能:写显存
2// 参数:r - 要写入的行
3//           c - 要写入的列
4//           s - 要写入的字符串
5void WriteVM(unsigned char r, unsigned char c, unsigned char *s)
6{
7// 此处调用显示定位函数(本帖不讨论此函数)
8// 此处处理显示字符串
9}

这样一来,我们就有了控制操作显存之大发,接下来,我们就要考虑如何处理显存内容的显示了。

此等大发,诸位魔法师何不先撞头以修炼之?

接下来,显示显存的内容,便成了显示处理的关键。显示显存的内容,无非就两个情况:一是需要不断更新的情况,二是需要即时更新的情况。

如果需要不断更新或有部分内容需要不断更新,这问题就好处理了。只需要提供一个不断刷新显示的函数就可以了,例子如下:

1void showVM(void)
2{
3// 将显存的全部内容即时送显示器,即整屏刷新
4// 部分不需要不断刷新的数据均使用不断更新的思想进行刷新
5// 这种方法不适用单片机处理能力过差的情况
6}

当然,如果有的魔法师不希望使用那种整屏刷新的办法,则只需要修改前面的WriteVM( )函数为边写显存边刷新显示的办法即可。但是这种办法缺乏灵活性,我不建议这样做。因为现在的单片机一般都有足够的能力来处理显示这点事。

当然,写好一个showVM( )并不容易,因为有的显示屏可能会点阵很多。

这个时候,我们就得采用单行扫描法,以降低showVM( )对单片机ALU的占有率。单行扫描法即每次调用只刷新显示器的某一行或某一个部分。这就是《单片机编程魔法师》中的线程处理办法的一个具体的应用。

而当showVM( )写完后,显示器这个原本复杂的对象,也就被我们大大简化了。这简单的两个函数,即分立三权之其二也。

既然为三权分立,以下来说其三。

因为有了其一、其二的思想基础,其三便只是一个极为简单的运用了。我们可以毫无担忧的随处向显存写入要显示的内容,而不必担心它们如何显示、如何刷新。

这显然是一个大好消息。现在我们只需要把这个好消息写在纸上。例如:

 1void main( )
 2{
 3  while(1)
 4  {
 5    ……
 6    WriteVM(x,y,"");   //可以在任何一个位置随意显示内容,而不必考虑任何显示问题,只需要考虑如何填入参数即可
 7    ……
 8    showVM( );        //此处只需一个简单的调用,不必在使用是考虑其它任何问题
 9  }
10}

画此思想的空间框图如下:

最后,再次对此思想的运用做个总结

在我提出裸编程面向对象思想之前,很多人都使用过编程语言所提供的面向对象编程。我也一样,之前使用了很多年。

既然大家都是用过面向对象编程的,这个起点大家都一样,也不值得一提,所以我几乎不说那时候的事情。

既然我提出面向对象的裸化,那就是一定与过去有所不同,否则我就是在这里哗众取宠、吃别人嚼过的馍了,而且这种替他人阿道式的宣传也绝无意义,随便到书店走一趟,相关书籍一大堆。

裸机编程总结

我再次指明:裸编程中的一切思想都是取自于过去的思想、但是又不同于过去的思想,其实现手法与传统的思想并不相同。

裸编程思想忽略了语法的约束,忽略了工具的支持,将传统的思想进行了极大的简化,未引入任何额外的知识,从而让过去只有在足够的硬件、软件支持的方法,能够在无需任何额外软件支持以及只需极其简单的硬件中得以有效的使用。

这种思想与传统思想是一脉而不相同,同科而不同类。

很多人看了书,会认识那些概念都似曾相识,但是似曾相识,不等于获得真理。有没有获得真理,要看你能不能施出魔法。

正如C语言一样,它只用少的符号来描述世界,与人类语言大不相同,如英语、汉语。描述的符号越少,越是难以描述世界。因为符号少,可用的语素也就少。语素少,语法好学,但是用少量的语素去描述无穷的世界,会造成描述方法的复杂。

-END-

整理文章为传播相关技术,版权归原作者所有 |

| 如有侵权,请联系删除 |

往期好文合集

嵌入式大佬 | 嵌入式C语言知识点万字总结

嵌入式牛人 | 这些单片机编程思想超硬核

嵌入式必会!C语言最常用的贪心算法就这么被攻略了

  最 后  

 

若觉得文章不错,转发分享,也是我们继续更新的动力。

5T资源大放送!包括但不限于:C/C++,Linux,Python,Java,PHP,人工智能,PCB、FPGA、DSP、labview、单片机、等等

在公众号内回复「更多资源」,即可免费获取,期待你的关注~

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/best_xiaolong/article/details/111350705

智能推荐

分布式光纤传感器的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告_预计2026年中国分布式传感器市场规模有多大-程序员宅基地

文章浏览阅读3.2k次。本文研究全球与中国市场分布式光纤传感器的发展现状及未来发展趋势,分别从生产和消费的角度分析分布式光纤传感器的主要生产地区、主要消费地区以及主要的生产商。重点分析全球与中国市场的主要厂商产品特点、产品规格、不同规格产品的价格、产量、产值及全球和中国市场主要生产商的市场份额。主要生产商包括:FISO TechnologiesBrugg KabelSensor HighwayOmnisensAFL GlobalQinetiQ GroupLockheed MartinOSENSA Innovati_预计2026年中国分布式传感器市场规模有多大

07_08 常用组合逻辑电路结构——为IC设计的延时估计铺垫_基4布斯算法代码-程序员宅基地

文章浏览阅读1.1k次,点赞2次,收藏12次。常用组合逻辑电路结构——为IC设计的延时估计铺垫学习目的:估计模块间的delay,确保写的代码的timing 综合能给到多少HZ,以满足需求!_基4布斯算法代码

OpenAI Manager助手(基于SpringBoot和Vue)_chatgpt网页版-程序员宅基地

文章浏览阅读3.3k次,点赞3次,收藏5次。OpenAI Manager助手(基于SpringBoot和Vue)_chatgpt网页版

关于美国计算机奥赛USACO,你想知道的都在这_usaco可以多次提交吗-程序员宅基地

文章浏览阅读2.2k次。USACO自1992年举办,到目前为止已经举办了27届,目的是为了帮助美国信息学国家队选拔IOI的队员,目前逐渐发展为全球热门的线上赛事,成为美国大学申请条件下,含金量相当高的官方竞赛。USACO的比赛成绩可以助力计算机专业留学,越来越多的学生进入了康奈尔,麻省理工,普林斯顿,哈佛和耶鲁等大学,这些同学的共同点是他们都参加了美国计算机科学竞赛(USACO),并且取得过非常好的成绩。适合参赛人群USACO适合国内在读学生有意向申请美国大学的或者想锻炼自己编程能力的同学,高三学生也可以参加12月的第_usaco可以多次提交吗

MySQL存储过程和自定义函数_mysql自定义函数和存储过程-程序员宅基地

文章浏览阅读394次。1.1 存储程序1.2 创建存储过程1.3 创建自定义函数1.3.1 示例1.4 自定义函数和存储过程的区别1.5 变量的使用1.6 定义条件和处理程序1.6.1 定义条件1.6.1.1 示例1.6.2 定义处理程序1.6.2.1 示例1.7 光标的使用1.7.1 声明光标1.7.2 打开光标1.7.3 使用光标1.7.4 关闭光标1.8 流程控制的使用1.8.1 IF语句1.8.2 CASE语句1.8.3 LOOP语句1.8.4 LEAVE语句1.8.5 ITERATE语句1.8.6 REPEAT语句。_mysql自定义函数和存储过程

半导体基础知识与PN结_本征半导体电流为0-程序员宅基地

文章浏览阅读188次。半导体二极管——集成电路最小组成单元。_本征半导体电流为0

随便推点

【Unity3d Shader】水面和岩浆效果_unity 岩浆shader-程序员宅基地

文章浏览阅读2.8k次,点赞3次,收藏18次。游戏水面特效实现方式太多。咱们这边介绍的是一最简单的UV动画(无顶点位移),整个mesh由4个顶点构成。实现了水面效果(左图),不动代码稍微修改下参数和贴图可以实现岩浆效果(右图)。有要思路是1,uv按时间去做正弦波移动2,在1的基础上加个凹凸图混合uv3,在1、2的基础上加个水流方向4,加上对雾效的支持,如没必要请自行删除雾效代码(把包含fog的几行代码删除)S..._unity 岩浆shader

广义线性模型——Logistic回归模型(1)_广义线性回归模型-程序员宅基地

文章浏览阅读5k次。广义线性模型是线性模型的扩展,它通过连接函数建立响应变量的数学期望值与线性组合的预测变量之间的关系。广义线性模型拟合的形式为:其中g(μY)是条件均值的函数(称为连接函数)。另外,你可放松Y为正态分布的假设,改为Y 服从指数分布族中的一种分布即可。设定好连接函数和概率分布后,便可以通过最大似然估计的多次迭代推导出各参数值。在大部分情况下,线性模型就可以通过一系列连续型或类别型预测变量来预测正态分布的响应变量的工作。但是,有时候我们要进行非正态因变量的分析,例如:(1)类别型.._广义线性回归模型

HTML+CSS大作业 环境网页设计与实现(垃圾分类) web前端开发技术 web课程设计 网页规划与设计_垃圾分类网页设计目标怎么写-程序员宅基地

文章浏览阅读69次。环境保护、 保护地球、 校园环保、垃圾分类、绿色家园、等网站的设计与制作。 总结了一些学生网页制作的经验:一般的网页需要融入以下知识点:div+css布局、浮动、定位、高级css、表格、表单及验证、js轮播图、音频 视频 Flash的应用、ul li、下拉导航栏、鼠标划过效果等知识点,网页的风格主题也很全面:如爱好、风景、校园、美食、动漫、游戏、咖啡、音乐、家乡、电影、名人、商城以及个人主页等主题,学生、新手可参考下方页面的布局和设计和HTML源码(有用点赞△) 一套A+的网_垃圾分类网页设计目标怎么写

C# .Net 发布后,把dll全部放在一个文件夹中,让软件目录更整洁_.net dll 全局目录-程序员宅基地

文章浏览阅读614次,点赞7次,收藏11次。之前找到一个修改 exe 中 DLL地址 的方法, 不太好使,虽然能正确启动, 但无法改变 exe 的工作目录,这就影响了.Net 中很多获取 exe 执行目录来拼接的地址 ( 相对路径 ),比如 wwwroot 和 代码中相对目录还有一些复制到目录的普通文件 等等,它们的地址都会指向原来 exe 的目录, 而不是自定义的 “lib” 目录,根本原因就是没有修改 exe 的工作目录这次来搞一个启动程序,把 .net 的所有东西都放在一个文件夹,在文件夹同级的目录制作一个 exe._.net dll 全局目录

BRIEF特征点描述算法_breif description calculation 特征点-程序员宅基地

文章浏览阅读1.5k次。本文为转载,原博客地址:http://blog.csdn.net/hujingshuang/article/details/46910259简介 BRIEF是2010年的一篇名为《BRIEF:Binary Robust Independent Elementary Features》的文章中提出,BRIEF是对已检测到的特征点进行描述,它是一种二进制编码的描述子,摈弃了利用区域灰度..._breif description calculation 特征点

房屋租赁管理系统的设计和实现,SpringBoot计算机毕业设计论文_基于spring boot的房屋租赁系统论文-程序员宅基地

文章浏览阅读4.1k次,点赞21次,收藏79次。本文是《基于SpringBoot的房屋租赁管理系统》的配套原创说明文档,可以给应届毕业生提供格式撰写参考,也可以给开发类似系统的朋友们提供功能业务设计思路。_基于spring boot的房屋租赁系统论文