1 8位MCU和32位MCU的使用案例资料下载-德赢Vwin官网 网
×

8位MCU和32位MCU的使用案例资料下载

消耗积分:5 | 格式:pdf | 大小:241.91KB | 2021-04-22

31274

分享资料个

本文比较了8位元MCU和32位元MCU的使用案例,可作为如何选择这两种MCU架构的指南使用。 本文大部分32位元范例将关注于ARM Cortex-M装置,Cortex-M在不同MCU供应商产品组合中表现非常相似。由于8位元MCU有很多种架构,所以很难对8位元供应商之间进行类似的产品比较。为了进行比较,本文将使用广泛应用、易于理解的8051 8位元架构。 事实上,「ARM Cortex和8051哪个比较好」不是个逻辑问题,反而像是在问「吉他和钢琴哪个好」?真正要解决的问题是「哪种MCU最能帮助解决目前面临的问题?」。 不同的任务须使用不同的工具,使用者目的是要了解「如何才能善用所拥有的工具」,包括8位元和32位元装置。 对不同的装置进行比较,须要对其进行测量。有很多建构工具可供选择,本文尽量选择一些认为能够进行最公平的比较,且最能代表开发人员真实体验的情境。 以下ARM资料是透过GCC nanoCLibrary和-03最佳化选项所生成。 此一比较试验并不为任何一种装置的代码最佳化,只是简单实现90%开发人员都会使用的常见代码,并呈现普通开发人员所见到的结果,而不是理想状态下的结果。当然,花费诸多时间、精力和财力去调整8051代码使其表现胜过ARM是可能的,反之亦然,但一开始就选择适合该项工作的最佳工具比费尽心力做最佳化简单多了。 8位元MCU功效持续精进 在开始对架构进行比较前,要注意到并非所有的MCU都是一样,这一点非常重要。 如果将基于ARM Cortex-M0 处理器的现代MCU与30年前的8051 MCU做对比,8051 MCU在性能上当然不会胜出。幸运的是,许多供应商一直对8位元处理器持续投资。 例如芯科实验室(Silicon Labs)正持续更新基于8051核心的EFM8 MCU产品线,其效能比原始的8051架构更高,而且开发过程也已实现现代化。所以在许多应用中,8位元核心能够容易弥补比M0 或M3核心不利的地方,甚至在一些方面性能更佳。 开发工具也很重要。现代嵌入式韧体开发需要全功能IDE、现成的韧体库、丰富的范例、完整的评估和入门套件,以及助手应用,以简化硬体设定、资料库管理和量产编程之类的工作。当MCU有了现代化的8位元核心和开发环境时,在很多情况下,这样的MCU将超越基于ARM-Cortex的类似MCU。 以系统规模选择MCU 第一个一般性原则是:ARM Cortex-M核心更适用于较大的系统规模(》64KB代码),而8051装置适用于较小的系统规模(《8KB代码)。中等规模的系统可以选择两种方式,这取决于系统要执行的任务。须要注意的是,在大多数情况下,周边组合将会发挥重要作用。如果需要三个UART、一个LCD控制器、四个时脉和两个ADC,使用者可能不会在8位元MCU上找到所有的周边。 易用性与成本/尺寸之比较 对于中等规模的系统来说,使用任何一种架构都可以完成工作。但主要须考量是选择ARM核心带来的易用性,还是8051装置带来的成本和物理尺寸优势。 ARM Cortex-M架构具备统一的储存模式,并在所有常见编译器中支援完整的C99,这使得该架构非常易于写韧体。此外,还可得到一系列资料库和协力厂商代码。 当然,这种易用性的代价就是成本。对于高复杂性、上市时间较短的应用或缺乏经验的韧体开发人员来说,易用性是个重要因素。 比起32位元MCU,8位元MCU的成本颇具优势。使用者经常会发现内建2KB/512B(Flash/RAM)的小容量8位元MCU,而却很难找到低于8KB/2KB的32位元MCU。在不需要很多资源的系统中,储存容量小的MCU能够让系统开发人员获得显著的成本降低。因此,对成本极为敏感或仅需较小储存容量的应用,会更倾向于选择8051解决方案。 8位元晶片通常也具备物理尺寸上的优势。例如Silicon Labs提供的最小32位元QFN封装为4mm×4mm,而基于8051的8位元晶片的QFN封装可小至2mm×2mm。 晶片级封装(CSP)的8位元和32位元架构之间的差异较小,但却使成本增加,且组装较难。对于空间严格受限的应用来说,通常须要选择8051装置来满足限制要求。 通用代码/RAM效率易影响MCU成本 8051 MCU成本较低的主要原因之一是其使用Flash和RAM的效率通常比ARM Cortex-M核心更高,这允许系统采用更少资源实现。系统越大,这种影响就越小。 然而,这种8位元储存资源的优势并不总是如此,这一点很重要。在某些情况下,ARM核心会像8051核心一样高效或比其更高效。例如32位元运算在ARM MCU上仅需要一条指令,而在8051 MCU上则需要多条8位元指令。显然,这种代码在ARM架构上有更高的执行效率。 ARM架构在Flash/RAM尺寸较小时的两个主要缺点是代码空间效率和RAM使用的可预测性。首要也是最明显的问题是通用代码空间效率。8051核心使用1位元组、2位元组或3位元组指令,而ARM核心使用2位元组或4位元组指令。 通常情况下,8051指令更小,但这一优势因实际上花费许多时间而受到削弱,ARM核心比8051在一条指令下能做更多工作。32位元运算就是这样一个范例。以实践来说,指令宽度是能在8051上产生适度的更密集代码。 代码空间效率 在含有分散式存取变数的系统中,ARM架构的载入/储存架构通常比指令宽度更为重要。试想讯号量的实现,一个变数需要在代码周围的多个不同位置进行减量(分配)或者增量(释放)。ARM核心必须将变数载入到暂存器,对其进行操作并重新储存,这需要三条指令。另一方面,8051核心可以直接在记忆体位置上进行操作,且仅需一条指令。随着每次对变数完成工作量的增大,由载入/储存而产生的消耗就变得微不足道。但对于每次仅完成一点工作的情况来说,载入/储存能产生重要影响,让8051获得明显的效率优势。 尽管讯号量在嵌入式软体中并非常见结构,但简单的计数器和标志却广泛应用于控制导向的应用中并发挥相同的作用。许多常见的MCU代码都属于这一类型。 另一个原因是ARM处理器比8051核心具有更多的自由使用堆叠。通常情况下,8051装置针对每次函式呼叫仅在堆叠上储存返回位址(2位元组),透过通常分配给堆叠的静态变数处理大量的任务。在某些情况下,这会产生问题,因为这会造成函数预设不可重入。然而,这也意味着必须保留的堆叠空间很小,且完全可预测,这在RAM容量有限的MCU中至关重要。 举个简单的例子,试验者设计了以下程式,然后测量funcB内部的堆叠深度(图1),发现M0 核心的堆叠用了四十八个位元组,而8051核心的堆叠仅用了十六个位元组。当然,8051核心还静态配置了八个位元组的RAM,总共用了二十四个位元组。在较大的系统中,这个差异显得微不足道,但是在仅有256位元组的ARM的系统中,这就变得很重要。 图1 测量funcB内部堆叠程式示意图 架构细节之考量 假设有基于ARM和基于8051的MCU各一个,配有所需的周边,那么对于较大的系统或需要重点考虑易用性的应用来说,ARM装置是更好的选择。如果首要考量的是低成本/小尺寸,那么8051装置将是更好的选择。本文以下对于每种架构更擅长的应用进行更详细的分析,同时也划分出一般原则。 影响延时因素 两种架构的中断和函式呼叫延时存在很大差异,8051比ARM Cortex-M核心更快。 此外,高阶周边汇流排(APB)配备的周边也会影响延时,这是因为资料必须透过APB和AMBA高性能汇流排(AHB)传输。最后,当使用高频核心时脉时,许多基于Cortex-M的MCU需要分配APB时脉,这也增加了周边延时。 试验者做了个简单的实验,实验中的中断是透过I/O引脚触发的。该中断对引脚发出一些讯号,并根据引发中断的引脚更新标志,之后再量测其部分参数的变化。图2为此次32位元Cortex-M与8051对照实验的程式码与参数比较。 图2 测试程式码与所得结果参数 8051核心在中断服务程式(ISR)进入和退出时显示出优势。但是,随着中断服务程式(ISR)越来越大和执行时间的增加,这些延迟将变得微不足道。和既有原则一致,系统越大,8051的优势越小。此外,如果中断服务程式(ISR)涉及到大量资料移转或大于8位元的整数资料运算,中断服务程式(ISR)执行时间的优势将转向ARM核心。例如,一个采用新样本更新16位元或32位元转动平均(Rolling Average)的ADC ISR可能在ARM装置上执行的更快。 控制vs处理 8051核心的基本功能是控制代码,其中对于变数的存取是分散的,并且使用了许多控制逻辑(If、Case等)。8051核心在处理8位元资料时也是非常有效的,而ARM Cortex-M核心擅长资料处理和32位元运算。此外,32位元资料通道使得ARM MCU复制大的资料更加有效,因为它每次可以移动四个位元组,而8051每次仅能够移动一个位元组。因此,那些主要把资料从一个地方移到另一个地方(例如UART到CRC或者到USB)的资料流处理应用更适合选择基于ARM处理器的系统。

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

评论(0)
发评论

下载排行榜

全部0条评论

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

'+ '

'+ '

'+ ''+ '
'+ ''+ ''+ '
'+ ''+ '' ); $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code ==5){ $(pop_this).attr('href',"//www.hzfubeitong.com/m/login/index.html"); return false } if(data.code == 2){ //跳转到VIP升级页面 window.location.href="https://m.elecfans.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:'8位MCU和32位MCU的使用案例资料下载',//标题 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.hzfubeitong.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);