嵌入式工程师,解析硬核单片机编程思想!
李肖遥
共 12117字,需浏览 25分钟
·
2020-11-18 02:46
关注、星标公众号,直达精彩内容
ID:技术让梦想更伟大
整理:李肖遥
一个数据结构,一个模块形成,一个单片机的指令,一个硬指令的运行机制,一个口线的驱动方式,一个中断的顺序,一个跳变的延迟,一个代码的位置,一个逻辑的组织,一个模块与模块之间的生(运行时的状态)死(不运行时的状态)关系等等,都是裸程序思想的组成部分。
二、裸编程具体做法
我们知道网络传输标准层次有七层:应用层、表示层、会话层、传输层、网络层、链路层、物理层,这么多层做什么用?也许理解这样分层的概念也十分辛苦,但是理解这样分层的思想,就容易多了,而且这也是我们硬件工程师们最应该借鉴的思想,让我们的硬件设计更具有标准性和前瞻性。
这个七层的思想从根本上讲就是将一个网络传输产品细化,让不同的制造商选择一个适合自己的层次开发自己的产品,层次不一样,他们所选择的开发基础和开发内容就不一样,高一层开发者继承低层开发者的成果,从而节省社会资源,提高社会生产力。对这个指导思想我就不赘述了,各位自己去理解,这里要说的是,微机上的面向对象编程思想就是如同在应用层上实现的思想,而裸程序的面向对象思想则如同在链路层上实现的思想,他下面没有软件开发包,只有物理构架。但是在应用层上实现的思想,最终都要翻译到物理构架上。
但是面向对象的思想不是这样做的,而是首先把显示器当作一个对象,该对象具有一些功能和一些变量属性,不同的显示器在对象中使用相同的代码标识,如函数指针(C语言中),这样对于任何一个不同的显示器,在调用时都使用同样的代码。也许有人说,传统的做法这样也可以做呀,为什么要弄得罗里吧唆的呢?其实不然,使用了正确的思想的好处在前头已经说了好多了,如果还模糊就上去再看一次。
三、准备工作
dispShowAChar();//显示一个字符
dispShowALine();//显示一行字符
dispMainThread();//按指定的要求执行显示功能
//指定的要求包括颜色信息、闪烁、游动等等
四、展开思想
dispGetMaxCol();//取一行最多有多少列
dispGetMaxRow();//取显示器一共有多少行
dispGetMaxColors();//取显示器最多有多少色
dispSetShowMode();//设置显示的方式,对于不支持的显示方式就自动转为正常显示
dispSetWorkMode();//设置工作模式,如果没有的模式就返回0,支持的就返回1
五、数据传递与程序逻辑是同等重要的
#defineMonitor02_MaxColors0x0001
UINTdispGetMaxColors()
{
returnMonitor02_MaxColors;
}
#defineMonitor_000
#defineMonitor_011
#defineMonitor_022
UINTdispGetMaxColors()
{//以下用多出口,但这并不会破坏什么,为节约代码,完全可以使用
switch(MonitorType)
{
caseMonitor_01:returnMonitor01_MaxColors;
caseMonitor_02:returnMonitor02_MaxColors;
}
returnMonitor00_MaxColors;//缺省则返回默认显示器
}
#defineMax_Monitor_Types3***
#defineMonitor00_MaxColors1
UINTcodeMonitorMaxColorsArray[Max_Monitor_Types]=
{Monitor00_MaxColors,//缺省为单色
Monitor01_MaxColors,
Monitor02_MaxColors,
};***
UINTdispGetMaxColors()
{
returnMonitorMaxColorsArray[MonitorType];
}
六、父对象接口函数与子对象功能剥离
七、裸程序设计中面向对象思想的层次关系
相信这张图已经足够说清楚我们在KeilC中如何用语言来组织我们的显示器对象disp了。disp是一个抽象的对象,它只是一种联系,完成对所有子对象d000、d001、d002到最多d255的归纳概括并提供一组被调用者所使用的功能接口。这些功能接口正是上贴所提到的函数指针。而具体的功能实现及不同显示对象对数据结构的要求,我们都可以交给子对象设计工程师自己去决定。
推荐阅读:
嵌入式编程专辑 Linux 学习专辑 C/C++编程专辑 Qt进阶学习专辑 关注微信公众号『技术让梦想更伟大』,后台回复“m”查看更多内容;扫描下方微信,加作者微信进技术交流群,请先自我介绍喔。
评论