×

小白学单片机(16) 单片机/计算机系统概述:模块化思想资料下载

消耗积分:2 | 格式:pdf | 大小:159.84KB | 2021-04-13

分享资料个

模块化思想 模块化是一个很重要的思想,它的应用不仅仅局限在单片机等技术方面,还体现在我们的身体构造,体现在人类社会生产生活中的方方面面。何为模块化思想呢?按照我的理解,模块化思想有几个特点,下面一一道来。 1、分工合作与专一 对生物学有基本认识的人都知道,包括人在内的很多动物是由多种器官构成的,例如大脑负责思考,心脏负责输送血液等。每个器官或组织负责几项功能,各个器官之间协调工作,共同构成一个复杂的整体。 在人类社会中,分工合作的现象也是很常见的。生活中需要吃饭穿衣,在比较落后的年代,可能有一些自给自足的经济形式,自己劳动满足最基本的生活需求。而在现代社会,人的需求越来越多,不可能全部靠自己生产。每个人都专注于自己的特长,例如农民负责种植粮食,服装工人负责制造衣服,养殖户负责养殖,程序员负责编写程序等。各种人分工合作,最后互相交换劳动成果。当一个人长期专注于一件事,而不用担心自己其他的需求时,这个人能把这件事做得更好,总体上来看,社会的生产力也就大大提高了。 2、模块抽象 如果对电脑的基本组成有所了解,可以知道电脑由CPU、内存、硬盘、主板、显示器等几部分组成。如果想在电脑中存储更多的电影,可以考虑更换更大的硬盘。我们只需要知道硬盘是电脑中负责存储的部件,而不关注硬盘内部的构造。因为每个模块都是高度抽象的,内部原理可能很复杂,但是对外部而言,它只是一个能完成特定功能的黑盒子。这样抽象的好处,就是在更换硬盘时,只需要从外部对硬盘有一个抽象的认识,就能轻松解决问题,剩下的就只是花钱购买硬盘了。 3、分层 如果让你管理一个庞大的公司,你会怎么管理?分层管理将会是一个很好的选择。 你可以根据实际情况将公司分为几个部门,研发部、营销部、财务部、人事后勤部等。每个部门指派几个负责人进行管理,每个部门负责指定的工作。而具体到研发部,管理人员为了便于管理,又可能将其分为软件部、硬件部等;而到了软件部,又会有不同的团队,移动客户端开发、服务器端开发等等。这样一层一层进行分下来,每个人各司其职,也体现了分工合作的特点。 如果你是公司的老总,当发现这个月公司的软件产品开发进度非常慢时,可能会直接叫来研发部的总管大发雷霆:“公司的XX软件开发太慢了,你看人家公司的同类产品早就发布出去了。这件事你得尽快给我搞定,要不然就走人!”然后指令一层一层的下达到了最下层的员工,最底层的程序猿们就又要加班加点拼命的干活了。研发进度慢或许只是因为有几个程序员最近有事请假了,但是在这个过程中,你不需要过多关注底层的细节,你也没有太多精力去关注,而只是把整个研发部当做一个抽象的整体去对待,这也体现了模块抽象的特点。 模块化设计的方法原则 前面说了模块化思想的特点,模块化思想应用很广泛,而根据这种思想设计系统,就是模块化设计了。不只是单片机系统,计算机软硬件系统也可以充分利用模块化设计。这里先说一说模块化设计的方法思路。 对于初学者,对此只需要先有个大概的认识,没有实际设计过,对这些思想也不容易有所感触;后来需要设计实际系统时,有需要回来再看看这篇就好了。 1、自顶向下,逐步求精;逻辑设计与物理实现分离;自底向上 当要设计一个比较复杂的系统时,常常会先画框图,每个框表示一个抽象的功能模块。通过框图可以设计这些模块之间的逻辑关系,然后再细化去设计每个模块。而这样一个模块可能也比较复杂,这时又会将其拆分为更小的模块。这样一步一步的拆分模块,直到最后技术细节实现。这就是自顶向下的设计方法,将一个复杂问题进行分解,逐步求精。而框图的设计则是模块之间的逻辑设计,逻辑设计与每个模块的具体物理实现可以完全分离。 和自顶向下的设计方法相比,还有一种恰恰相反的思路:自底向上。先设计出一些核心模块,然后再逐步进行扩展和完善。完全的自底向上的方法只适合设计小型的系统。在实际应用中,往往是结合这两种方法进行设计。 2、模块独立,减小耦合度 模块化设计中很重要的一个思想是模块独立,减小模块之间的耦合度。也就是说,每个模块负责完成自己的功能,不同的模块之间关联要尽可能小,以免互相影响。 想给电脑换一个更大的硬盘时,一般不用考虑内存等其他模块会不会受到影响,要不然实在是太麻烦了。因为电脑的模块化设计非常规范,模块之间的关联很小。 减小耦合度这种看似简单的问题,实际上在设计的时候却相当麻烦,为了减小耦合度,需要使用很多技术来完成,后面会在实际操作中进行介绍。 3、模块标准化,可代换 有同学觉得自己的电脑反应太慢,网上一查,原来电脑慢很大可能是因为机械硬盘的速度太慢。相比硬盘,CPU和内存要快很多,所以就如木桶效应,电脑被最慢的硬盘给拖慢了速度。于是就给电脑换上了固态硬盘,顿时速度快了很多。 固态硬盘和机械硬盘的内部结构是完全不一样的。机械硬盘是依靠磁性盘片存储数据的,读写时需要机械结构带动盘片转动,机械转动速度不能太快(2.5寸机械硬盘以7200转每分钟的速度旋转,盘片边缘的速度能达到86km/h),太快了盘片可能会直接破裂,或者发热量巨大,所以读写速度远远没有电子器件快。而固态硬盘使用的就是电子芯片来实现数据存储,所以速度非常快。 两种硬盘虽然原理和性能差距都很大,但是却能很轻松的安装在同一台电脑上,只要保证一些参数匹配,例如都是2.5寸的。这是因为现有的不同硬盘设计的都是标准化的,硬盘的尺寸、接口等都有标准规范,所以能很轻松的代换。 4、模块通用性,适用于多种产品 几年以前的手机等数码产品,不同品牌、不同设备分别由不同的人和公司设计,充电的接口各不相同,充电器也都是每个数码产品专门配备一套,出门旅行带的数码产品一多,仅仅是大大小小的各种充电器就够让人烦了。而且充电器坏了只能重新买配套的充电器。这样的设计浪费了很多资源,也给人们的生活带来了很大的不便。 而近几年,MP3、MP4、手机等数码产品的充电器接口慢慢被统一起来,很多设备都可以使用通用的USB充电头和数据线进行充电。对于用户来说方便多了;对于设备制造商来说,也不是很有必要单独设计充电器,直接用标准充电器就可以了;还节约了资源,例如有些数码设备充电器是可以选配的,有充电器就不用再进行购买了。通用的充电头和手机充电接口设计,使得一个充电器可以用于多种产品。 通用性和前面一点标准化,两者其实都可以理解成,设计一个模块或系统,都要遵循一定的标准化规范。一个标准化的模块,可以应用于不同的系统(通用充电器给多种设备充电);而符合统一标���的多个同类模块,可以用于同一个系统(机械硬盘和固态硬盘都能装进电脑)。 模块化设计的优缺点 前面通过举例,已经明确的体现了模块化设计的很多优点,这里对其特点进行一个总结。 1、便于分工合作 对于一个实际产品,很多时候不是一个人开发的,而是很多人共同开发。这里的原因有很多,可能是因为时间比较紧,例如公司之间的竞争,谁最先开发并发布新的产品,就最有可能抢占市场;可能是因为系统太庞大,一个人一辈子也做不完,例如操作系统的代码量往往能达到几百万行;分工合作还会提高整体效率,前面已经说过了。 多个人开发同一个系统,模块化开发是最好的选择。一些人专注于一个领域,例如安卓程序、平面设计、服务器等,每个人负责开发和他的专注领域匹配的小模块,而另外一些知识面比较广、经验丰富的人,负责模块之间的逻辑组合,最后将整个系统整合到一起。这个过程也可能会有分层,系统分成大的模块,再拆分成小的模块,逐层分解并实现。 2、提高开发效率 一方面,分工合作的方式能提高效率;另一方面,运用已经实现好的模块,像积木一样搭建新的系统,更是让效率大大提高。 模块的开发,可能是很多人分别完成的,也可能是同一个人在不同时期完成的,还有可能是从别人那免费获得或购买的。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !

'+ '

'+ '

'+ ''+ '
'+ ''+ ''+ '
'+ ''+ '' ); $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code ==5){ $(pop_this).attr('href',"/login/index.html"); return false } if(data.code == 2){ //跳转到VIP升级页面 window.location.href="//m.obk20.com/vip/index?aid=" + webid return false } //是会员 if (data.code > 0) { $('body').append(htmlSetNormalDownload); var getWidth=$("#poplayer").width(); $("#poplayer").css("margin-left","-"+getWidth/2+"px"); $('#tips').html(data.msg) $('.download_confirm').click(function(){ $('#dialog').remove(); }) } else { var down_url = $('#vipdownload').attr('data-url'); isBindAnalysisForm(pop_this, down_url, 1) } }); }); //是否开通VIP $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code == 2 || data.code ==5){ //跳转到VIP升级页面 $('#vipdownload>span').text("开通VIP 免费下载") return false }else{ // 待续费 if(data.code == 3) { vipExpiredInfo.ifVipExpired = true vipExpiredInfo.vipExpiredDate = data.data.endoftime } $('#vipdownload .icon-vip-tips').remove() $('#vipdownload>span').text("VIP免积分下载") } }); }).on("click",".download_cancel",function(){ $('#dialog').remove(); }) var setWeixinShare={};//定义默认的微信分享信息,页面如果要自定义分享,直接更改此变量即可 if(window.navigator.userAgent.toLowerCase().match(/MicroMessenger/i) == 'micromessenger'){ var d={ title:'小白学单片机(16) 单片机/计算机系统概述:模块化思想资料下载',//标题 desc:$('[name=description]').attr("content"), //描述 imgUrl:'https://'+location.host+'/static/images/ele-logo.png',// 分享图标,默认是logo link:'',//链接 type:'',// 分享类型,music、video或link,不填默认为link dataUrl:'',//如果type是music或video,则要提供数据链接,默认为空 success:'', // 用户确认分享后执行的回调函数 cancel:''// 用户取消分享后执行的回调函数 } setWeixinShare=$.extend(d,setWeixinShare); $.ajax({ url:"//www.obk20.com/app/wechat/index.php?s=Home/ShareConfig/index", data:"share_url="+encodeURIComponent(location.href)+"&format=jsonp&domain=m", type:'get', dataType:'jsonp', success:function(res){ if(res.status!="successed"){ return false; } $.getScript('https://res.wx.qq.com/open/js/jweixin-1.0.0.js',function(result,status){ if(status!="success"){ return false; } var getWxCfg=res.data; wx.config({ //debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 appId:getWxCfg.appId, // 必填,公众号的唯一标识 timestamp:getWxCfg.timestamp, // 必填,生成签名的时间戳 nonceStr:getWxCfg.nonceStr, // 必填,生成签名的随机串 signature:getWxCfg.signature,// 必填,签名,见附录1 jsApiList:['onMenuShareTimeline','onMenuShareAppMessage','onMenuShareQQ','onMenuShareWeibo','onMenuShareQZone'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2 }); wx.ready(function(){ //获取“分享到朋友圈”按钮点击状态及自定义分享内容接口 wx.onMenuShareTimeline({ title: setWeixinShare.title, // 分享标题 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享给朋友”按钮点击状态及自定义分享内容接口 wx.onMenuShareAppMessage({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 type: setWeixinShare.type, // 分享类型,music、video或link,不填默认为link dataUrl: setWeixinShare.dataUrl, // 如果type是music或video,则要提供数据链接,默认为空 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ”按钮点击状态及自定义分享内容接口 wx.onMenuShareQQ({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到腾讯微博”按钮点击状态及自定义分享内容接口 wx.onMenuShareWeibo({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ空间”按钮点击状态及自定义分享内容接口 wx.onMenuShareQZone({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); }); }); } }); } function openX_ad(posterid, htmlid, width, height) { if ($(htmlid).length > 0) { var randomnumber = Math.random(); var now_url = encodeURIComponent(window.location.href); var ga = document.createElement('iframe'); ga.src = 'https://www1.elecfans.com/www/delivery/myafr.php?target=_blank&cb=' + randomnumber + '&zoneid=' + posterid+'&prefer='+now_url; ga.width = width; ga.height = height; ga.frameBorder = 0; ga.scrolling = 'no'; var s = $(htmlid).append(ga); } } openX_ad(828, '#berry-300', 300, 250);