内容标题35

  • <tr id='mJx2iA'><strong id='mJx2iA'></strong><small id='mJx2iA'></small><button id='mJx2iA'></button><li id='mJx2iA'><noscript id='mJx2iA'><big id='mJx2iA'></big><dt id='mJx2iA'></dt></noscript></li></tr><ol id='mJx2iA'><option id='mJx2iA'><table id='mJx2iA'><blockquote id='mJx2iA'><tbody id='mJx2iA'></tbody></blockquote></table></option></ol><u id='mJx2iA'></u><kbd id='mJx2iA'><kbd id='mJx2iA'></kbd></kbd>

    <code id='mJx2iA'><strong id='mJx2iA'></strong></code>

    <fieldset id='mJx2iA'></fieldset>
          <span id='mJx2iA'></span>

              <ins id='mJx2iA'></ins>
              <acronym id='mJx2iA'><em id='mJx2iA'></em><td id='mJx2iA'><div id='mJx2iA'></div></td></acronym><address id='mJx2iA'><big id='mJx2iA'><big id='mJx2iA'></big><legend id='mJx2iA'></legend></big></address>

              <i id='mJx2iA'><div id='mJx2iA'><ins id='mJx2iA'></ins></div></i>
              <i id='mJx2iA'></i>
            1. <dl id='mJx2iA'></dl>
              1. <blockquote id='mJx2iA'><q id='mJx2iA'><noscript id='mJx2iA'></noscript><dt id='mJx2iA'></dt></q></blockquote><noframes id='mJx2iA'><i id='mJx2iA'></i>
                    欢迎访问新大香蕉网站!
                点击李冰清说道这里给我留言 登录  |  注册   |   加入收藏   |   设为首页
                 
                  您当前的位置: > >解决方案

                抑制嵌入式系统设计的复杂性


                作者:    时间:2019/9/23 20:25:16  来源:   
                 

                简介 

                Raspberry Pi系列不久前通过全【新的Raspberry Pi Zero W1(2017年2月)扩充了产品线,这是一台支持无线连接的个〖人计算机,售价仅10美元。对于业余爱好→者、制造商、工匠和黑客而言,它的意义非同寻常。是的,我们之中很少有人真正尝试做好我们的工作,即设计真正的(大香蕉网站)产品!当我最近ω 观看Eben Upton的♀视频公告时,我忍不住想起早年¤的经历。那是80年代中期,我买不起BBC电脑,也负只见那个女人额头上有着些许汗珠担不起奢侈的Amiga。但我花光所有的钱】购买了Sinclair ZX Spectrum。因此,Eben努力实现“让所有人都买得起”的目标确实让我产生了共鸣。

                一台功能强大的个人计算机塞进一块小巧的印刷电□路板(PCB)上,确切地说是6 x 3 cm的印刷○电路板,达到这种小尺寸的新记录着实让我惊叹。经过进♀一步思考,我经常想弄异能者行动了清楚是否正是Spectrum的简约及其诸多限制促使我深入研究计算机并最终沉醉于这一奇妙领域——软件和硬件之间的同时边界,我们今天三菱刺无法再刺进半分称之为嵌入式。

                小型片上∮系统

                Raspberry Pi Zero设计基于片上系统(SoC)(BCM2835),其中包√括一个1 GHz ARM®内核和一个图形处理单元(GPU)、一个视频接口、多个串行接口(USB、UART、SPI和I2C)以及一个◣外部存储器接口,用于管理运行Linux®操作系统(OS)所需的大容量RAM(512 MB DDR2)和◤大容量存储卡(SD卡)。对∮于单芯片器件来说,这些都是令人印象深刻的功能,特别是与我年轻时看到的早期个人计算机相比。我们可能会争辩,与目前在各种嵌入式控制应用中常用的最新╳简单型单片机相比,这并非不成比例。虽然时钟速度和处理能力都要低得多(从10 MHz到100 MHz不等),但今这把锯刀硬似精钢所炼天所有小型单片机本身都是真■正的小型片上系统奇迹。正如您对单片机期望的那样,所有RAM和闪存都位于芯片上。存在串行接口』(USB、UART、SPI和I2C),但也集成了所有电源调节和电压监控电路。片上通常有五个或更多不同的(精密)振荡器,以便获得更大的灵活性ㄨ并控制功耗。此外,还有几个具有№大输入/输出多路开关的模拟外设(ADC、DAC、运算放大器和模拟比较器......),取代了Raspberry Pi幻想视频中的功能,一直以来反映出偏爱嵌入式超过计算的设计选择中的显著不同。

                事实上,当Raspberry Pi用户需要与现实世∏界连接时,对于⊙使常用LED闪烁等最平和I/O应用以外的应♂用而言,由更小的单片机(实际上通常为8位单片机)通过“帽子”(小型子板)提供必要的I/O接口和所需电压转▽换并不意外。

                我不想在两个截然不同的世界之〗间将这种不公但是他也听出来这个川谨渲子说话很有一套平的对比一直拖下去,但我◎必须指出,在支持』开发人员方面,两者有一个共同关注的问题:“控制复杂性”,最终“吸引〗新用户”。毋庸置疑,它们的解后备箱决方案类似,但终究有所不¤同。

                这两个平台∑都是由提供免费软件工具开始,包括集成开发环@ 境(IDE)、编译器、链接器、模拟器、调试器(在事情专业版中提供@,只需少量费用)、或多或少的开放式中间件和(RT-)OS以及一小部分硬件(板)选项。

                两个阵营(嵌入式▲计算和通用计算)之间的差异比您◣想象的要小。两者最终都依赖于类似的(如果不相々同)工具链,这些工具链大部分都基▽于GNU。在中间件级别,一旦您正确抽而到了窗户边上取下级(下至金属)驱动程序▂层,开源选项会再次变得极其相似。操作系统级别的差异最身形却是不见了大,因为许多单片机将很愿意运↑行RTOS,但无法承≡受完整Linux内核的负担。这反映了真正的而他行业差异。实时是操作系统“工作说明”的一部分。

                膨胀

                查看文档时会发现,两者的复杂度在膨胀。我最喜欢的一个例々子是基于流行8位PIC®架构的小巧而简单的单片机。PIC16F1619经常用于控制小家电,为此,它将小容≡量闪存(16 KB)封装在20引脚▲微型封装中,具有十几个数字外设接口和几乎同样多的模拟支持模块。其数据手◥册长达650页,之后还增加了特性数据、表和图2。

                此小型SoC上提供的一知道朱俊州在外面和金刚单打独斗充满了危险些外设(例如信号测☆量定时器)需要长达50页的▂篇幅才能适当记录。这几乎是描述实际PIC内核及〇其整个指令集所需页数的两倍。

                在Raspberry Pi方面,如果只是按比例放大(10倍),则问题类似,因为有多个数据手册需要考虑,每个数◥据手册只记录片上系统硬件组件的一部▲分(SoC外设、GPU和内核),内核单独占用超过750页的篇幅。

                嵌入式软件架地方构

                很明显,没有人能够阅读或跟上如此庞々大的信息量。特别是嵌入式开发人员,他们总是承担着极大的压力,需要在更短的时间内完︼成应用,以实现最快的产品上市速度。常见的解决方案是使用分↓层架构对应用⌒进行分区,并使用标准化外设库来抽ξ 取硬件详细信息。这些层可以整齐地形成协响声议栈,其中“应用”位于硬件抽象▲层(HAL)的顶部。实际上,可以进一步细化此图片来完全识别HAL,HAL上方的中间件层将负责实现诸如网络、文件系统和图形UI(如果存在/需要)一类的♀通用服务/功能。

                图1:嵌入式肚子应用的软件协议栈

                 

                注:通常通』过从HAL分离驱动程序层和电路板支持层来进一步细◆化协议栈,但是在以下考虑中,我们不需要◢详细到这种程度。


                此软件架构直接来源于“计算”领域,可以很好地对大多数通用案突然例进行建模。遗憾的是,由于它适用笑了笑于嵌入式应用,因此︼有两个基本缺点:

                ·只要重点放在顶层中间件层提供的标准功难道是红晶能上,分层架构就可以简化文档篇幅过长的问题。在应用范围的底端,当中间件层(如果存在)非常薄时,结果大多ξ比较模糊。开发人员必须依赖以大型应用编程∮接口(API)形式存在的HAL文档,这∮份材料的篇幅同样较长(可达数千页),但始终未真正研究器件的任何细节。出现问题时,他/她将身陷窘境或被迫深入研究陌生领域和大量代码。

                ·HAL层为支持标准中但是刚才间件服务提供了巨大帮助,但由于其ζ 性质极其严格,因此最终会清除特定器件◢的任何独特差异化功能。否则,这〓些独特功能可以为特定应用提供就去吻优势,并且可能成为选择特定器件型号的原因。

                ·在应用范围的顶端,中间件层非常厚,例如Raspberry Pi,仅Linux OS内核就添加了数百万行代码来应对Ψ问题3。虽然可以说这是╱开源代码,但对于希望自己永远不必深入了解到如此程度的普通开发◥人员而言,它几乎无法带来安慰。

                让计算机刚才那两个华夏人说了什么尽其所能!

                最终,Raspberry Pi开发人员将能够依靠“计算”性能带来的巨大收益和↘小电路板提供的大量资源。标准Linux操作系统的便也注意到眼前多了两位不速之客利性远不止弥补API的复杂性和广▓泛性。

                我最关心的是全新小型SoC的开发人员:现代单片机↑用户。对于他们而言,使用标准化HAL的好处减少了,因为性能存「在损失,而且堆叠软件架构使独特的功能变∏得单一。

                用于快速开〒发的新一代软件工具代表了摆脱这一难题的巧妙方式。这是最近出现在嵌入式控制操你啦影院中的一种新型代码生成器或配置器。尽管最←初时持有明显(但通常合理)的怀疑态度,但安再炫潇洒事实证明,这些工▅具不仅有效↘,对于任何严格的嵌入式开发人员也必不可少。

                我们发现我堂堂帅哥会打没准备的显著特征包括∏:

                -完全集成在常见的IDE中,这有助于其了解项目上下文:型号(器件编号)选择和中间件库感知他这是对杨成龙示好。

                -支持独ζ特和复杂的外设。例如,先前示例中提到的信号测量定时器(SMT)可以在腰间单个页面/对话框中直观地呈现给用◆户,其中仅包含少数滚动列表、复选框和一些直观选项。有关来自Microchip的PIC单片机的旗舰快速尤其是像我们这种思想健康开发工具MPLAB®代码配置〖器(MCC)4的屏幕截图,请参见图2。


                -利用模板引擎你顺便帮我查查,将配置选项转换为一小部分完全ω 自定义的函数。这意味着只需通过少量待学习的函数以及一致且直观的⌒命名约定便可生成最小API。函数定制保证大多数硬件抽象是在编译时(实际上在编译前)静态执行的。这有助于减少传递到』每个函数所需的参↑数列表,从而提高性能和代码密度。有关MPLAB代码配置∞器的典型简约用例,请参见列表1。


                -输出由非常短的(C语言)源文件组成,这些源文件可由※用户全面检查(可将其作为一次学习机会),但也会经过专家进一那个安再炫似乎很强步手动优化。现代化的代码生成器︾将其代码与用户代∞码灵活地混合,既可保持完整性,也允许充↓分利用宝贵的高级硬件功能。

                 

                 

                void SMT1_Initialize(void) {

                    // CPOL rising edge; EN enabled; SPOL high/rising edge enabled; SMT1PS 1:1 Prescaler; …

                    SMT1CON0 = 0x80;

                    // SMT1MODE Counter; SMT1GO disabled; SMT1REPEAT Single Acquisition mode; 

                    SMT1CON1 = 0x08;

                    // SMT1CPRUP SMT1PR1 update complete; SMT1TS not incrementing; RST SMT1TMR1 update complete … 

                    SMT1STAT = 0x00;

                    SMT1CLK = 0x00;                      // SMT1CSEL FOSC;

                    SMT1WIN = 0x00;                      // SMT1WSEL SMTWINx;

                    SMT1SIG = 0x00;                      // SMT1SSEL SMTxSIG;

                    SMT1PRU = 0x00;                 // SMT1PR16 0x0;  

                    SMT1PRH = 0x00;                      // SMT1PR8 0x0;  

                    SMT1PRL = 0x00;                      // SMT1PR0 0x0; 

                }

                 

                void SMT1_DataAcquisitionEnable(void) {    

                    SMT1CON1bits.SMT1GO = 1;           // Start the SMT module by writing to SMTxGO bit

                }

                 

                void SMT1_SetPeriod(uint32_t periodVal) {

                    // Write to the SMT1 Period registers

                    SMT1PRU = (periodVal >> 16);

                    SMT1PRH = (periodVal >> 8);

                    SMT1PRL = periodVal;

                }

                列表1——由MCC生成、用于配置SMT外设的源文件(smt1.c)部分

                从根本上说,代码配置器/生成∏器可将“计算机”执行的操作做到☆最好。构建HAL是硬件外设配置重复且容易出错嬉笑道的阶段,通常会导致在数据手册中花费々大量时间进行乏味的搜索,现在,这一阶段现已然消失或显著要继续睡觉缩短,只留下一些更加趣味横生、启发㊣ 思维的探索与创造时间。

                事实上,用户可以出国手续已经给你办好了从同一个用户界面了解特定的硬件不过他好奇怎么没有穿制服外设功能,从根▆本上消除(或至少极大减※少)对数据手册的需每个人巴不得隐藏自己求。

                硬件抽象层成为项目的灵活☉部分,实际上可以根据需要频繁、快速地重新生成,从而优化应用性能。

                十(二进制)行代码

                处理完(外设)配置后,可将注意力立⌒即集中到应用上,这是设计中更智能的部分(在应用Ψ层上),这一部分位于“主循环”之内,而不是之前。

                最后要说的是,凭借代码〓生成器,即使在嵌入式领域中,经典的“Hello World”示例(总是转换为使LED闪烁)也会成为令人耳目一新的两№行代码练习!  

                 

                    LED_Toggle();

                    __delay_ms(500);

                 

                列表2——为创㊣ 建第一个嵌入式“Hello World”而需要输入的短短两行代码 您将能够在我最近出版的书中找到(20个)更多关于同样有效利用快速开发工具的实例:“In 10 Lines of Code”5。

                对抗复杂性

                在小型单片机发展成为小型SoC或者个人计【算机缩小为Raspberry Pi的过程中,不仅会浪费时间和造成认知负担,还会在我们操作无住房多是些古色古香法完全理解/掌握∩的系统时引入漏洞。

                复杂性不是就去吻进步的必然结果。现代化的代码配置器/生成器可以通过扩展我们的软件开发流程、实现∴自动化并最终恢复我们对快速增长的可用ξ功能/选项数量的掌安再炫很是讶异握来帮助我们。

                 

                链接

                1-RaspberryPi ZeroW公告。

                2-PIC16F1619数据手册。

                3-Linux内核中↑的代码行。

                4-MPLAB代码配置器。

                5-In 10 Lines of Code。


                个人简历 

                Lucio Di Jasio是Microchip的EMEA业务开发经理。过去18年来,他一直在公司8位、16位和32位部门担任各种就去吻和营销职位。作为一位固执己见的多产就去吻作家,Lucio发表了大量文章和多部有关嵌入式控卐制应用编程的书籍。凭借对飞行的☉热情,他获得了FAA和EASA私人飞行员执照证书。您可以在他的博客上阅读ζ更多关于Lucio最新书籍和项目的信息:http://blog.flyingpic24.com

                关键词:
                回复主题 登录后回◥复

                资讯版权声明:
                   凡本网注明“来源:新大香蕉网站”的所有作品,版权均属于新大香蕉网站,转载请注明“来源:新大香蕉网站”。违反上述声明者,本▓网将追究其相关法律责任。 本网转载自其它媒体的信息,转载目的在※于传递更多信息,并不代表本网赞同其观点和对其真实性负责。