tag 标签: 嵌入式设计

相关帖子
相关博文
  • 热度 19
    2015-3-20 10:39
    1370 次阅读|
    0 个评论
    日前,赛灵思公司(Xilinx)面向全可编程SoC和MPSoC推出了一款软件定义SoC的开发环境SDSoC。这款开发环境极大地简化了SoC的编程体验,让嵌入式控制领域的系统架构师和软件工程师可以利用C/C++来同时做算法和功能的开发,并且在基础的硬件平台搭建好之后,便可以自由发挥,不再需要去求助于硬件工程师。 自赛灵思公司全球总裁兼CEO Moshe Gavrielov提出All Programmable Imperative(全可编程势在必行)的行业趋势后,该公司便一直在引领这个趋势——首先是取代标准芯片和定制芯片,其次是进入更广阔的嵌入式应用蓝海。那么,怎么样才能让更多的人能够使用赛灵思的产品呢?赛灵思推出了SDx的战略。 赛灵思自2014年4月开始先后发布了三款面向软件和系统工程师的软件定义开发环境SDx(图1,“SD”是软件定义的意思)。首先是针对网络推出的SDnet(“软”定义网络)。它能够让厂商用行为模型级的描述,把通信系统迅速实现出来。其次是针对数据中心推出的SDAccel(软件定义加速器)。在数据中心里要解决性能和功耗的问题,有很多应用场景要通过X86加FPGA的加速处理能力来做加速算法,SDAccel可以协助软件工程师把创意快速实现到整个X86和FPGA的流程中。此次推出的针对嵌入式设计SoC应用的SDSoC(软件定义SoC)意义更大,因为嵌入式控制无处不在,很多系统的设计和创新都是基于SoC平台进行设计的。这款设计环境将能使软件工程师也能够做硬件工程师的工作,在整个行业内必将产生出更大的影响力。那么,SDSoC具体是个怎么样的开发环境呢?它又有什么样的技术可以实现这样的目标呢? 图1:SDx三大法宝将FPGA运用拓展到软件工程师人群。 【 分页导航 】 • 第1页: SDSoC:软件工程师开发SoC的福音 • 第2页: 软件工程师直接参与硬件设计 • 第3页: 提供类似ASSP编程体验的设计环境 • 第4页: 基于Eclipse IDE设计轻松上手 • 第5页: 平台开发人员专家级使用模型的意义 • 第6页: SDSoC早两年推出该有多好! • 第7页: 从演示看SDSoC给用户带来什么价值 《电子技术设计》网站版权所有,谢绝转载 SDSoC让嵌入式系统软件设计人员直接参与到硬件设计 “今天我们介绍的是SDSoC,为什么我们要做这个软件开发的环境呢?最主要是在我们的产品系列里有SoC产品,全可编程SoC。这些产品系列有一个共同特点——它们之中都有ARM处理器和FPGA可编程资源。它们是全部硬件、全部软件可编程的产品,在使用的过程中,可以面向很多不同应用的场景。传统上我们面向开发的对象是硬件工程师更多,我们想通过这个开发的环境,让做软件的人员可以直接参与到产品的设计,把软件的创意通过它来很快地实现,变成一个真实的产品。这就是为什么我们要做SDSoC开发环境的最主要的理由。”赛灵思全球销售与市场亚太地区副总裁杨飞先生首先解释说(图2)。 图2:赛灵思全球销售与市场亚太地区副总裁杨飞讲述设计SDSoC开发环境的初衷。 赛灵思除了在半导体芯片领域持续领先,在设计方法论上更是不断创新。该公司五年前打造的Vivado设计套件,让设计工程师可以把他们设计通过该套件在硬件层面实现出来。同时,其还把设计层次拉高,可以让整个抽象性提高。这样做的好处是除了让传统硬件工程师可以参与以外,软件工程师和所有熟悉这样环境的工程师也可以有效地把FPGA给利用起来。SDx开发环境的推出,也是赛灵思认为很重要的一个策略方向,因为器件如果没有相关的设计方法论,整个设计时间和生产力就达不到用户想要的效果。 SDSoC工具面向Zynq全可编程SoC和MPSoC两个产品类型(都是基于ARM核的产品),其中包括28nm的Zynq SoC和16nm的MPSoC。 【 分页导航 】 • 第1页: SDSoC:软件工程师开发SoC的福音 • 第2页: 软件工程师直接参与硬件设计 • 第3页: 提供类似ASSP编程体验的设计环境 • 第4页: 基于Eclipse IDE设计轻松上手 • 第5页: 平台开发人员专家级使用模型的意义 • 第6页: SDSoC早两年推出该有多好! • 第7页: 从演示看SDSoC给用户带来什么价值 《电子技术设计》网站版权所有,谢绝转载 SDSoC提供类似ASSP编程体验的C/C++设计环境 工程师在做嵌入式设计的时候,可以用不同的方法论来解决相关问题——可以用CPU解决,也可以用ASSP(专用标准产品)来解决。CPU是纯软件编程的技术,有很多人会写C代码,因此CPU利用起来是比较灵活的。标准的ASSP是基于ARM和硬加速内核设计的,没有CPU这么灵活,但是也比较简单、比较容易。全可编程SoC性能很高、功能很好,但是其局限性是对硬件描述语言有认识的工程师才能开发相关产品。因此,其以前的应用环境没有CPU的开发环境这么好。“我们这次做的工作就是克服业界出现的问题,把整个SoC和MPSoC产品的开发环境做成跟平时习惯开发ASSP的软件工程师所习惯的环境,这样可以拉齐跟它们开发的关系。”杨总指出。 图3是SDSoC开发环境中所包含的资源功能。它与习惯开发的ASSP完全相同,可以用C/C++来做算法和功能的开发。它提供的系统级的特性描述功能可以做一些描述,比如有哪些函数希望用硬件来做,有哪些是希望用处理器来做,其中可以设计一些加速用的C和C++函数。最后是一个全系统优化的编译器。 图3:SDSoC开发环境与软件工程师习惯开发的ASSP完全相同,可以用C/C++来做算法和功能的开发。 这样的流程与传统的Zynq开发流程不一样的是,它面对的对象不是传统的硬件工程师,而是面向的是系统架构师和软件工程师。软件工程师很多时候对底层的硬件(包括数据流怎么去连接)这个概念不太清楚,以前他们没法去做相关的工作。而通过这个自动化的开发环境,它可以面向软件类的工程师,让他们也可以有效地来开发相关产品。 【 分页导航 】 • 第1页: SDSoC:软件工程师开发SoC的福音 • 第2页: 软件工程师直接参与硬件设计 • 第3页: 提供类似ASSP编程体验的设计环境 • 第4页: 基于Eclipse IDE设计轻松上手 • 第5页: 平台开发人员专家级使用模型的意义 • 第6页: SDSoC早两年推出该有多好! • 第7页: 从演示看SDSoC给用户带来什么价值 《电子技术设计》网站版权所有,谢绝转载 SDSoC基于Eclipse IDE设计,让软件工程师轻松上手 SDSoC基于软件工程师所熟悉的Eclipse IDE开发环境设计(图4)。软件工程师所要做的工作只是要把设计通过C/C++编好,在Eclipse IDE环境里形成不同函数;然后右击函数,就会跳出菜单,从而便可选择是通过硬件还是通过软件来实现。此外,这些选项里所调用的资源还有很多是经过优化的库,这样,软件工程师的工作效率就会得到很大程度的提高。 图4:SDSoC基于Eclipse IDE开发环境设计,可以在硬件实现和软件实现之间进行切换。 在SDSoC开发环境里有和ASSP开发一致的环境。为了让用户了解做这个设计,架构怎样才是最优,哪些功能可以用硬件来实现,哪些功能可以用软件来实现,该开发环境可以帮助做系统级的特性描述(图5)。这样便能让用户知道哪些部分要耗费多少资源,需要多少周期才能把事情做完;整个系统的设计里,有哪些通道是最关键的通道,对性能的影响在什么地方;应该怎么样选择来做最优设计等。嵌入式开发人员基本上都很熟悉相关环境,因此这对他们来说没有一个需要重新学习的过程。同时,这样还能使用户能够很快通过这个流程,找到系统级最优的设计。 图5:系统级的特性描述可对系统性能进行快速估算和自动测量。 此外,在做完这些工作后,就可以进行全系统优化的编译工作(图6)。整个设计中可利用的资源包括CPU和用来做硬加速的FPGA。整个函数拆分起来,有一部分是ARM代码,一部分是硬件加速的函数。ARM代码与硬件加速器怎么样才能把其中的数据通道给打通呢?这个全系统优化的编译器里有自动连接的功能,可以让这些数据自动生成,令ARM和硬加速的部分连接在一起。 图6:全系统优化编译器可实现ARM代码与硬件加速器之间的自动连接。 “这个流程的好处是,有了硬件和软件的整体化、全系统化优化的过程,与纯软件的设计相比,整个性能可以提升一百倍以上。对一个做系统的工程师来说,他感兴趣的是怎么样可以在把系统性能提高的同时,还可以用最低的功耗把设计给做出来。”杨总表示。 【 分页导航 】 • 第1页: SDSoC:软件工程师开发SoC的福音 • 第2页: 软件工程师直接参与硬件设计 • 第3页: 提供类似ASSP编程体验的设计环境 • 第4页: 基于Eclipse IDE设计轻松上手 • 第5页: 平台开发人员专家级使用模型的意义 • 第6页: SDSoC早两年推出该有多好! • 第7页: 从演示看SDSoC给用户带来什么价值 《电子技术设计》网站版权所有,谢绝转载 平台开发人员专家级使用模型对性能和功耗实现最佳平衡 “我们还支持另外一个模式,叫做平台开发人员专家级使用模型(图7)。比如你要做一个挑战性很大的应用的时候,做视频的分析,视频流量很大,它里面系统的结构要怎么优化、怎么设计。我们可以让这个系统架构工程师来看看原始的数据,这里头的算法怎么去切割、怎么去复制,然后在处理器的部分和逻辑的部分,怎么可以把它给安排好,找到最佳的路径。找到之后,就可以直接把这个成果交给这个工程师,让这个工程师继续编程软件,那很快这个设计就可以做完。”杨总说道,“本来一个开发的工作需要十来个月的时间,可能现在三到六个月就可以做完,整个设计周期可以提高很多。这就是我们提供的专家级使用的模型,令开发人员可以更加优化、更加快速地完成开发的工作。” 图7:平台开发人员专家级使用模型可针对性能和功耗找到理想的系统架构;令开发人员可以更加快速地完成开发优化的工作。 一个例子是在做自动生成系统连接的时候,软件工程师并不知道其中数据是怎样流动的。处理器与逻辑之间可以通过ACP,也可以通过高性能带cache的、高性能不带cache的,或是通用接口的方式连接。它可以用软件,可以用DMA,可以用分散DMA,可以用处理器直接连接,也可以用FIFO的方式。用不同的资源来做,数据的移动速度是不一样的,当然速度越快越好,延时越小越好,因为这样系统的功能可以做到更高。SDSoC的工具就可以为软件工程师挑出一个最优的路径来走,这样他就不需要花时间来学习相关的工作,也不需要去计算这些报表,去决定怎么做。这是该工具可以帮助到他的地方,最重要的是可以缩短整个开发的流程。 为了加快开发的进度,SDSoC提供了很多库,包括赛灵思的库和其他第三方的库,有DSP、视频、定点、线性代数、BLAS、openCV的算法。用户不需要去做很多计算,就有很多现成的库可以使用。 SDSoC是一个综合的开发环境。接下来,赛灵思还将在该开发环境下,陆陆续续地提供一些针对某些特定应用场景的工具,即瞄准特定应用场景的库和支持。比如做视频、做图像、做软件无线电等相关应用的场景,赛灵思将会推出相关的配套元素。 【 分页导航 】 • 第1页: SDSoC:软件工程师开发SoC的福音 • 第2页: 软件工程师直接参与硬件设计 • 第3页: 提供类似ASSP编程体验的设计环境 • 第4页: 基于Eclipse IDE设计轻松上手 • 第5页: 平台开发人员专家级使用模型的意义 • 第6页: SDSoC早两年推出该有多好! • 第7页: 从演示看SDSoC给用户带来什么价值 《电子技术设计》网站版权所有,谢绝转载 SDSoC用户反馈:要早两年推出该有多好! 赛灵思SDSoC目前已有一些和客户合作的成功案例。赛灵思与ADI公司合作开发了一款Zynq SDR系统开发套件,通过SDSoC的开发环境,可以很快地把SDR平台的开发做出来(图8)。 图8:赛灵思与合作伙伴安富利、ADI开发的各种Zynq开发板,可令开发人员运用SDSoC和Vivado设计套件快速构建自己的定制平台。 一家做医疗和无人机等开发的公司Van Gogh Imaging,目前正在做3D计算机视觉的开发。ARM架构在智能性视觉方面优势很大,因为其中有算法和很高的数据带宽,通过硬加速可以做到很高性能的视频分析。有了SDSoC,在一个月之内就能把3D对象识别从概念变成现实的加速Zynq设计。 DAVE也是做嵌入式系统的公司。该公司利用SDSoC将Zynq SoC运用在一些医疗器械里,也是用很快的时间就把这些事情给做了出来。 “在国内推出SDSoC,很多客户反映,为什么两年前不推出来呢?以前需要一两年才能做好的事情,现在一两个月就可以做好。他们很期待这样的算法,可以令他们的生产力大幅提高。”杨总谈道。 【 分页导航 】 • 第1页: SDSoC:软件工程师开发SoC的福音 • 第2页: 软件工程师直接参与硬件设计 • 第3页: 提供类似ASSP编程体验的设计环境 • 第4页: 基于Eclipse IDE设计轻松上手 • 第5页: 平台开发人员专家级使用模型的意义 • 第6页: SDSoC早两年推出该有多好! • 第7页: 从演示看SDSoC给用户带来什么价值 《电子技术设计》网站版权所有,谢绝转载 从演示效果看SDSoC能够给用户带来什么价值 在介绍完SDSoC之后,让我们再来看下SDSoC的实际演示效果,了解一下这个工具是怎么用的,用了之后有什么好处,又会给客户带来什么价值? 赛灵思亚太地区Zynq业务拓展经理罗霖先生演示的例子是视频监控(图9)——对前后两人的图像分别做一次滤波;然后把这两幅图像相减,得到一个差分图像;再做一次中值滤波,合并输出。在整个画面上如果有运动物体的话,可以用红线把边缘勾勒出来。整个开发的例子是C代码和SDSoC开发工具。整个设计,包括优化多次迭代,在两个礼拜内就能完成;过去做完优化可能需要两个月的时间。因此,这样对大家的生产力是一个极大的提高。 图9:赛灵思亚太地区Zynq业务拓展经理罗霖先生演示视频监控的例子。通过对比可以看出,视频监控在采用硬件加速后可以做到实时效果。 SDSoC目前支持的主流操作系统有Linux、FreeRTOS和裸机三种,今后赛灵思还会继续增加操作系统列表。“过去如果你用Zynq,光是把linux弄到Zynq上就需要很长时间。现在不需要担心要驱动任何程序,在这一部分就节省了大量的时间,我们全给弄好了。”罗经理表示。 最后,在演示效果时,罗霖对着摄像头挥手,谈道:“如果我不动,我手上是没有这个红色的边缘;如果我手稍微动一下,我手运动的轮廓都会有红色的边缘出来。现在这是硬件演示效果,大家可以看到非常流畅,是实时的。 “下面来看一下软件的效果。软件特别卡,一秒钟大概可以做到还不到一帧,非常不流畅。而硬件可以做到每秒60帧,就是可以看到系统的性能通过我们的SDSoC工具可以完全释放出来,有上百倍性能的提升。同时,在开发效率方面,可能过去要用两个月做的事情,现在用两个星期就可以做完。这就是SDSoC给开发者带来的价值。我们提供给软件工程师一个他们非常熟悉、非常易用的开发工具,这样他们能从第一天就上手,可以做SDSoC的开发。同时,他不用管上面的硬件细节,他只专注于他本身的算法和核心技术的开发。这样对于他来说,可以充分释放他的想象力跟创造力,打造出非常差异化的产品。” 【 分页导航 】 • 第1页: SDSoC:软件工程师开发SoC的福音 • 第2页: 软件工程师直接参与硬件设计 • 第3页: 提供类似ASSP编程体验的设计环境 • 第4页: 基于Eclipse IDE设计轻松上手 • 第5页: 平台开发人员专家级使用模型的意义 • 第6页: SDSoC早两年推出该有多好! • 第7页: 从演示看SDSoC给用户带来什么价值 《电子技术设计》网站版权所有,谢绝转载
  • 热度 26
    2013-11-1 14:20
    1419 次阅读|
    0 个评论
    世界上很少有什么项目能给嵌入式固件开发人员提供足够多的开发时间。事实上,嵌入式固件开发就好像气体一样,会占据它所在的整个空间。而这往往意味着项目结束阶段的测试和质量评估承受压力,进而提高风险。项目经理为如何跟上项目计划进度发愁,嵌入式设计人员和测试工程师也面临开发时间和测试覆盖质量之间的矛盾。要是所有人都能实现自己的目标该多好。要是硬件设计能在代码完成前就进一步推进该多好。要是固件测试在生产构造阶段也能继续进行该多好。要是整个团队都能明确如果设计情况不好,他们总是能够通过现场升级实现重大修改该多好。这样,所有人晚上都能睡个安稳觉,而通过适当利用嵌入式引导加载程序(bootloader),这完全有可能实现。 首先我们先明确一下有关术语。引导加载程序是一段常驻微处理器中的代码,有时也位于只读存储器(ROM)中(在工厂制造时编写)或者位于板载闪存存储器的预留区域。可加载引导代码能载入内存并作为正常工作期间在微处理器上运行的主应用代码。可加载引导代码可通过引导加载程序更新。产品固件的现场升级正是通过板载引导加载程序实现的。 那么,什么是引导加载程序呢?引导加载程序就是位于给定微控制器上受保护程序存储器中的一部分代码。它通常是加电启动或重启后运行的第一个软件,往往针对具体处理器和电路板。引导加载程序可视为一种“笨”代码,因为它并不了解需要执行什么应用,甚至也不了解器件功能是什么。引导加载程序专门用来理解如果通过任意数量的通讯协议与外部进行通讯(这些协议包括UART、I 2 C、SPI、CAN、以太网等),也可用来了解微控制器的存储器映射。引导加载程序在发挥作用时,负责与外部或主机进行通讯;读取主机发送的数据文件;更新它所在的微处理器,从而运行所提供的最新应用代码。 图1:典型的嵌入式硬件架构。 引导加载程序可以在接收到人工操作员(也就是手动重启)或外设设备(即系统主机)的启动信号后开始工作,视具体嵌入式系统而定。引导加载程序信号首先确认引导加载程序本身是否有效,明确当前器件应用是否有效,与主机通讯并载入提交的新应用,随后根据指令执行应用闪存重写。大多数现代微控制器都能对自己的闪存重新编程。典型的引导加载程序在几微秒内就能完成这一工作。不过,存储器尺寸较大情况下,该时间就会大幅延长,有时甚至要花几秒钟才能完成一次更新。一旦完成加载引导,引导加载程序必须确认加载引导镜像,并将控制权交给加载引导代码。用于中断矢量的指针也必须进行设置。典型情况下,引导加载程序将进行软重启,以便让应用掌握控制。图2给出了引导加载程序的逻辑流程实例。 图2:引导加载程序的逻辑流程。 由于引导加载程序是在制造过程中被编程到器件中,并且不是器件工作所必需的首要应用,因此实际上可以把它看作是“开销”代码。项目经理和嵌入式设计人员必须要考虑引导加载程序所带来的风险保护功能与其所占用的代码空间相比是否值得。由于这段代码要占用空间,许多设计人员需要尽可能减小引导加载程序的存储器占用量,从而将用于应用代码的存储器空间实现最大化。引导加载程序至少应提供:通讯通道、擦写并重新编程闪存存储器的方法以及确认和执行新应用代码的方法。 此外,引导加载程序应该能够检测、报告和处理加载引导操作过程中出现的错误,如断电、通讯损失、闪存写入错误等。一般通过存储应用的校验和或循环冗余代码(CRC)来实现闪存错误保护功能。加载引导操作开始后,这些位就会被清空。如果新的应用成功下载并安装,校验和就会被更新。如果下载过程中出错(通讯损失、断电等),那么引导加载程序会检测无效的校验位,且不会开始应用操作,而是与主机通讯,等待有效的加载引导操作。 《电子设计技术》网站版权所有,谢绝转载 还有一个重要的加载引导考虑因素,那就是避免代码本身覆盖引导加载程序所在的区域。如果引导加载程序尝试或无意中确实覆盖了自身,并出现了某种错误事件,那么引导加载程序会无法工作。下次处理器启动时,引导加载程序很可能会损坏。这种情况造成的影响可能有不同反映。引导加载程序可能无法打开到主机的通讯通道,或者系统可能无法将控制权交给上次有效的加载引导镜像。不管是什么情况,结果都需要对整个系统进行再编程。再编程通常需要由合格的技术人员利用可插入板上的开发工具来完成。这可能会影响人们对引导加载程序的兴趣。开发引导加载程序时,必须对器件存储器位置进行适当的控制,特别要注意确保存储器位置得到妥善管理,同时应用大小的变化不会错误地擦写或重写引导加载程序的存储区域。为了避免潜在的重写问题,某些微控制器甚至把引导加载程序放到硬编码的加载引导只读存储器(ROM)中,实现与闪存相分离,如图3所示。 下图显示了四个存储器空间实例。最左边的图是正常的非引导加载程序应用程序,典型的工具链将把应用代码放在地址0上,整个闪存存储器阵列都能作为应用代码空间。如果这种类型的系统作为发布产品进行实地使用,将无法实现远程修改。重启后,应用代码将开始执行。应用代码中的任何问题或瑕疵都将是永久性的。 图3:引导加载程序和应用位置的存储器映射实例。 中间靠左的引导加载程序具备在ROM中存储的可加载引导镜像。这种配置能让全部闪存空间为应用所用,因为引导加载程序位于单独的ROM存储器中。这种方式能避免引导加载程序被错误地覆盖。不过,这种方法也无法对引导加载程序进行更新。ROM只能写入一次,如果发现瑕疵将无法再编程或修改。 中间靠右侧的图片中,引导加载程序位于地址0,重启后首先运行。一旦引导加载程序确定了可加载引导镜像有效,而且主机也没有发出对该部分进行重新镜像的命令,引导加载程序就会把控制权交给可加载引导应用。我们可以看到可加载引导镜像紧邻引导加载程序镜像结束的位置。这样能将用于可加载引导镜像的存储器空间实现最大化。在最后的镜像图中,有两部分存储器用于两种不同的加载引导事件。这种情况下,引导加载程序会根据主机要求决定在不同的启动操作下运行哪个应用。这种方法会占用双倍的闪存空间,因为它需要保存两个完整的应用程序,但它也是一种高效的设计方法,有助于工程师让单一器件在不同的主机指令条件下运行不同的工作。 《电子设计技术》网站版权所有,谢绝转载 引导加载程序最明显的优势就在于能现场解决故障。产品也能在功能升级方面受益。举例来说,我们知道客户会推出一些只提供基本功能的产品,以便加快投放市场的速度,随后再发布加载引导更新来升级操作系统驱动程序、产品功能和电源管理选项等。引导加载程序能够让设计团队在产品投放市场的同时制定未来硬件更新路线图。再举例来说,一些公司用无线电链路进行通讯,以实现设备的远程监控。这些公司发现通过无线电链路进行设备升级比让技术人员到远程站点更新固件的成本更低。可以设想一下在卡车运输领域对整个车队进行管理的情况。为代码升级改进这种小事就让一辆卡车暂停运输服务,那成本太高了。仅仅进行代码现场升级的成本就高达好几百美元。远程加载引导对需要现场更新的产品来说具有极大价值。 那么什么样的引导加载程序才是好的引导加载程序呢?这个问题会有很多答案,不过一个重要要求就是易用性。引导加载程序要能让设计人员方便地选择和连接到串行通讯端口,这非常重要。此外,要能通过简单的方法进入引导加载程序或绕开引导加载程序直接访问应用,这也非常重要。一旦创建出来,可加载引导镜像就依赖于引导加载程序。明确引导加载程序镜像在哪里结束以及应用从哪里开始,该过程非常繁琐且容易出错。好的引导加载程序应该可以自动解决这些问题,同时还要让设计人员灵活地使用多个应用镜像。可以实现双加载引导的系统有时被称为多应用引导加载程序。这种类型的引导加载程序会把新镜像载入到存储器中不同的区域。一旦确认,引导加载程序可能会复制新镜像以替代原有应用,或者直接执行新镜像。 下面看看赛普拉斯是如何在其PSoC3和PSoC5LP系列产品中支持引导加载程序的吧。如下图所示,通过下拉菜单选择通讯组件。可以设置用于进入引导加载程序的“命令等待”时间(图中为2秒)。设计人员还能选择校验和类型,这也非常方便。 图4:赛普拉斯引导加载程序配置工具。 在可加载引导侧提供识别版本修订的数字信息,这样固件就能自动确定新的可加载引导镜像是否已过期。图4显示出设计人员如何灵活地指定应用版本和ID。此外,设计人员还能手动将应用镜像移动到所需的存储器地址。最后要注意的一大关键问题就是存储器覆盖风险。工具链可自动确定引导加载程序结束和应用开始的地址,这样就能消除风险。由于使用引导加载程序的根本目的就是在战略上规避风险,因此这个功能的采用非常重要。 如果所有项目都按时进行,所有代码都完美,所有固件工程师都在硬件构造之前完成了代码,那么就无需使用引导加载程序了。但如果您与所有其他人一样处在现实世界中,那么您所在机构开发的任何嵌入式系统在采用引导加载程序后都会受益匪浅。引导加载程序能让产品在发布之后进行更新,实现灾难问题修复以及产品预订特性升级等不同需求。加载引导的主要问题在于必须考虑引导加载程序本身的灵活性和易用性,还有引导加载程序所使用的代码空间和配置。不过说到底,设计良好的引导加载程序可以挽救您的产品,挽救您的团队,帮您排忧解难。 《电子设计技术》网站版权所有,谢绝转载
  • 热度 32
    2010-9-26 15:35
    2488 次阅读|
    5 个评论
    我在写这些时绝对没有任何贬低目前做嵌入系统的工程师和即将进入嵌入系统行业工作的人。近些天来公司里招聘的人很多,都是83年之后的大学生,坦然讲,我也经历过这个年代的浮躁,也做过生产线工人,可来到公司应聘的孩子十个里有九个扬言搞过嵌入系统,而且谈起嵌入系统都可以说得我头昏眼花,最后我只是安静地问一句,你是在自己设计的硬件系统还是别人的开发板上做的系统,结果八成结果大家都知道。 代码是某某光盘带的,板子是人家的,连个LM1117的最佳布线结构都不会考虑。我问过他们喜欢谁,相信他们都喜欢周立功,可这群孩子们没几个知道 LM1117的输出去耦是怎么回事,电源前端如何做更有利于系统的抗干扰,如果系统中用更高位数的AD这个电源怎么再设计...... 正在经历各种危机的电子行业的大学毕业精英们,如何在这个危机中找到更多的机会,以点滴的模拟设计为自己一点点充电,我相信在危机过后,分量不再是让人认为我们的嵌入系统就是人家的板,人家的例子代码,压根一个“攒”字,只有组合劳动属于自己。 说句实话,周立功的板子之所以卖得好不光因为便宜,更因为人家充分考虑板子的可靠性设计才能达到如此的出货量,我们在看人家代码的时候别忘了顺便看人家的板子布线两眼,研究研究人家怎么用LM1117的。真正的嵌入系统开发应该不光是coder,copy,paste....... 声明我说的是自己想的,不同意或不赞同不喜欢者可以否定我甚至更加激烈的反对方法,我说的是实话。
  • 热度 64
    2010-7-28 15:59
    7827 次阅读|
    42 个评论
    1、步进电机驱动器细分定义 要了解步进电机驱动器的“细分”,先要弄清步进电机“步距角”这个概念:它表示控制系统每发一个步进脉冲信号,电机所转动的角度。电机出厂时给出了一个步距角的值,如电机给出的值为 7.5 ° /15 °(表示半步工作时为 7.5 °、整步工作时为 15 °),这个步距角可以称之为“电机固有步距角”,它不一定是电机实际工作时的真正步距角,真正的步距角和驱动器有关。 步进电机通过细分驱动器的驱动,其步距角变小了,如驱动器工作在 10 细分状态时,其步距角只为“电机固有步距角”的十分之一,也就是说:当驱动器工作在不细分的整步状态时,控制系统每发一个步进脉冲,电机转动 7.5 °;而用细分驱动器工作在 10 细分状态时,电机只转动了 1.5 °,这就是细分的基本概念。 细分功能完全是由驱动器靠精确控制电机的相电流所产生的,与电机无关。 2 、步进电机驱动器细分的优点 驱动器细分后的主要优点为: 消除了电机的低频振荡: 低频振荡是步进电机(尤其是反应式电机)的固有特性,而细分是消除它的唯一途径,如果步进电机有时要在共振区工作(如走圆弧),选择细分驱动器是唯一的选择。 提高了电机的输出转矩: 尤其是对三相反应式步进电机,其力矩比不细分时提高约百分之 30-40 。 提高了电机的分辨率: 由于减小了步距角、提高了步距的均匀度,“提高电机的分辨率”是不言而喻的。 3 、步进电机驱动器细分的缺点     由于要连续将细分数据写入 ADC ,细分越多,数据量就大,占用 CPU 资源,所以一般仅仅作为一个单独的模块。 以上这些优点,尤其是在性能上的优点,并不是一个量的变化,而是质的飞跃。根据记录,原来使用不细分驱动器的用户通过比较后,大都改选为细分驱动器。所以建议最好选用细分驱动器。 4、 步进电机细分驱动电路 附资料: 《步进马达细分控制电路和C语言源代码》下载  
  • 热度 24
    2010-6-13 21:02
    2874 次阅读|
    2 个评论
    /* 说明:近期有人问我为什么S3C2410 ADC不好用,于是就随便调试了一下,说明开发板提供的Sample 没有问题。 这主要是对哪些初学者或者将要用用作电压检测的网友,不妨可以借鉴一下。 调试工具是ADS环境 Wince/Linux开发板都是自带好了,打开调作即可。 */ volatile U32 preScaler; #define LOOP 10000 #define PCLK     (266000000/4)//PCLK=FCLK/4=266Mhz #define ADC_FREQ  2500000//ADC采样频率 void main(void) {     int voltage;  //读电压值   voltage=Test_Adc();    } /* * function: *    int ReadAdc(int ch) * description: *    Read 0-7 channel ADC value. * parameter: *    0-7 channel * return: *      0-7 channel voltage value */ int ReadAdc(int ch) {     int i;     static int prevCh=-1;     rADCCON = (114)|(preScaler6)|(ch3); //ADC control     if(prevCh!=ch)     {    rADCCON = (114)|(preScaler6)|(ch3);      for(i=0;i    prevCh=ch;     }     rADCCON|=0x1;       while(rADCCON 0x1);      while(!(rADCCON 0x8000));      return ( (int)rADCDAT0 0x3ff ); } /* * function: *    int Test_Adc(void) * description: *    Read 0-7 channel ADC value. * parameter: *    void * return: *      voltage value */ int Test_Adc(void) {     int i,key,ch_num;       preScaler = ADC_FREQ;        preScaler = PCLK/ADC_FREQ -1;        ch_num=3;//0-7 adc 端口号               return ReadAdc(3);   }    
相关资源