单片机程序里面,经常听说底层,中间层,应用层,什么意思? 51单片机也需要这么分层吗?

分这么多层有什么用?51性能本来就不好,会不会影响执行效率?... 分这么多层有什么用?51性能本来就不好,会不会影响执行效率? 展开
 我来答
情感导师九九
高能答主

2020-04-29 · 人生如逆旅,你我亦行人!
情感导师九九
采纳数:370 获赞数:44416

向TA提问 私信TA
展开全部

一般当程序比较大、功能比较繁多,需要进行结构化程序设计的时候,才会进行分层。分层的好处是可以将应用与硬件剥离,当硬件发生变更(移植,设计更改)时只需改动底层以及少量中间层;当需求发生变更时只需改动上层以及少量中间层。

底层一般是直接访问硬件的接口,以串口而言如寄存器操作函数;中间层一般是在底层与上层之间进行数据及信息的转换,以串口而言如封包/拆包/消息产生/消息响应;上层一般面向应用,在很少考虑硬件实现的前提下以通用的方式实现所需的功能,以串口而言如printf。

分这么多层是为了不同程度的开发人员可以同期工作的原因。比如说,底层就雇佣一个特别熟悉芯片和硬件的人做,中间层大概要找比较熟悉应用的人来把硬件功能来做扩展,应用层就随便抓一把人来开发了。

这样,多个项目可以公用一个硬件层,有两到三组中间层的支持工程师,然后每个项目各有一组应用工程师就好了。51也可以这样做,这和效率无关,层做得好,执行效率不会影响很大,开发效率提高很多。

扩展资料:

单片机的应用:

1,通用专用:

这是按单片机适用范围来区分的。例如,80C51是通用型单片机,它不是为某种专用途设计的;专用型单片机是针对一类产品甚至某一个产品设计生产的,例如为了满足电子体温计的要求,在片内集成ADC接口等功能的温度测量控制电路。

2,线型应用:

这是按单片机是否提供并行总线来区分的。总线型单片机普遍设置有并行地址总线、数据总线、控制总线,这些引脚用以扩展并行外围器件都可通过串行口与单片机连接,另外,许多单片机已把所需要的外围器件及外设接口集成一片内,因此在许多情况下可以不要并行扩展总线,大大减省封装成本和芯片体积。

3,控制型应用:

这是按照单片机大致应用的领域进行区分的。一般而言,工控型寻址范围大,运算能力强;用于家电的单片机多为专用型,通常是小封装、低价格,外围器件和外设接口集成度高。 显然,上述分类并不是唯一的和严格的。例如,80C51类单片机既是通用型又是总线型,还可以作工控用。

wolf_lhy
推荐于2017-10-11 · TA获得超过6608个赞
知道大有可为答主
回答量:1090
采纳率:66%
帮助的人:537万
展开全部
分层写的好处有三:
1 开发的快速性
诚如楼上那位所言,把一个工程分成 底层\中间层\应用层编写,程序员也分为底层程序员,
中间层程序员,应用层程序员,只要三者协调好了,那么开发过程可以并行进行,节省开发时间,
缩短周期,能快速占领市场,也有利于公司产品的保密
2 系统安全性与程序可读性
这个举例说明:比如空调系统,当室内温度高于30度或者室内湿度高于60时,开启压缩机,
如果高压或者低压,则关闭压缩机
//----以下是举例----------------------
sbit Compress = P1^1;
unsigned char CmpOpen = 0;
unsigned char Temperature = 0,Humidity = 0;
unsigned char CmpErr = NO_Err;

//----以下是应用(中间)程序----------------------
if((Temperature >= 30)||(Humidity > 60))
{
CmpOpen = OPEN;

}
if((CmpErr == HIGHPRESS)||(CmpErr == LOWPRESS))
{
CmpOpen = NO_OPEN;
}
//----以下是底层程序----------------------
if(CmpOpen == OPEN)
{
Compress == OPEN;

}
else
{
Compress == CLOSE;
}
以上例程中,通过CmpOpen这个变量的状态,决定了最终单片机引脚的状态,使得实际中
压缩机只开一次,如果你用Compress代替应用层中的CmpOpen,那么有可能会现瞬间压缩机一开一关
,对压缩机来说,必然将损坏,不安全.
如果又为了安全,又直接操作底层,程度就得改成这样
if(((Temperature >= 30)||(Humidity > 60))&&(CmpErr != HIGHPRESS )&&(CmpErr != LOWPRESS))
{
Compress = OPEN;

}
可读性不好,也不方便调试.
3 可移植性
还以上个程序为例,如果你的MCU换成了AVR ATmega16,你是不是还要完全重写程序呢?
答案是只重写底层部分就行,如下:
#define Compress PORTA
unsigned char CmpOpen = 0;
unsigned char Temperature = 0,Humidity = 0;
unsigned char CmpErr = NO_Err;

//----以下是应用(中间)程序----------------------
if((Temperature >= 30)||(Humidity > 60))
{
CmpOpen = OPEN;

}
if((CmpErr == HIGHPRESS)||(CmpErr == LOWPRESS))
{
CmpOpen = NO_OPEN;
}
//----以下是底层程序,只需要修改这个----------------------
if(CmpOpen == OPEN)
{
Compress |= 0x01;

}
else
{
Compress &= ~(0x01);
}
试想,如果你把底层写到了应用层中,
if((Temperature >= 30)||(Humidity > 60))
{
CmpOpen = OPEN;

}
if((CmpErr == HIGHPRESS)||(CmpErr == LOWPRESS))
{
CmpOpen = NO_OPEN;
}
那么修改量不是很大?移植过程不是很麻烦?
我使用的例程只是很简单的,实际运用中,要复杂很多,就更要分层,以方便移植.
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
neotsu
2012-12-26 · TA获得超过6070个赞
知道大有可为答主
回答量:1572
采纳率:100%
帮助的人:1572万
展开全部
追加几分吧。

分这么多层是为了不同程度的开发人员可以同期工作的原因。

比如说,底层就雇佣一个特别熟悉芯片和硬件的人做,中间层大概要找比较熟悉应用的人来把硬件功能来做扩展,应用层就随便抓一把人来开发了。

这样,多个项目可以公用一个硬件层,有两到三组中间层的支持工程师,然后每个项目各有一组应用工程师就好了。

51也可以这样做,这和效率无关,层做得好,执行效率不会影响很大,开发效率提高很多。

另外51都有100Mhz的了,还算性能不好?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式