ARM

嵌入式系统分为4层,硬件层、驱动层、操作系统层和应用层。嵌入式操作系统是负责嵌入式系统的全部软、硬件资源的分配、任务调度,控制、协调并发活动。它必须体现其所在系统的特征,能够通过装卸某些模块来达到系统所要求的功能,是一种用途广泛的系统软件。

嵌入式操作系统(Embedded Operation System,EOS)是指用于嵌入式系统的操作系统。嵌入式系统分为4层,硬件层、驱动层、操作系统层和应用层。嵌入式操作系统是负责嵌入式系统的全部软、硬件资源的分配、任务调度,控制、协调并发活动。它必须体现其所在系统的特征,能够通过装卸某些模块来达到系统所要求的功能,是一种用途广泛的系统软件。

嵌入式LINUX

嵌入式Linux 是将日益流行的Linux操作系统进行裁剪修改,使之能在嵌入式计算机系统上运行的一种操作系统。Linux做嵌入式的优势,首先,Linux是开放源代码;其次,Linux的内核小、效率高,可以定制,其系统内核最小只有约134KB;第三,Linux是免费的OS,Linux还有着嵌入式操作系统所需要的很多特色,突出的就是Linux适应于多种CPU和多种硬件平台而且性能稳定,裁剪性很好,开发和使用都很容易。同时,Linux内核的结构在网络方面是非常完整的,Linux对网络中最常用的TCP/IP协议有最完备的支持。提供了包括十兆、百兆、千兆的以太网络,以及无线网络,Token Ring(令牌环网)、光纤甚至卫星的支持。

移植步骤:1.Bootloader的移植;2.嵌入式Linux操作系统内核的移植;3.嵌入式Linux操作系统根文件系统的创建;4.电路板上外设Linux驱动程序的编写。

WinCE

WinCE是微软公司嵌入式、移动计算平台的基础,它是一个开放的、可升级的32位嵌入式操作系统,是基于掌上型电脑类的电子设备操作系统,它是精简的Windows 95,Win CE的图形用户界面相当出色。WinCE是从整体上为有限资源的平台设计的多线程、完整优先权、多任务的操作系统。它的模块化设计允许它对于从掌上电脑到专用的工业控制器的用户电子设备进行定制。操作系统的基本内核需要至少200K的ROM。

一般来说,一个WinCE系统包括四层结构:应用程序、WinCE内核映像、板级支持包(BSP)、硬件平台。而基本软件平台则主要由WinCE系统内核映像(OS Image)和板卡支持包(BSP)两部分组成。因为WinCE系统是一个软硬件紧密结合的系统,因此即使CPU处理器相同,但是如果开发板上的外围硬件不相同,这个时候还是需要修改BSP来完成一个新的BSP。因此换句话说,就是WinCE的移植过程主要是改写BSP的过程。

Android

Android 是一个包括操作系统,中间件以及一些重要应用程序的专门针对移动设备的层次结构的软件集。Android 作为一个完全开源的操作系统,是由操作系统Linux、中间件以及核心应用程序组成的软件栈。通过 android SDK 提供的 API 以及相应的开发工具, 程序员可以很方便的开发android平台上的应用程序。其整个系统由应用程序,应用程序框架,应用程序库,Android运行库,Linux内核(Linux Kernel)五个部分组成。Android操作系统内置了一部分应用程序, 包括电子邮件客户端、SMS程序、日历、地图、浏览器、通讯录以及其他的程序,值得一提的是这些所有的程序都是用java编写的。

移植的主要的工作是驱动,硬件抽象层的移植。为了更好地理解和调试系统,也应该适当地了解上层对硬件抽象层的调用情况。

TinyOS

TinyOS是一个开源的嵌入式操作系统,它是由加州大学的伯利克分校开发出来的,主要应用于无线传感器网络方面。程序采用的是模块化设计,所以它的程序核心往往都很小,一般来说核心代码和数据大概在400 Bytes左右,能够突破传感器存储资源少的限制。TinyOS提供一系列可重用的组件,一个应用程序可以通过连接配置文件(A Wiring Specification)将各种组件连接起来,以完成它所需要的功能。

嵌入式实时操作系统(RTOS)

在工业控制、 军事设备、航空航天等领域对系统的响应时间有苛刻的要求,这就需要使用实时系统。当外界事件或数据产生时,能够接受并以足够快的速度予以处理,其处理的结果又能在规定的时间之内来控制生产过程或对处理系统作出快速响应,并控制所有实时任务协调一致运行的嵌入式操作系统。故对嵌入式实时操作系统的理解应该建立在对嵌入式系统的理解之上加入对响应时间的要求。

FreeRTOS

FreeRTOS是一个迷你操作系统内核的小型嵌入式系统。作为一个轻量级的操作系统,功能包括:任务管理、时间管理、信号量、消息队列、内存管理、记录功能等,可基本满足较小系统的需要。FreeRTOS任务可选择是否共享堆栈,并且没有任务数限制,多个任务可以分配相同的优先权。相同优先级任务的轮转调度,同时可设成可剥夺内核或不可剥夺内核。

FreeRTOS 的移植主要需要改写如下三个文件。1.portmacro.h 2.port.c 3. port.asm

μTenux

μTenux基于ARM微控制器平台,对uT最适用于ARM Cortex M0-M4系列的微控制器,代码开源、免费,是一个功能强大的抢占式实时多任务操作系统。μTenux除具有实时嵌入式操作系统的一般特性:可移植性,可固化,可裁剪等特性以外,它还具有如下优点:(1)微内核。无MMU, ROM/RAM占用量小,所占ROM最大60KB,最小10KB;RAM最大12KB,最小2KB;(2)开源免费;(3)支持所有32位ARM7/9和Cortex M系列的微控制器;(4)可配置多达到256个任务以及140个任务优先级;(5)有良好的商业支持, T-Engine论坛进行总的维护。

移植主要包括:芯片系统时钟移植,外设移植和通用输出/输入端口的移植以及看门狗模块移植。由于考虑到内核代码的重要性以及其在整个移植中的重要意义,且为了整个系统有更好的实时性,可选用汇编语言编写操作系统的启动代码。

VxWorks

VxWorks系统提供多处理器间和任务间高效的信号灯、消息队列、管道、网络透明的套接字。实时系统的另一关键特性是硬件中断处理。为了获得最快速可靠的中断响应,VxWorks系统的中断服务程序ISR有自己的上下文。VxWorks实时操作系统由400多个相对独立的、短小精炼的目标模块组成,用户可根据需要选择适当模块来裁剪和配置系统,这有效地保证了系统的安全性和可靠性。系统的链接器可按应用的需要自动链接一些目标模块。这样,通过目标模块之间的按需组合,可得到许多满足功能需求的应用。

移植过程可以参考网络上一些BSP代码,BSP的英文全称为board support package,即板级支持包,它的作用是针对特殊的硬件平台,为VxWorks内核提供操作的接口。

μClinux

嵌入式Linux作为一个开放源代码的操作系统,以价格低廉、功能强大又易移植的特性正在被广泛应用,μClinux是专门针对没有MMU的处理器而设计的嵌入式Linux,非常适合中低端嵌入式系统的需求。 在GNU通用公共许可证的授权下,μClinux操作系统的用户可以使用几乎所有Linux的API函数,不会因为没有内存管理单元MMU而受到影响;而且,μClinux在标准的Linux基础上进行了适当的裁剪和优化,形成了一个高度优化的、代码紧凑的嵌入式Linux,体积小了,但是仍然保留了Linux的大多数的优点,比如稳定性好、强大的网络功能、良好的可移植性、完备的文件系统支持功能、以及标准丰富的应用程序接口API等,可以支持类似ARM7TDMI等类型多的小巧玲珑的中央处理器。

eCos

eCos中文翻译为嵌入式可配置操作系统或嵌入式可配置实时操作系统。适合于深度嵌入式应用,主要应用对象包括消费电子、电信、车载设备、手持设备以及其他一些低成本和便携式应用。eCos是一种开发源代码软件,无任何版权费用。 eCos最大的特点是模块化,内核可配置。如果说嵌入式Linux太庞大了,那么eCos可能就能够满足要求。它是一个针对16位、32位和64位处理器的可移植开放源代码的嵌入式RTOS。和嵌入式Linux不同,它是由专门设计嵌入式系统的工作组设计的。eCos具有相当丰富的特性和一个配置工具,后者能够让你选取你所需要的特性。

eCos的软件分了若干的模块,移植工作主要在他的hal层进行,所谓hal(硬件抽象层)就是把和硬件相关的软件凑到一起。

μC/OS-II

μC/OS-II是一个完整的、可移植、可固化、可裁剪的占先式实时多任务内核。μC/OS-II绝大部分的代码是用ANSI的C语言编写的,包含一小部分汇编代码,使之可供不同架构的微处理器使用。其结构小巧简洁且支持抢占式的多任务调度与管理。此实时操作系统管理任务数多达64个,且提供内部程序存储器管理、系统运行时间管理、多任务实时调度与管理等功能。由于它的作者占用和保留了8个任务,所以留给用户应用程序最多可有56个任务。赋予各个任务的优先级必须是不相同的。这意味着μC/OS-II不支持时间片轮转调度法。μC/OS-II为每个任务设置独立的堆栈空间,可以快速实现任务切换。

将μC/OS-II操作系统移植到目标处理器上,需要从硬件和软件两方面来考虑。硬件方面,目标处理器需满足以下条件:

①处理器的C编译器能产生可重入代码;

②用C语言可以开/关中断;

③处理器支持中断,并且能够产生定时中断(通常在10~1000 Hz之间);

④处理器能够支持容纳一定量数据的硬件堆栈;

⑤处理器有将堆栈指针和其他寄存器读出和存储到堆栈或内存中的指令。

软件方面,主要是一些与处理器相关的代码移植,其分布在OS_CPU.H、OS_CPU_C.C和OS_CPU_A.ASM这3个不同的文件中。

来源:网络(版权归原作者所有)

围观 524

1、IIC---SDA、SCL

IIC协议 发明者 Philips公司 通过IIC芯片收取版权税

近距离通信

标准模式 100KBIT/s

快速模式 400K 常用 S3C2440使用

高速模式 3.4M

上拉电阻 10K 如果速度越快,上拉电阻越小,增加驱动能力

2、IIC读写过程

IIC读过程:

1)开始

2)写芯片地址

3)写芯片内部地址

4)将写变成读

5)读数据

6)结束

IIC写过程

1)开始

2)写芯片地址

3)写芯片内部地址

4)写数据

5)结束

AT24c02芯片 它的芯片地址为 1010 a2,a1,a0,R/w a2,a1,a0硬件接地
0xa0
1010 1110 = 0xae

AT24C02的操作模式:

对AT24C02的写模式:

1)字节写模式:可进行随机写操作,每次写一字节,且每次都要发送从机地址和从机内部地址,写完一字节数据后回应一个ACK信号给MCU,MCU发送一个Stop停止信号

2)页写 模式:每次写一页,每页8个字节,每写一页都要写从机地址和从机内部地址(必须为8的倍数),

如果写超过8个字节,会在页内进行循环写(即循环到当前页的第一字节开始写),覆盖之前写的数据。写完一页数据后回应一个ACK信号给MCU,MCU发送一个Stop停止信号

对AT24C02的读模式:

1)随机读模式:可进行随机读操作,每次读一字节,且每次都要发送从机地址和从机内部地址,读完一个字节数据后,MCU不再发送ACK信号,而是直接发送一个Stop信号

2)当前地址读模式:读一个字节,需要发送从机地址,不用发送从机内部地址,而是继续接着当前最后操作的从机内部地址进行读(在没有断电的情况下),读完一个字节数据后,MCU不再发送ACK信号,而是直接发送一个Stop信号

3)顺序读模式:发送从机地址和随机内部地址(也可以是当前从机内部地址),进行顺序读操作,当收到MCU的Stop信号后才停止读。

如果读取的数据长度超过范围,会循环到整个Memory的第一页的第一个字节进行读(注意:在写数据时超过范围只是会循环到当前页的第一字节)。

来源:网络(版权归原著作者所有)

围观 233

国内已开启多技术路线并行的CPU技术产业新格局。在国家科技重大专项和国家级集成电路产业投资基金的推动之下,我国CPU产品技术研发已进入多技术路线同步推进的高速发展阶段,并因发展模式和技术特性的不同而呈现出不同的发展特色。其中:
  
x86体系由Intel封闭主导,国内企业通过商业合作进行CPU产品和部分技术的研发。Intel独揽x86 CPU的基础架构、芯片设计、工艺制造三大环节并封闭发展,目前已积累了超过1.7万件CPU相关专利。在硬件层面,不仅掌控与北桥CPU配套的南桥芯片组外围接口、GPU等核心技术,也主导着与x86相关的标准技术和测试认证,例如内存条接口、硬盘接口以及PCIe总线接口等;在软件层面,与微软结成“Wintel”联盟形成长期相互协同的利益闭环,众多应用厂商围绕x86+Windows体系开发产品。
  
ARM体系以开放共赢为基本原则,国内企业在获得技术授权的基础上进行芯片架构和芯片设计的研发。芯片设计企业基于ARM授权的基础架构/IP核进行芯片研发,降低了研发的难度、风险和成本,与ARM公司形成互惠互利的合作伙伴关系。而生态系统中大量的上下游软硬件企业则遵循ARM统一制定的标准规范,对接众多客户需求而实现经济利益获取。国内基于ARM生态的CPU产业已有较好基础,众多企业均已累积多年的ARM芯片研发经验,在移动终端领域,我国芯片设计技术已与国际主流水平同步,在高性能计算等应用领域也推出了相应的CPU产品。一些企业并取得ARM自主化程度最高的架构授权,可进行自主CPU基础架构的研发。
  
MIPS体系基于架构授权构建开放生态,国内企业是产品研发和生态推动的主要力量。2012年Imagination和ARM的母公司Bridge Crossing合力购得MIPS公司的580项专利,前者联合多家MIPS芯片设计企业组建MIPS开源社区PRPL基金会,共同推进MIPS架构与IP的持续向前发展;后者则侧重于战略性收购以提升知识产权综合能力。我国目前是推动MIPS生态繁荣的主要力量。
  
此外,国内对Power、Alpha等架构也有布局。国内已通过授权得到IBM的Power CPU全套技术,对标行业应用市场。申威对自主的Alpha架构也在不断深化升级,在双核Alpha基础上拓展了多核架构和SIMD等特色扩展指令集,主要面向高性能计算、服务器领域,在2016年国际超算大会评比中,基于申威26010处理器的“神威太湖之光”计算机系统首次亮相并夺冠,其峰值性能达每秒12.5亿亿次浮点运算,成为世界首台运行速度超10亿亿次的超级计算机。
  
产业升级压力巨大
  
国产CPU产业配套滞后于产品技术需求,后续升级压力较大。一是目前国内制造工艺落后于国外两代,CPU专用和高性能制造工艺尚处于起步阶段,面向服务器和PC的国产CPU产品仍需依赖台积电以及国外厂商。二是我国IP产值不足全球的10%,并且高端IP的缺乏难以满足设计和制造发展的需求。华大九天等国内企业发展自主EDA工具,但目前仍较多应用在低端产品当中。此外,与工艺制造相关的装备和材料技术的落后也制约国内制造工艺的升级,进而影响CPU生态的竞争力。
 
国产CPU生态环境薄弱且成熟缓慢,长远发展空间受限。受CPU知识产权壁垒和国外CPU企业对商业模式的限制,目前国内孤立的CPU生态环境基础薄弱且成熟缓慢,主要表现在合作伙伴少、软硬件生态力量分散、无法建立Wintel联盟的协同共赢模式、缺乏产业上下游间的融合发展和深度优化等。
  
应用开发与CPU研制未形成良性互动,竞争力提升缓慢。当前国产CPU研发还极大依赖于国家项目扶植和支持,未结合市场需求,导致产品和应用脱节的情况较为突出,无法持续发展。目前各级单位正在大力推动国产CPU的应用,但因基于国产CPU的操作系统及应用软件生态并不丰富,目前规模较小,产品竞争力提升缓慢。
  
四方面入手提升生态水平
  
首先,强化统筹协调,提升国内技术生态水平。依托国内的市场优势和企业的成长优势,以我国信息安全特殊需求为切入点,针对具有我国特色的个性化应用需求,联合华为、国防科大、展讯等核心优势企业,提升对CPU产品的研发和在相应生态中的影响力。深化国际合作,在兼容开放、专利申请等方面争取更多权益。
  
其次,强化配套供给,提升国内生态体系完备性。一是推动国内芯片设计企业与中芯国际等制造企业、江苏长电等封测企业间深化合作,围绕服务器、移动芯片、物联网芯片等专用需求,实现国内自有的专用制造和封测工艺技术。二是加大对与芯片特色功能优化紧密相关的基础IP的自研力度,力图逐步实现国产化替代。三是支持企业积极参与国际开源社区,深化对开源软件技术的理解,提升国内CPU系列芯片产品配套应用的系统软件和应用软件供给能力。
  
再次,强化应用驱动,推动国内技术产业化进程。面向国产化应用实际需求,开展研发攻关和国产化应用部署。整合各类专项资金和社会资金,继续加大对核心技术/产品自主突破的支持力度。鼓励应用企业主导建立应用牵引、研用融合的核心技术研发体系,形成研发、应用、纠错、完善的体系化迭代创新模式,实现技术研发与应用的协同效应。
  
最后,强化标准建设,提升国内差异化竞争优势。围绕我国特定领域信息安全需求,构建完备的标准化体系,并将其纳入国内市场准入控制范畴。推动企业加强对专利申请的重视程度,适当降低知识产权申请的费用门槛和管理门槛,探索产业共建知识产权专利池,提升我国对外知识产权自我保护能力。

围观 358

(上海,中国,2016年10月18日) 本土MCU产品与MCU应用方案的领先供应商,上海灵动微电子股份有限公司(www.mindmotion.com.cn,以下简称“灵动微电子”,股票代码:灵动微电,833448)近日宣布,灵动微电子与全球领先的半导体知识产权(IP)提供商英国ARM公司(www.arm.com,以下简称“ARM”)签署了一份新的合作协议,该合作协议授权灵动微电子无限次使用ARM® Cortex®-M0及Cortex®-M3 CPU内核及IP工具包。
基于该协议,灵动微电子可以在协议范围内不受授权次数限制的为客户及市场提供已通过硅片验证的ARM® Cortex®-M0 和 Cortex®-M3 IP数据和设计参考流程,并结合灵动微电子所提供的其它系列IP来实现最终的产品设计及应用方案。此项合作有利于帮助客户缩短产品进入市场的时间,优化客户产品性能,并最大程度保护客户的知识产权,降低客户进入ARM成熟生态圈的门槛。

关于ARM

ARM Holdings 成立于1990年,是全球领先的半导体知识产权提供商,并因此在数字电子产品的开发中处于核心地位。ARM 的总部位于Cambridge, 英国,拥有 2000 多名员工,并且在全球范围内设立了多个办事处。目前为止已向 300多家公司出售了1100个处理器许可证,已销售超过 600 亿个基于ARM的芯片。
更多信息,请访问:www.arm.com

关于灵动

上海灵动微电子股份有限公司(股票代码:灵动微电,833448)是本土专注于MCU产品与MCU应用方案的领先供应商,是中国工业及信息化部及上海市信息化办公室认定的集成电路设计企业,同时也是上海市认定的高新技术企业。自2011年3月成立至今,灵动微电子已经成功完成十余款MCU产品设计及推广,产品及方案广泛应用于工业控制、智能家电、智慧家庭、可穿戴式设备、汽车电子、仪器仪表等领域。

灵动微电子立足本土,洞悉市场,贴近客户,以为客户提供“保姆式”的全方位支持为特色,坚持“专业、可靠、便捷、高效”的服务理念,贯彻差异最大化,成本最优化的经营策略,不断强化自身生态价值,维护良好产品品牌。公司在销售初期就与客户充分接触,为客户提供产品整体解决方案,从产品功能定义、市场竞争力分析到算法整合、软件驱动、应用例程等都深入参与,为客户提供精准的市场分析和全面的应用方案,帮助客户把握好成功的每一个重要环节。

灵动微电子以成为“中国本土MCU第一推动力”为愿景,致力于发展成为中国本土MCU产品与MCU应用方案的开拓者和领导者,愿意与产业界各位朋友携手共进,共创美好未来。

更多信息,请访问:www.mindmotion.com.cnwww.mm32mcu.com,微信公众号请搜索“灵动微电MMCU”,QQ技术讨论群:294016370。

灵动微电子目前已批量供货的以及提供样品的基于ARM® Cortex®-M0及Cortex®-M3 内核的MCU产品包括:针对通用高性能市场的MM32F系列,针对超低功耗及安全应用的MM32L系列,针对超小尺寸及超高集成度的MM32P系列,以及具有多种无线连接功能的MM32B/R/W系列等,满足客户及市场多领域、多层次的丰富应用场景。

关于MM32F031系列MCU

MM32F031系列MCU使用高性能的ARM® Cortex®-M0 32位的RISC内核,最高工作频率为48MHz,内置高速存储器,丰富的增强IO端口和连接到两条APB总线的外设。所有型号的器件都包含1个12位的ADC、4个通用16位定时器、1个32位定时器、1个高级PWM定时器,还包含标准和先进的通信接口:1个I2C接口和SPI接口、1个UART接口。

MM32F031系列产品供电电压为2.5V至5.5V,包含-40°C至+85°C温度范围和 -40°C至+105°C的扩展温度范围。一系列的省电模式保证低功耗应用的要求。

MM32F031系列产品提供包括48脚与32脚等多种产品规格,根据不同的产品规格,器件中的外设及配置不尽相同。

关于MM32F103系列MCU

MM32F103系列MCU使用高性能的ARM® Cortex®-M3 32位的RISC内核,最高工作频率为96MHz,内置高速存储器,丰富的增强I/O端口和连接到两条APB总线的外设。所有型号的器件都包含2个12位的ADC、2个12位的DAC、2个电压比较器、3个通用16位定时器和1个 PWM高级定时器,还包含标准和先进的通信接口:2个I2C接口和SPI接口、3个UART接口、一个 USB接口和一个CAN接口。

MM32F103系列产品供电电压为2.5V至5.5V,包含-40°C至+85°C温度范围和 -40°C至+105°C的扩展温度范围。一系列的省电模式保证低功耗应用的要求。

MM32F103系列产品提供包括64脚与48脚等多种产品规格,根据不同的产品规格,器件中的外设及配置不尽相同。

围观 509

十类常用电子元件

1、电阻

设计考虑两点

1)阻值

2)电阻的额定功率:计算的应用功率如果为P,那么选用的电阻要用(1.5—2)P,要留有余地

四点注意的地方

1)电源本身误差GB9706-2007规定220V允许正负10%的误差

2)元器件本身误差:电阻--5%--1%

3 ) 其他原件误差: 电容误差:20%, 10% 5%

电容一般偏小,若买1000Uf电容---实际在850uf左右 容量越小成本越低 行规

4 ) 环境:产品设计温度问题 估计误差10%

插件电阻(碳膜):1/4W

0805:1/8W

0603:1/10W

0402:1/16w

水泥电阻--1w——1000W

2、电容

1)容值:

1F=1000000uf

1uf=1000nf

1uf=1000000pf

红宝石电容---1000uf--0.8元 比较好

普通1000uf为0.1元

无极性电容:1uf为分界线 低于1uf一般为无极性

电解电容、铝电容、涤纶电容

钽电容:内部无电解液,可以耐高温,但容量小,价格贵

作用:

1)滤波(滤电压)

2)特性:瞬间导通,过段时间断开,通高频阻低频

电源输入端的滤波电容一般大于470uf

旁边的去耦电容一般为104——0.1uf

设计考虑的两点

1)容值

2)耐压值 (实际采用也为计算值的1.5——2倍的值)

元件工程师---一般30人以上的研发队伍才有,工控,车载电子等领域

3、电感

1)滤波(虑电流)

2)特点:瞬间断开,过段时间导通

电感量. H、mH、uH

允许流过的电流值: 实际为计算的1.5-2倍

4、二极管

1)特性:单向导通,导通后可作稳压

2)作为保护电路

不同的保护电路特点不一样(比如电源里面的串联型和并联型保护电路的优缺点)

5、三极管 NPN、PNP

作用:

1)开关(饱和区)

2)放大 (放大区):放大倍数一般为80--200倍

放大的本质:所有的放大并不是放大,而是控制

6、led灯

LED正常亮的条件

1)2v左右的压降 一般为1.7V

2)4-40mA的电流 典型值10mA

7、led数码管

工作电流8*Iled=32—160mA

8、蜂鸣器

类别:直流和交流蜂鸣器

直流:电源、地

交流: 一端接电源、另一端接脉冲才能工作

工作电流:十几毫安

9、继电器

开关--侧重控制

低压控制高压

直流控制直流或交流

10、光耦

主要作用:隔离

十类常用芯片

1、门型芯片:与、或、非门

门芯片里面一般有几个门,他们之间没有关系,相互独立

与或非门芯片一般只要加上电源和地就可以实现功能,不需要外围器件

2、锁存器;74ls373(电平触发)/74ls374(边沿触发)

片选信号:OE/CE

控制信号:LE

Dn--输入

Qn——输出

Q0表示保持原来状态,达到锁存功能

Z表示高阻状态,相当于悬空状态,既不是高也不是低

步骤:片选、控制、执行

3、译码器:74ls138

4、功率放大器:uln2003

1)由7个NPN达林顿管组成,具有放大功能

2)具有反相功能(反相器)

3)它的最大灌电流为500mA

电流往芯片里面流:灌电流

电流从芯片往外流:驱动电流

4)uln2003的电源端电压必须与负载的最高电压保持一致或COM不接

5、驱动器:74ls245/74ls244

1)双向驱动器,侧重还原衰减后的信号

6、电平转换:max232/max3232

电脑232电平:-12v--1

12v--0

单片机电平: 3.3/5V--1

0V---0

MAX232-----5V转换

MAX3232----3.3V转换

7、串口并出类:74ls164

8、稳压器7805、lm2576

1)7805线性稳压,输出稳定但转换效率低50%,发热很大,作用领域;小信号、高精度等要求场合

2)lm2576开关型稳压原理,稳定性没7805好,但效率高95%

9、存储芯片at24c02(FLASH)

RAM:数据存储器,可读可写,掉电丢失数据--相当于内存

ROM:程序存储器,只能读不可写,掉电不丢失数据,相当于光盘

EEPROM/FLASH:可读可写,掉电不丢失,相当于U盘

FLASH只能一页一页操作,EEPROM可以单独操作

10、cpu类芯片

工作三个硬条件:

电源

复位电路

震荡电路

其他相关电子知识

行程开关

霍尔元器件,用磁铁来控制它的通断

磁环,电源线上的那个大圈里面装的是磁环,抗EMC(电磁干扰)

CCC认证:中国质量认证

CE认证: 欧盟

UL认证 :美国

电子产品注意的两点(认证内容)

1、安规

中国 GB9706-2007 电气安全规范

2、电磁兼容EMC-电气产品的和谐社会

产品抗干扰能力 EMS

产品不能干扰别的产品 EMI

220v---三线

火线:棕色或红色

零线:蓝色

地线:黄绿色

产品设计的两点

1)功能:能不能达到要求

2)经济性(成本利润问题)

来源:网络(版权归原著作者所有)

围观 495

本文将详细分析单片机、ARM、FPGA嵌入式几者之间的特点及区别。

单片机的特点:

(1)受集成度限制,片内存储器容量较小,一般内ROM:8KB以下;

(2)内RAM:256KB以内。

(3)可靠性高

(4)易扩展

(5)控制功能强

(6)易于开发

ARM的特点:

(1) 自带廉价的程序存储器(FLASH)和非易失的数据存储器(EEPROM)。这些存储器可多次电擦写,使程序开发实验更加方便,工作更可靠。

(2) 高速度,低功耗。在和M51单片机外接相同晶振条件下,AVR单片机的工作速度是M51单片机的30-40倍;并且增加了休眠功能及CMOS技术,使其功耗远低于M51单片机。

(3) 工业级产品。具有大电流输出可直接驱动SSR和继电器,有看门狗定时器,防止程序走飞,从而提高了产品的抗干扰能力。

(4) 超功能精简指令,具有32个通用工作寄存器,相当于M51单片机中32个累加器!从而克服了单一累加器工作的瓶颈效应。

(5) 程序下载方便。AVR单片机即可并行下载也可串行下载,无需昂贵的编程器。此外,还可以在线下载!也就是说可以直接在电路板上进行程序修改和烧录。

(6) 具有模拟比较器、脉宽调制器、模数转换功能。使得工业控制中的模拟信号处理更为简单方便。

(7) 并行口、定时计数器、中断系统等单片机内部重要资源的功能进行了大幅度提升,使之更适合工业生产过程的实时控制。

(8) 其时钟频率既可外接也可使用单片机内部自带的振荡器,其频率可在1MHz-8MHz内设置,使得硬件开发制作更为简洁。

(9) 强大的通讯功能,内置了同步串行接口SPI、通用串行接口UAST、两线串行总线接口TWI(I2C ),使网络控制、数据传送更为方便。

(10) 超级保密功能,应用程序可采用多重保护锁功能。可低价快速完成厂家产品商品化等等。 除上述特点外“零外设”也是AVR嵌入式单片机的重要特征。由于该芯片已内置了程序存储器、晶振并增加了在线汇编功能。

所以AVR单片机芯片接上直流电源,下载个程序就可以独立工作。无需附加外部设备,无需使用昂贵的编程器和仿真装置。这给我们学习和开发带来了便利条件。

FPGA的特点:

(1)采用FPGA设计ASIC电路(专用集成电路),用户不需要投片生产,就能得到合用的芯片。

(2)FPGA可做其它全定制或半定制ASIC电路的中试样片。

(3)FPGA内部有丰富的触发器和I/O引脚。

(4)FPGA是ASIC电路中设计周期最短、开发费用最低、风险最小的器件之一。

(5)FPGA采用高速CMOS工艺,功耗低,可以与CMOS、TTL电平兼容。

可以说,FPGA芯片是小批量系统提高系统集成度、可靠性的最佳选择之一。

FPGA是由存放在片内RAM中的程序来设置其工作状态的,因此,工作时需要对片内的RAM进行编程。用户可以根据不同的配置模式,采用不同的编程方式。

加电时,FPGA芯片将EPROM中数据读入片内编程RAM中,配置完成后,FPGA进入工作状态。掉电后,FPGA恢复成白片,内部逻辑关系消失,因此,FPGA能够反复使用。FPGA的编程无须专用的FPGA编程器,只须用通用的EPROM、PROM编程器即可。当需要修改FPGA功能时,只需换一片EPROM即可。这样,同一片FPGA,不同的编程数据,可以产生不同的电路功能。因此,FPGA的使用非常灵活。

嵌入式系统的特点:

1、系统内核小

由于嵌入式系统一般是应用于小型电子装置的,系统资源相对有限,所以内核较之传统的操作系统要小得多。

2、专用性强

嵌入式系统的个性化很强,其中的软件系统和硬件的结合非常 紧密,一般要针对硬件进行系统的移植,即使在同一品牌、同一系列的产品中也 需要根据系统硬件的变化和增减不断进行修改。同时针对不同的任务,往往需要 对系统进行较大更改,程序的编译下载要和系统相结合,这种修改和通用软件的 “升级”是完全两个概念。

3、系统精简

嵌入式系统一般没有系统软件和应用软件的明显区分,不要求 其功能设计及实现上过于复杂,这样一方面利于控制系统成本,同时也利于实现系统安全。

4、高实时性的系统软件

OS是嵌入式软件的基本要求。而且软件要求固态存储,以提高速度;软件代码要求高质量和高可靠性。

5、嵌入式软件开发要想走向标准化,就必须使用多任务的操作系统

嵌入式系统的应用程序可以没有操作系统直接在芯片上运行;但是为了合理地调度多任 务、利用系统资源、系统函数以及和专家库函数接口,用户必须自行选配RTOS (Real-Time Operating System)开发平台,这样才能保证程序执行的实时性、 可靠性,并减少开发时间,保障软件质量。

6、嵌入式系统开发需要开发工具和环境

由于其本身不具备自举开发能力, 即使设计完成以后用户通常也是不能对其中的程序功能进行修改的,必须有一套 开发工具和环境才能进行开发,这些工具和环境一般是基于通用计算机上的软硬 件设备以及各种逻辑分析仪、混合信号示波器等。开发时往往有主机和目标机的 概念,主机用于程序的开发,目标机作为最后的执行机,开发时需要交替结合进行。

来源:网络(版权归原著作者所有)

围观 374

这篇文章简要说说函数是怎么传入参数的,我们都知道,当一个函数调用使用少量参数(ARM上是少于等于4个)时,参数是通过寄存器进行传值(ARM上是通过r0,r1,r2,r3),而当参数多于4个时,会将多出的参数压入栈中进行传递(其实在函数调用过程中也会把r0,r1,r2,r3传递的参数压入栈),具体是什么实现的呢,我们看看。

函数栈
  
首先我们需要了解一下linux下一个进程的内存地址空间是如何布局的,在linux中,0~3G的虚拟地址为进程所有,3G~4G由内核所使用,每一个进程都有自己独立的0~3G内存地址空间。当进程进行函数调用时,我们都知道传入被调用函数的参数是通过栈进行操作的,这里我们只需要简单了解一下linux的内存地址空间中的栈是自顶向下生长的,就是栈底出于高地址处,栈顶出于低地址处。

好的,简单了解了内存地址空间的栈后,我们还需要简单了解一下EBP和ESP这两个寄存器,EBP是用保存栈低地址的,而ESP用于保存栈顶地址,而每一次函数调用会涉及到一个栈帧,栈帧结构如下图:

举个实例详细说明一下一个函数帧的特点,比如:

/* B被A调用
* 参数:data1, data2, data3
* 局部变量: s1, s2, s3 */
void B (int data1, int data2, int data3)
{
int b_s1;
int b_s2;
int b_s3;
}

/* A调用B函数 */
void A (void)
{
int a_s1;
int a_s2;
int a_s3;

B (1, 2, 3);
printf ("1\n");
}

在以上例子中栈帧情况应该如下图所示:

从图例中可以看出,当A函数没有调用B函数时,A函数的栈帧只保存着局部变量,而EBP(栈底指针)指向的是A函数的函数栈帧头,而当A函数调用B函数时,A函数会将B函数所需要的参数从右往左压入栈(在例子中先压入3,之后是2,最后是1),之后会将A调用完B之后所需要运行的第一条指令压入栈,此时建立一个B的栈帧,具体流程:

1、从右往左将B函数所需参数压入栈

2、压入执行完B函数之后的第一条指令地址

3、建立B栈帧

4、压入A栈帧的栈底

5、压入B函数保护的寄存器

6、压入B函数的局部变量

小结

其实每一种处理器架构所使用的方式都不一样,在arm上我几个参数和不定参数的情况通过汇编代码查看又不相同,之后反汇编后研究透了会再发布一篇博文专门说这个,现在这篇就当做一个入门知识吧。

围观 560

ARM程序(指在ARM系统中正在执行的程序,而非保存在ROM中的bin文件)的组成

一个ARM程序包含3部分:RO段,RW段和ZI段

RO是程序中的指令和常量

RW是程序中的已初始化变量

ZI是程序中的未初始化的变量

由以上3点说明可以理解为:

RO就是readonly,

RW就是read/write,

ZI就是zero

ARM映像文件的组成

所谓ARM映像文件就是指烧录到ROM中的bin文件,也成为image文件。以下用Image文件来称呼它。

Image文件包含了RO和RW数据。

之所以Image文件不包含ZI数据,是因为ZI数据都是0,没必要包含,只要程序运行之前将ZI数据所在的区域一律清零即可。包含进去反而浪费存储空间。

Q:为什么Image中必须包含RO和RW?

A:因为RO中的指令和常量以及RW中初始化过的变量是不能像ZI那样“无中生有”的。

ARM程序的执行过程

从以上两点可以知道,烧录到ROM中的image文件与实际运行时的ARM程序之间并不是完全一样的。因此就有必要了解ARM程序是如何从ROM中的image到达实际运行状态的。

实际上,RO中的指令至少应该有这样的功能:

1、将RW从ROM中搬到RAM中,因为RW是变量,变量不能存在ROM中。

2、将ZI所在的RAM区域全部清零,因为ZI区域并不在Image中,所以需要程序根据编译器给出的ZI地址及大小来将相应得RAM区域清零。ZI中也是变量,同理:变量不能存在ROM中。

在程序运行的最初阶段,RO中的指令完成了这两项工作后C程序才能正常访问变量。否则只能运行不含变量的代码。

说了上面的可能还是有些迷糊,RO,RW和ZI到底是什么,下面我将给出几个例子,最直观的来说明RO,RW,ZI在C中是什么意思。

1、RO

看下面两段程序,他们之间差了一条语句,这条语句就是声明一个字符常量。因此按照我们之前说的,他们之间应该只会在RO数据中相差一个字节(字符常量为1字节)。

Prog1:

#include
void main(void)
{
;
}

Prog2:

#include
const char a = 5;
void main(void)
{
;
}

Prog1编译出来后的信息如下:

================================================================================
Code RO Data RW Data ZI Data Debug
948 60 0 96 0 Grand Totals
================================================================================
Total RO Size(Code + RO Data) 1008 ( 0.98kB)
Total RW Size(RW Data + ZI Data) 96 ( 0.09kB)
Total ROM Size(Code + RO Data + RW Data) 1008 ( 0.98kB)
================================================================================

Prog2编译出来后的信息如下:

================================================================================
Code RO Data RW Data ZI Data Debug
948 61 0 96 0 Grand Totals
================================================================================
Total RO Size(Code + RO Data) 1009 ( 0.99kB)
Total RW Size(RW Data + ZI Data) 96 ( 0.09kB)
Total ROM Size(Code + RO Data + RW Data) 1009 ( 0.99kB)
================================================================================

以上两个程序编译出来后的信息可以看出:

Prog1和Prog2的RO包含了Code和RO Data两类数据。他们的唯一区别就是Prog2的RO Data比Prog1多了1个字节。这正和之前的推测一致。

如果增加的是一条指令而不是一个常量,则结果应该是Code数据大小有差别。

2、RW

同样再看两个程序,他们之间只相差一个“已初始化的变量”,按照之前所讲的,已初始化的变量应该是算在RW中的,所以两个程序之间应该是RW大小有区别。

Prog3:

#include
void main(void)
{
;
}

Prog4:

#include
char a = 5;
void main(void)
{
;
}

Prog3编译出来后的信息如下:

================================================================================
Code RO Data RW Data ZI Data Debug
948 60 0 96 0 Grand Totals
================================================================================
Total RO Size(Code + RO Data) 1008 ( 0.98kB)
Total RW Size(RW Data + ZI Data) 96 ( 0.09kB)
Total ROM Size(Code + RO Data + RW Data) 1008 ( 0.98kB)
================================================================================

Prog4编译出来后的信息如下:

================================================================================
Code RO Data RW Data ZI Data Debug
948 60 1 96 0 Grand Totals
================================================================================
Total RO Size(Code + RO Data) 1008 ( 0.98kB)
Total RW Size(RW Data + ZI Data) 97 ( 0.09kB)
Total ROM Size(Code + RO Data + RW Data) 1009 ( 0.99kB)
================================================================================

可以看出Prog3和Prog4之间确实只有RW Data之间相差了1个字节,这个字节正是被初始化过的一个字符型变量“a”所引起的。

3、ZI

再看两个程序,他们之间的差别是一个未初始化的变量“a”,从之前的了解中,应该可以推测,这两个程序之间应该只有ZI大小有差别。

Prog3:

#include
void main(void)
{
;
}
Prog4:
#include
char a;
void main(void)
{
;
}

Prog3编译出来后的信息如下:

================================================================================
Code RO Data RW Data ZI Data Debug
948 60 0 96 0 Grand Totals
================================================================================
Total RO Size(Code + RO Data) 1008 ( 0.98kB)
Total RW Size(RW Data + ZI Data) 96 ( 0.09kB)
Total ROM Size(Code + RO Data + RW Data) 1008 ( 0.98kB)
================================================================================

Prog4编译出来后的信息如下:

================================================================================
Code RO Data RW Data ZI Data Debug
948 60 0 97 0 Grand Totals
================================================================================
Total RO Size(Code + RO Data) 1008 ( 0.98kB)
Total RW Size(RW Data + ZI Data) 97 ( 0.09kB)
Total ROM Size(Code + RO Data + RW Data) 1008 ( 0.98kB)
================================================================================

编译的结果完全符合推测,只有ZI数据相差了1个字节。这个字节正是未初始化的一个字符型变量“a”所引起的。

注意:如果一个变量被初始化为0,则该变量的处理方法与未初始化华变量一样放在ZI区域。
即:ARM C程序中,所有的未初始化变量都会被自动初始化为0。

总结:

1、C中的指令以及常量被编译后是RO类型数据。

2、C中的未被初始化或初始化为0的变量编译后是ZI类型数据。

3、C中的已被初始化成非0值的变量编译后市RW类型数据。

附:

程序的编译命令(假定C程序名为tst.c):

armcc -c -o tst.o tst.c
armlink -noremove -elf -nodebug -info totals -info sizes -map -list aa.map -o tst.elf tst.o

编译后的信息就在aa.map文件中。

ROM主要指:NAND Flash,Nor Flash
RAM主要指:PSRAM,SDRAM,SRAM,DDRAM

来源:网络(版权归原作者所有)

围观 519

页面

订阅 RSS - ARM