同构、异构
同构与异构的基本理解
异构:
多个不同类型的物体参与完成某一件事情,异构系统的各个组成部分具有自身的自治性,实现数据共享的前提下,仍保留有自己的应用特性,完整特性,安全特性。
同构:
多个相同类型的物体参与完成某一件事情。
数据源中的同构与异构
同构数据源:
如果你需要讨论一群鸟类或者一批飞机,那么这样的数据是同构的,比如包含鸟类的数组 [Bird] 和包含飞机的数组[Airplane]。
异构数据源:
有时候你想探讨的是这些空中家伙的共性 “飞翔”,因此你的数据源可能同时包含 Bird和 Airplane,这样的数据源叫做异构数据。广义上讲是指数据结构、存取方式、形式不一样的多个数据源。如:在一个系统中,同时包含由关系型数据库Oracle/SQL SERVER/MYSQL、EXCEL文件或txt文本数据、XML数据等不同的数据源的一个整体,就是一个异构的数据源。在信息化建设过程中,由于各种系统建设的阶段性、技术性以及经济、人为因素的影响,导致用户积累了大量不同存储方式的数据,从简单的文件数据到复杂的网络数据库,它们构成了异构数据源。
分布式数据库中的同构和异构
同构分布式数据库:
所有站点都使用共同的数据库管理系统软件,它们彼此了解,合作处理用户的需求。本地的站点放弃了作为其自治权一部分的更改模式或者数据库管理系统软件的权利。
异构分布式数据库:
不同的站点具有不同的模式和不同的数据库管理系统软件。站点之间并不了解,在事务处理过程中,它们仅仅为合作提供有限的功能。模式的差别经常是查询处理中的主要问题,软件的差别成为访问多站点事务处理的障碍。
原文链接:https://blog.csdn.net/qq_41018861/article/details/117984800
多源数据融合
是指从不同来源获取的多种数据进行整合和分析的过程。这些数据可以来自传感器、社交媒体、互联网、开放数据等多个渠道。通过将这些数据进行融合,可以获得更全面、准确的信息,为人工智能系统提供更丰富的输入。
它可以将来自不同数据源的信息进行整合和利用,从而提高数据分析和决策的准确性和效率。
多源数据融合的方法
(1)特征级融合:将不同数据源的特征进行整合,构建更具代表性的特征集。例如,在图像识别任务中,可以将来自不同传感器的图像特征进行融合,提高分类准确率。
(2)决策级融合:将不同数据源的决策结果进行整合,得出最终的决策结果。例如,在医学诊断中,可以将来自不同医疗设备的诊断结果进行融合,提高准确性和可靠性。
(3)模型级融合:将不同数据源训练得到的模型进行整合,构建更强大的综合模型。例如,在自然语言处理任务中,可以将基于语法规则的模型和基于统计的模型进行融合,提高语义理解的能力。
平均融合:将多个模型的预测结果进行平均,得到一个平均预测结果。例如,可以将多个神经网络模型的输出进行平均,用于图像识别任务。
投票融合:将多个模型的预测结果进行投票,得到一个最终预测结果。例如,可以将多个分类器的输出进行投票,用于文本分类任务。
集成学习:通过训练多个模型,并将它们进行集成,得到一个更强大的模型。常见的集成学习方法包括Bagging、Boosting和Stacking等。
实践案例:多源数据融合的方法与实践在许多领域都有广泛的应用。例如,在金融领域,我们可以将来自不同金融市场的数据进行融合,以预测股票价格的走势。在医疗领域,我们可以将来自不同医疗设备的数据进行融合,以辅助医生进行疾病诊断和治疗。在智能交通领域,我们可以将来自不同传感器的数据进行融合,以实现更精确的交通流量预测和路况监测。
原文链接:https://blog.csdn.net/xiehewe/article/details/134436249
多源通讯融合
是一种将不同来源的通讯信号或数据合并在一起的技术手段,以提高通信系统的性能和效率。这种融合技术可以应用于多个领域,例如移动通信、智能交通、地下工程、数字孪生等。
在移动通信领域,多源通讯融合可以通过结合多种定位技术(如GPS、GLONASS、Galileo等)和传感器数据(如加速度计、陀螺仪、视觉摄像头等),为用户提供更加精确和可靠的定位服务。例如,在中国,北斗卫星导航系统已与地面传感器和其他定位技术相融合,成功地应用于地铁隧道工程和盾构机导航中,大幅提高了地下工程的精确度和效率。
在智能交通系统中,多源通讯融合技术可以整合来自车辆、交通信号、路侧单元等多种数据源的信息,为自动驾驶车辆和智能交通管理系统提供全面、实时的交通信息。这不仅可以提高交通安全,还能优化交通流量,减少拥堵。
数字孪生技术也广泛应用多源通讯融合。通过整合来自不同传感器和系统的数据,数字孪生可以创建一个实时更新的虚拟副本,模拟真实世界的设备和系统。这为企业和组织提供了更好的决策支持和预测分析能力。
总的来说,多源通讯融合技术正在推动各种领域的创新和进步,为人们的生活带来更多便利和效率。
多源通讯融合
是指在通信系统中,将来自不同源头、不同类型、不同格式的通信数据和信息进行集成、处理和分析,以获得更全面、准确和及时的信息感知能力的过程。这一技术在多个领域具有广泛的应用,特别是在军事侦察、智能监控、物联网(IoT)、灾害应急响应、商业智能分析等领域。以下是多源通讯融合的关键要素和优势:
关键要素:
-
数据采集:从多个传感器、通信网络、卫星、社交媒体等多种渠道收集数据,这些数据可以是图像、视频、文本、音频或传感器读数等形式。
-
数据预处理:包括数据清洗、格式转换、标准化和数据质量评估,确保不同来源的数据可以兼容并进行有效整合。
-
信息融合:采用算法和模型对多源数据进行融合处理,包括低层数据融合(如像素级、特征级融合)、中层数据关联(如时空关联、上下文关联)和高层语义融合(如决策级融合),以提取更有价值的信息。
-
智能分析:运用机器学习、人工智能算法对融合后的数据进行深入分析,识别模式、预测趋势、发现异常等。
-
决策支持:将分析结果转化为直观易懂的形式,如图表、报告或预警,为决策者提供及时准确的情报支持。
优势:
-
提高准确性:通过综合不同来源的信息,减少单一数据源的误差和不确定性,提高信息的可靠性和准确性。
-
增强态势感知:为用户提供全方位、多维度的视角,更全面地理解复杂动态环境,如战场环境、市场动态、社会事件等。
-
加快反应速度:实时融合处理数据,缩短从数据采集到决策制定的周期,提升应对突发事件的快速响应能力。
-
资源优化:通过整合多源信息,避免重复采集和处理数据,提高系统资源利用效率。
-
适应复杂环境:在信号弱、环境多变的情况下,多源融合能有效提升信息获取的鲁棒性和抗干扰能力。
综上所述,多源通讯融合是现代信息处理和决策支持系统中的关键技术,它通过集成和优化不同来源的信息,为用户提供更为强大、灵活和智能的信息服务。
事件触发
事件触发(Event-Triggered)是一种编程和系统设计模式,其中动作或任务的执行不是基于预设的时间表或循环,而是由特定事件的发生来驱动。这种模式广泛应用于各种软件开发、自动化控制、互联网服务以及物联网(IoT)系统中。其核心思想是提高系统的响应性和效率,减少不必要的资源消耗。以下是事件触发机制的一些关键特点和应用场景:
关键特点:
-
反应式编程:事件触发机制是反应式编程范式的核心组成部分,系统对环境变化(即事件)作出响应,而非主动轮询或定期检查状态。
-
高效资源利用:只有当特定事件发生时才执行相应的处理逻辑,减少了空闲等待和无用计算,提升了系统效率和性能。
-
松耦合:事件发布者和订阅者之间通过事件总线或消息队列等机制解耦,使得系统各部分可以独立开发和扩展,增强了系统的灵活性和可维护性。
-
异步处理:事件触发通常伴随着异步处理机制,允许系统在处理一个事件的同时,可以继续监听和响应其他事件,提高了系统的并发处理能力。
应用场景:
-
Web应用和用户界面:按钮点击、页面加载、表单提交等用户交互事件触发相应的后台处理逻辑或前端动态展示更新。
-
物联网系统:传感器检测到温度超过阈值、设备状态改变等事件,触发报警通知、自动控制或其他响应动作。
-
消息队列和事件驱动架构:如Apache Kafka、RabbitMQ等,用于解耦系统组件,通过消息事件在不同服务间传递数据和触发处理流程。
-
云服务和微服务:如AWS Lambda、Azure Functions等无服务器计算平台,根据事件(如文件上传、数据库更改)自动执行函数或服务。
-
自动化运维和监控系统:系统监控到CPU负载过高、服务故障等事件时,自动执行扩容、重启服务或发送警报。
通过事件触发机制,系统能够更加灵活和高效地响应外部变化和内部状态变动,是现代软件系统设计中不可或缺的一部分。
通用定时任务调度量
统管,定时中断整个系统的节拍,调度、触发不同周期的任务。注册定时、周期时间、一次运行的,定时+中断,定时到了发送信号量或者回调函数。
天基
航天中的“天基”概念指的是将设备、系统或武器部署在地球大气层以外的太空环境中,特别是指安装在卫星、空间站或其他航天器上的设施。这些天基系统利用其在太空中的独特位置,执行诸如地球观测、通信中继、导航辅助、环境监测、军事侦察与作战等多种任务。与地面(陆基)和海洋(海基)系统相比,天基系统的优势在于覆盖范围广、受地理限制小、能够实现全球性的即时服务等。
天基终端
指的是部署在太空中的卫星或其他航天器上的专用设备,它们作为天基系统的一部分,负责在太空与地面站、其他航天器或用户终端之间进行信息交换和通信(天基通信终端:用于卫星通信系统,提供语音、数据和视频传输服务,支持远程区域的互联网接入、海事通信、航空通信等。这些终端可以是转发器,负责接收和转发地面信号,或者是直接为用户提供服务的用户终端设备)(为卫星接入天基网络而设计的,能够实现卫星与地面或其他卫星之间的通信)。这些终端设计用于极端的太空环境,具备高度可靠性和适应性,支持多种应用。
并发、并发、串行、同步、异步
并发
表示多个任务在同一时间段内处理,微观上不是同时发生,而宏观上是同时发生。在单核下,可以利用时间片轮转来模拟并发(不是真正意义上同时执行多项任务),cpu给不同的任务分配时间片,cpu在时间片内的时间里处理任务,结束后再处理下一个任务。
并行
多个任务在同一时间点上处理,在微观和宏观上都是同时发生,它关注的是执行效率和性能。一定需要硬件层面的支持,只有多核才能实现并行。
串行
任务按线性顺序执行,上一任务完成才能执行下一个。
同步
任务调用后必须等待调用返回后,才能继续执行之后的内容。可以通过锁、条件变量、信号量等来实现,以限制对共享资源的访问和确保任务的顺序性。进程之间的关系不是相互排斥临界资源的关系,而是相互依赖的关系。进一步的说明:就是前一个进程的输出作为后一个进程的输入,当第一个进程没有输出时第二个进程必须等待。具有同步关系的一组并发进程相互发送的信息称为消息或事件。
异步
可以不用等待调用返回,直接执行之后的内容。在不同的语言中有不同的方式,js中可以用promise、事件监听实现异步,java中可以用thread,golang可以用goroutine。
是一个进程发送一个请求的时候,可以在没有收到回复之前做其他事情。异步除了用多线程实现外,也可以将一些耗时的操作交给其他进程来处理。
异步和同步是相对的。
同步就是顺序执行,执行完一个再执行下一个,需要等待、协调运行。
异步就是彼此独立,在等待某事件的过程中继续做自己的事,不需要等待这一事件完成后再工作。
线程就是实现异步的一个方式。异步是让调用方法的主线程不需要同步等待另一线程的完成,从而可以让主线程干其它的事情。异步是最终目的,而多线程是实现异步的一种方法。
并发/并行是任务执行的描述。
关注任务整体上的处理和资源利用。
同步/异步是编程模型,关注任务调度的方式、任务之间的交互。
个人认为,并发并行是更广泛的概念,涵盖了同步异步,我们也常看到有文章讲述如何用同步异步解决并发编程中的问题。
CPU、DSP、MPU、MCU、SOC、FPGA、ARM等概念
1、CPU(Central Processing Unit)中央处理器
是计算机的核心,其中可以执行指令,可以进行算数和逻辑运算。CPU的种类很多,很多,不同半导体公司有不同的CPU,Intel设计和制造的是一种CPU,英国ARM公司设计的是另一种CPU。设计重点在运算速度追求快,指令效率高。
冯.诺依曼提出的计算机结构是:
计算机=CPU+M+IO+程序。M是存储器,IO是各种输入输出接口。
2、DSP(Digital Signal Process)数字信号处理器
DSP是TI德克萨斯仪器公司设计的一种CPU,其机器指令对数字信号中的卷积、傅里叶变换、乘法、除法等运算很快,最早使用跳转预测,很适合数字信号方面的运算,所以叫数字信号处理器,实际上,它是一种特殊的CPU。
3、MPU (Micro Processor Unit)微处理器(不是微控制器)
常代表一个功能强大的CPU(暂且理解为增强版的CPU吧),但不是为任何已有的特定计算目的而设计的芯片。这种芯片往往是个人计算机和高端工作站的核心CPU。Intel X86,ARM的一些Cortex-A芯片如飞思卡尔i.MX6、全志A20、TI AM335X等都属于MPU。
4、MCU (Micro Control Unit)单片机,微控制器
是指随着大规模集成电路的出现及其发展,将计算机的CPU、RAM、ROM、定时计数器和多种I/O接口集成在一片芯片上,形成芯片级的芯片。即MCU=CPU+M+IO(其中的M可以在片外扩展,IO也可以在片外扩展)。比如51,AVR、STM32这些芯片,内部除了CPU外还有RAM、ROM,可以直接加简单的外围器件(电阻,电容)就可以运行代码了。而如x86、ARM这些MPU就不能直接运行代码了,它只不过是增强版的CPU,所以得添加RAM,ROM。
这里解释一下STM32和ARM公司Cortex-M内核之间的关系:
Cortex-M3处理器内核是单片机的中央处理单元(CPU)。完整的基于CM3的MCU还需要很多其它组件。在芯片制造商得到CM3处理器内核的使用授权后,**它们就可以把CM3内核用在自己的硅片设计中,添加存储器,外设,I/O以及其它功能块。**不同厂家设计出的单片机会有不同的配置,包括存储器容量、类型、外设等都各具特色。如果想要了解某个具体型号的处理器,还需查阅相关厂家提供的文档。STM32就是意法半导体厂商采用采用CM3内核设计的MCU芯片。
5、SOC(System on Chip)片上系统
MCU只是芯片级的芯片,而SOC是系统级的芯片,它既MCU(51,avr)那样有内置RAM、ROM同时又像MPU那样强大,不单单是放简单的代码,可以放系统级的代码,也就是说可以运行操作系统(将就认为是MCU集成化与MPU强处理力各优点二合一)。
6、FPGA(Field-programmable gate array)场可编程门阵列
还有一种CPLD叫复杂可编程逻辑器件,你想象其中有很多,很多零散的与,或,非门电路块,你可以通过编程(或画电路图)把它们连接起来,可以连接组成很复杂的组合逻辑,也可以连接组成很复杂的时序逻辑,以至于可以内部放一个CPU,MCU的硬件。硬件实现逻辑,一定很快。
7、ARM(Advanced RISC Machine,一家公司)CPU的IP核(知识产权核)
ARM一般指英国ARM公司设计的CPU的IP核(知识产权核),很多芯片厂家基于ARM的CPU的IP核,设计了自己家的MCU、MPU、SOC等(某些ARM芯片中也嵌入了数字信号处理功能)。
ARM内核分为三个版本A,R,M:
1,A系列:顶级主控,在人机互动要求较高的场合,比如pda,手机,平板电脑, GPS等。a系列类似于cpu,与arm9和arm11相对应,都是可以跑操作系统的。linux等。
2,R系列:实时高性能处理器,主要应用在对实时性要求高的场合, 硬盘控制器,车载控制产品。
3,M系列:通用低端,工业,消费电子领域微控制器, 不能跑操作系统(只能跑ucos2),偏向于控制方面,说白了就是一个高级的单片机。
ARM、MCU、DSP、FPGA、SOC各是什么?有什么区别?
1、ARM
ARM处理器是Acorn计算机有限公司面向低预算市场设计的第一款RISC微处理器。更早称作AcornRISCMachine。ARM处理器本身是32位设计,但也配备16位指令集,一般来讲比等价32位代码节省达35%,却能保留32位系统的所有优势。
ARM历史发展:
1978年12月5日,物理学家赫尔曼·豪泽(HermannHauser)和工程师ChrisCurry,在英国剑桥创办了CPU公司(CambridgeProcessingUnit),主要业务是为当地市场供应电子设备。1979年,CPU公司改名为Acorn计算机公司。
起初,Acorn公司打算使用摩托罗拉公司的16位芯片,但是发现这种芯片太慢也太贵。"一台售价500英镑的机器,不可能使用价格100英镑的CPU!"他们转而向Intel公司索要80286芯片的设计资料,但是遭到拒绝,于是被迫自行研发。
1985年,RogerWilson和SteveFurber设计了他们自己的第一代32位、6MHz的处理器,RogerWilson和SteveFurber用它做出了一台RISC指令集的计算机,简称ARM(AcornRISCMachine)。这就是ARM这个名字的由来。
RISC的全称是"精简指令集计算机"(reducedinstructionsetcomputer),它支持的指令比较简单,所以功耗小、价格便宜,特别合适移动设备。早期使用ARM芯片的典型设备,就是苹果公司的牛顿PDA。
20世纪80年代后期,ARM很快开发成Acorn的台式机产品,形成英国的计算机教育基础。
1990年11月27日,Acorn公司正式改组为ARM计算机公司。苹果公司出资150万英镑,芯片厂商VLSI出资25万英镑,Acorn本身则以150万英镑的知识产权和12名工程师入股。公司的办公地点非常简陋,就是一个谷仓。20世纪90年代,ARM32位嵌入式RISC(Reduced lnstruction Set Computer)处理器扩展到世界范围,占据了低功耗、低成本和高性能的嵌入式系统应用领域的领先地位。ARM公司既不生产芯片也不销售芯片,它只出售芯片技术授权。
2、MCU 单片机
MCU本质为一片单片机,指将计算机的CPU、RAM、ROM、定时计数器和多种I/O接口集成在一片芯片上,形成的芯片级的计算机。
MCU做得好的厂商:瑞萨(Renesas)、恩智浦(NXP)、新唐、微芯(Microchip)、意法半导体(ST)、爱特梅尔(Atmel)、英飞凌(Infineon)、德州仪器(TI)、东芝(Toshiba)、三星(Samsung)、赛普拉斯(Cypress)、亚德诺半导体(ADI)、高通(Qualcomm)、富士通(Fujitsu)、超威半导体(AMD)、盛群/合泰半导体(Holtek)、中颖电子、炬力、华润微、沛城、义隆、宏晶、松翰、凌阳、华邦电子、爱思科微、十速科技、佑华微、应广、欧比特、贝岭、东软载波微、君正、中微、兆易、晟矽微、芯海、联华、希格玛、汇春、建荣科技、华芯微、神州龙芯、紫光微、时代民芯、国芯科技、中天微等等。
3、DSP
DSP(DigitalSignalProcessing),数字信号处理,简称DSP。DSP是用数值计算的方式对信号进行加工的理论和技术。另外DSP也是DigitalSignalProcessor的简称,即数字信号处理器,它是集成专用计算机的一种芯片,只有一枚硬币那么大。
4、FPGA
FPGA(Field-Programmable Gate Array),即现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。
FPGA做得好的厂商:Altera((阿尔特拉)被Intel收购)、Xilinx(赛灵思)、Actel、Lattice(莱迪思)、Atmel、京微雅格、QuickLogic、Microsemi、Cypress、TI、上海复旦微、广东高云、同方国芯、西安智多晶、中国电子、成都华微、深圳国微、遨格芯等等。
5、SOC
SoC的定义多种多样,由于其内涵丰富、应用范围广,很难给出准确定义。一般说来,SoC称为系统级芯片,也有称片上系统,意指它是一个产品,是一个有专用目标的集成电路,其中包含完整系统并有嵌入软件的全部内容。同时它又是一种技术,用以实现从确定系统功能开始,到软/硬件划分,并完成设计的整个过程。
ARM、MCU、DSP、FPGA、SOC的比较
1、采用架构
ARM:架构采用32位精简指令集(RISC)处理器架构,从ARM9开始ARM都采用了哈佛体系结构,这是一种将指令与数据分开存放在各自独立的存储器结构,独立的程序存储器与数据存储器使处理器的处理能力得到较大的提高。ARM多采用流水线技术,此技术通过多个功率部件并行工作来缩短程序执行时间,使指令能在多条流水线上流动,从而提高处理器的效率和吞吐率。
现今ARM7采用了典型的三级流水线,ARM9采用五级流水线技术,而ARM11使用了7级流水线,ARMCortex-A9更是使用了可变流水线结构(支持8-11级流水线)。在多核心的支持上ARMCortex-A9最多可支持4个核心,这是ARM系列处理器中首次支持多核心技术。
MCU:大都在结构上是基于冯·诺伊曼结构的,这种结构清楚地定义了嵌入式系统所必需的四个基本部分:一个中央处理器核心,程序存储器(只读存储器或者闪存)、数据存储器(随机存储器)、一个或者更多的定时/计数器,还有用来与外围设备以及扩展资源进行通信的输入/输出端口——所有这些都被集成在单个集成电路芯片上。指令集上早期的MCU是采用CISC的,后面被RISC取代。在总线位数上,MCU覆盖了4位、8位、16位、32位,应用十分广泛。
DSP:又名数字信号处理器,它是一种专用于实时的数字信号处理的微处理器。结构上它采用哈佛结构,同样采用流水线技术。此外,DSP被用于宿主环境时可作为直接内存存取设备运作,还支持从模拟数字转换器(ADC)获得数据,最终输出的是由数字模拟转换器(DAC)转换为模拟信号的数据,支持一定的并行处理。
FPGA:FPGA是英文Field Programmable Gate Array(现场可编程门阵列)的缩写,它是在PAL、GAL、PLD等可编程器件的基础上进一步发展的产物,是专用集成电路(ASIC)中集成度最高的一种。FPGA采用了逻辑单元阵列LCA(LogicCellArray)这样一个新概念,内部包括可配置逻辑模块CLB(ConfigurableLogicBlock)、输出输入模块IOB(InputOutputBlock)和内部连线(Interconnect)三个部分。用户可对FPGA内部的逻辑模块和I/O模块重新配置,以实现用户的逻辑。它还具有静态可重复编程和动态在系统重构的特性,使得硬件的功能可以像软件一样通过编程来修改。FPGA有别于DSP、ARM、MCU的地方主要在于它的并行处理能力,它的强大并行性使复杂的运算得到极大的速度比提升。
SOC:系统芯片是一个将计算机或其他电子系统集成单一芯片的集成电路。系统芯片可以处理数字信号、模拟信号、混合信号甚至更高频率的信号。系统芯片常常应用在嵌入式系统中。系统芯片的集成规模很大,一般达到几百万门到几千万门。SOC相对比较灵活,它可以将ARM架构的处理器与一些专用的外围芯片集成到一起,组成一个系统。其实现有的ARM处理器如Hisi-3507、hisi3516等处理器都是一个SOC系统,尤其是应用处理器它集成了许多外围的器件,为执行更复杂的任务、更复杂的应用提供了强大的支持。
2、功耗
ARM:可以说ARM之所以在移动市场上得到极大的成功,其中最主要的原因便是它的低功耗。众所周知的是在移动市场上的电子产品对处理器的功耗是十分敏感的,在过去PC平台上处理器的功耗在几十W到上百W不等,这样的功耗放在移动平台上是不可想像的,ARM在主频1G的情况下功耗才几百mW,强劲的低功耗使它能适应移动电子产品。
DSP:DSP相对于FPGA的一个优势是它的功耗相对较低,DSP生产厂商通过提高处理器的主频、努力降低功耗来保证它的市场占有率,因为在高性能的数字处理市场上FPGA似乎更占有优势。如果单纯从DSP领域上来看,DSP在功耗上、性能上做得最好的要数TI公司,TI公司的DSP处理器相对其它的DSP厂商生产的处理器成本更低、功耗更低,所以TI的DSP芯片更在竞争力。
MCU:MCU面世时间最长,各种厂商都有它们自己的架构与指令集,如果从低功耗方面来看,TI的MSP430型MCU做得相对较好。
FPGA:FPGA由于它的内部结构原因造成它的功耗相对较高、芯片发热量大,这也是它的一个缺点。但这也是不可避免的,在支持高性能的并发计算数字电路,且内部的逻辑门大都采用标准的宽长比,最终生成的数字电路必然会在功耗上无法与ASIC等专用处理器比较。
SOC:由于SOC自身的灵活性,它将多个器件集成到一个极小的芯片上从而组成一个系统,SOC系统相对于MCU等处理器组成的系统来说,它在功耗上具有优势。并且,SOC芯片可在版图层面上结合工艺、电路设计等因素对系统的功耗进行系统的优化,这样比由现今外围的PCB版搭建出来的系统功耗更低,占用面积更小。
3、速度
ARM随着市场应用的需求提高,ARM厂商纷纷通过优化来提高它的主频,提升它的性能。从开始的100Mhz到惊人的2.3Ghz,ARM主频以惊人的速度向前发展。
DSP现今最快的主频能达到1.2Ghz。当然不能单纯从主频判断它的性能会比ARM差,DSP具有单时钟周期内完成一次乘法和一次加法的能力,一般的ARM不具备这样的能力,DSP在计算领域优势尤其明显,所以TI结合了ARM和DSP两者的优势,生产出达芬奇异构芯片,当然这是属于SOC的范畴了。
MCU作为低端的应用处理器,它的主频从数M到几十Mhz不等。
FPGA主频时钟最高可达几Ghz甚至上10Ghz,当然它的成本也不菲。如果将FPGA与ARM、DSP等作为比较,从主频上进行比较是没有多大意义的,毕竟并行计算的能力要远远超出一般通用的处理器采用的串行计算几十倍。如同样的一个滤波算法在主频为100Mhz的FPGA上实现要比在主频为1Ghz的ARM上实现仍要快。
4、应用与市场
ARM处理器现在主要是三个系列分别为A系列、R系列、M系列。
A系列主攻消费电子应用,应用十分广泛。
计算:上网本、智能本、输入板、电子书阅读器、瘦客户端
手机:智能手机、特色手机
数字家电:机顶盒、数字电视、蓝光播放器、游戏控制台
汽车:信息娱乐、导航
企业:激光打印机、路由器、无线基站、VOIP电话和设备
无线基础结构:Web2.0、无线基站、交换机、服务器
R系列处理器主要针对一些对实时性要求较高的应用,如航空航天、汽车电子等场合,它具备高可靠性、高可用性、高容错能力、实时响应等优点。
M系列处理器主要针对较低端的应用,它的最初目标是替换现有的市面上的MCU。
ARMCortex-M0
ARMCortex-M0+
ARMCortex-M3
ARMCortex-M4
“8/16位”应用
“8/16位”应用
“16/32位”应用
“32位/DSC”应用
低成本和简单性
低成本,最佳能效
高性能,通用
有效的数字信号控制
DSP主要针对一些计算能力要求较高的应用,如视频图像处理、智能机器人、数字无线、宽带访问、数字音频、高分辨率成像和数字电机控制等。
MCU应用最为广泛,主要利益于它的成本控制上,使它能在许多对计算能力要求不那么高的应用立足。相信在未来几年里,MCU市场关键增长驱动力将来自于绿色能源,智能电子设备,智能电网以及电子产品的升级换代比如汽车电子。
SOC应用也十分广泛,主要是因为现有主流ARM芯片采用的架构便是SOC架构的一种,SOC是一个比较广泛的概念,现阶段许多ARM、DSP都开始采用SOC的方式来将多个器件加到处理器上组成复杂的系统。
5、开发成本
ARM主要是搭载LINUX、ANDROID、WINCE等操作系统,在开发难度上看,相对MCU、DSP较难入门,它需要开发人员对操作系统有较深的了解;从成本来看,ARM的单芯片成本较MCU要高,主要还是应用于一些较为复杂的系统上。
MCU入门最容易,上手也快,开发难度较小,并且它的成本低,在低端市场应用最为广泛。
DSP入门较容易,但单芯片成本较高,主要还是应用于对计算能力要求高的应用。当然DSP也可以搭载操作系统,搭载操作系统后可适用于多任务的应用上。
FPGA的开发难度较大并且开发周期也相对较长,此外它的单芯片成本很高。
例子:SOBEL算子(水平边沿)
正常来说要进行一次这样的算子需要9次乘法8次加法,这样的计算在FPGA、DSP上显得十分轻松,但对于ARM、MCU来说,它们的并行能力不强,当要处理的图像较大时,如1280P时,它们便会显得比较吃力了。
然而,这样的算子是十分容易对其进行优化的。如1与-1这两个位置的像素点可以直接进行一次加法完成,同理最后一行也是如此,中间一行的2与-2对应的像素点也可进行一次加法后再进行一次移位操作便完成这样的一次算子运算。计算从原来的9次乘法8次加法转换成三次加法与一次移位(移位操作在大多处理器上都可以在单个周期时钟内完成)。
嵌入式中的MCU、ARM、DSP、FPGA
MCU(Microcontroller Unit)
定义:MCU是一种包含处理器核心、内存、输入/输出接口和其他外设的单一芯片解决方案。
角色:主要用于控制应用,例如通过读取传感器数据、执行控制算法、管理通信等来控制嵌入式系统。
ARM(Advanced RISC Machine)
定义:ARM是一种基于精简指令集计算机(RISC)架构的处理器。
角色:ARM本身是一种处理器架构,而不是单一的芯片。它广泛用于各种嵌入式系统,包括MCUs,但也可以在其他类型的处理器上使用,例如应用处理器、图形处理器等。
DSP(Digital Signal Processor)
定义:DSP是专门设计用于数字信号处理任务的处理器类型,通常用于音频处理、图像处理和通信系统等应用。
角色:在嵌入式系统中,DSP通常用于处理需要高性能数字信号处理的任务,例如音频编解码、滤波等。
FPGA(Field-Programmable Gate Array)
定义:FPGA是一种可编程逻辑器件,可以通过编程来实现各种数字电路功能。
角色:在嵌入式系统中,FPGA常用于需要定制硬件逻辑的应用。与固定功能的硬件不同,FPGA可以通过重新编程实现不同的硬件功能,使其适应不同的应用场景。
MCU
MCU代表微控制器单元(Microcontroller Unit)。它是一种集成了中央处理器(CPU)、内存(RAM和/或闪存)、输入/输出接口以及其他必要外设的微型计算机系统。MCU通常被设计用于在嵌入式系统中执行特定的控制任务。
1. 中央处理器(CPU):执行程序和控制任务的核心计算单元。
2. 内存:包括RAM(随机存储器)用于临时数据存储和存取,以及闪存(或EEPROM)用于长期存储程序代码和数据。
3. 输入/输出接口:连接外部设备(例如传感器、执行器、通信接口等)的接口,使MCU能够与外部世界进行交互。
4. 时钟和定时器:用于同步和计时操作,对于很多嵌入式应用来说,时间敏感性是非常重要的。
5. 通信接口:支持与其他设备或系统进行通信,例如串口、SPI(Serial Peripheral Interface)、I2C(Inter-Integrated Circuit)等。
6. 低功耗特性:嵌入式系统通常要求低功耗,因此MCU通常被设计成能够在功耗较低的情况下执行任务。
MCU广泛应用于各种嵌入式系统,例如家电控制、汽车电子、医疗设备、工业自动化、物联网(IoT)设备等。由于其集成度高、功耗低、成本相对较低等优势,MCU在嵌入式领域中扮演着重要的角色。不同的MCU可以基于不同的体系结构,例如基于ARM Cortex-M系列的MCU是目前非常流行的选择之一。
ARM
ARM,全名为Advanced RISC Machine(高级精简指令集计算机),是一种精简指令集(RISC)架构的处理器设计。ARM架构最初由英国的ARM Holdings公司开发,现在已经成为一种广泛应用于各种计算设备的处理器架构。
特点
1. 精简指令集(RISC):ARM架构采用精简指令集设计,这意味着它的指令集相对较小且更简单,执行效率更高。这有助于提高处理器的性能和降低功耗。
2. 多种版本:ARM架构有多个版本,包括ARMv6、ARMv7和ARMv8等。每个版本都引入了新的特性和改进,以适应不同的应用需求,从嵌入式系统到高性能计算。
3. 可扩展性:ARM架构是高度可扩展的,从简单的嵌入式系统到复杂的服务器级处理器都有相应的设计。这种可扩展性使得ARM处理器适用于各种不同的设备和场景。
4. 广泛应用:ARM处理器广泛应用于移动设备、嵌入式系统、物联网(IoT)设备、消费电子、汽车电子、服务器和超级计算机等各种领域。
5. 许可模式:ARM不生产自己的芯片,而是通过许可的方式将其架构授权给其他公司。这意味着许多公司可以设计和制造符合ARM标准的处理器核心,从而促使了ARM生态系统的发展。
在嵌入式系统中,ARM处理器通常被用作主处理器单元,例如在嵌入式系统-on-chip(SoC)中。ARM Cortex-M系列是专门设计用于低功耗、实时嵌入式系统的一系列处理器。在高性能计算领域,ARM Cortex-A系列处理器被广泛应用于移动设备和服务器。
DSP
DSP代表数字信号处理器(Digital Signal Processor)。它是一种专门设计用于执行数字信号处理任务的处理器类型。数字信号处理涉及对数字信号(通常是来自传感器、音频、视频等的信号)进行处理和分析的过程。
特点
1. 高性能信号处理:DSP专注于数字信号的处理,这使得它在处理需要高度精确和实时性的信号时表现出色。典型的应用包括音频处理、图像处理、通信系统、雷达系统等。
2. 并行处理:DSP通常具有并行处理能力,可以同时执行多个数学运算,这对于信号处理任务来说是非常重要的。
3. 专用指令集:DSP通常具有专门的指令集,针对数字信号处理任务进行了优化。这些指令集可以包括各种滤波、傅里叶变换等数字信号处理算法的指令。
4. 低功耗设计:许多DSP设计针对低功耗应用,例如移动设备、无线通信设备等。
5. 实时性要求:DSP通常被用于需要实时处理的应用,例如实时音频和视频处理,其中延迟是不可接受的。
DSP提供了一种有效的方式来处理和分析数字信号,使其在许多领域中成为不可或缺的技术。
FPGA
FPGA代表现场可编程门阵列(Field-Programmable Gate Array)。它是一种硬件设备,具有高度的可编程性,允许工程师根据需要重新配置其内部电路,从而实现特定的数字电路功能。相对于固定的集成电路(ASICs),FPGA具有更大的灵活性,因为它们可以通过重新编程实现不同的电路功能,而无需更换硬件。
特点
1. 可编程性:FPGA是可编程的,允许工程师使用硬件描述语言(如Verilog或VHDL)来定义所需的数字电路功能。这种可编程性使得FPGA适用于各种不同的应用和任务。
2. 并行性:FPGA通常拥有大量可并行执行的逻辑资源,这使得它们在需要高度并行处理的应用中表现出色。
3. 灵活性:相对于专门设计的集成电路,FPGA在设计后仍然保持了灵活性。工程师可以通过重新编程来适应变化的需求或修复设计中的错误。
4. 低成本:相对于一些需要量产的应用,FPGA通常具有较低的开发成本,因为它们无需制造定制的集成电路。
5. 快速原型设计:FPGA可用于快速原型设计,因为它们允许工程师迅速验证其设计概念,而无需等待制造和交付定制硬件。
6. 高性能:FPGA在某些应用中可以提供很高的性能,尤其是对于需要大量并行计算的任务。
FPGA在需要灵活性和可编程性的数字电路方面发挥着关键的作用,为工程师提供了一种在硬件层面上实现定制功能的强大工具。
应用
MCU(Microcontroller Unit)
场景:适用于控制导向的应用,其中需要执行简单的控制任务,例如传感器数据的采集、执行简单的逻辑控制等。
例子:家用电器、嵌入式传感器、小型嵌入式系统。
ARM:
场景:广泛应用于各种应用领域,从低功耗嵌入式系统到高性能服务器。
ARM Cortex-M系列:用于低功耗、实时嵌入式系统,如物联网设备。
ARM Cortex-A系列:用于高性能计算,例如移动设备、嵌入式计算平台、服务器。
DSP(Digital Signal Processor)
场景:适用于需要高度并行和实时数字信号处理的应用,例如音频处理、图像处理、通信系统等。
例子:音频处理器、通信设备、图像处理器、雷达系统。
FPGA(Field-Programmable Gate Array)
场景:适用于需要灵活性、可编程性和高度并行性的应用,可以通过重新编程来实现不同的硬件功能。
加速器:在需要高性能计算的应用中,例如科学计算、深度学习加速等。
通信:用于协议处理、数据包过滤等网络设备。
快速原型设计:用于快速验证和原型设计,加速产品开发。
综合使用场景,有时这些技术也会在同一系统中协同工作,以充分利用各自的优势。例如,一个系统可能使用ARM作为主处理器,搭配MCU来执行实时控制任务,使用DSP来处理数字信号,而FPGA则用于加速特定的硬件任务或提供灵活性。选择合适的技术取决于系统的需求,包括性能、功耗、成本和灵活性等因素。
API 应用程序编程接口
是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。
“‘电脑操作系统(Operating system)’或‘程序库’提供给应用程序调用使用的代码。”其主要目的是让应用程序开发人员得以调用一组例程功能,而无须考虑其底层的源代码为何、或理解其内部工作机制的细节。API本身是抽象的,它仅定义了一个接口,而不涉及应用程序在实际实现过程中的具体操作。
近年来软件的规模日益庞大,常常需要把复杂的系统划分成小的组成部分,编程接口的设计十分重要。程序设计的实践中,编程接口的设计首先要使软件系统的职责得到合理划分。良好的接口设计可以降低系统各部分的相互依赖,提高组成单元的内聚性,降低组成单元间的耦合程度,从而提高系统的维护性和扩展性。
处理器
包含一个或多个核的复杂集成电路,负责执行计算机程序中的指令,而核是处理器内部执行这些指令的基本计算单元。处理器是一个更综合的概念,核是构成处理器的基本构建块。
核:在计算机领域中,“核”通常指的是中央处理器(CPU)中的物理处理器核心(Processor Core)。每个核心都是一个独立的计算单元,能够执行指令集并进行数据处理。简单来说,核是CPU内部能够并行处理任务的关键组件。
现代计算机处理器往往包含一个或多个这样的核心,允许同时处理多项任务或者同一任务的不同部分,从而显著提高了计算机的处理能力和效率。例如,双核处理器意味着拥有两个核心,四核处理器则有四个核心,依此类推。多核处理器在执行多线程应用程序时尤其有效,因为多个线程可以被分配到不同的核心上并行运行。
总结来说,“核”就是CPU内部执行计算任务的基本单位,是现代处理器实现高性能并发处理的基础。
Cortex A9 双核
“Cortex” 是 ARM 公司的一系列处理器架构的名称。这些架构是基于 RISC(Reduced Instruction Set Computing,精简指令集计算)原则设计的,广泛应用于移动设备、嵌入式系统和消费电子产品中。Cortex 架构的处理器具有高性能、低功耗的特点,是现代电子设备中非常流行的选择。
Cortex 架构分为几个不同的系列,每个系列针对不同的应用需求和性能水平。以下是一些主要的 Cortex 系列:
Cortex-A 系列:这是面向高性能应用的系列,如智能手机和平板电脑。Cortex-A 系列包括多个核心,如 Cortex-A5、Cortex-A7、Cortex-A8、Cortex-A9、Cortex-A12、Cortex-A15、Cortex-A17 和最新的 Cortex-A76 等。
Cortex-R 系列:这是为实时应用设计的系列,如汽车电子和工业控制。Cortex-R 系列包括 Cortex-R4、Cortex-R5、Cortex-R7 等。
Cortex-M 系列:这是为微控制器应用设计的系列,如物联网设备和简单的消费电子产品。Cortex-M 系列包括 Cortex-M0、Cortex-M0+、Cortex-M1、Cortex-M3、Cortex-M4、Cortex-M7 和 Cortex-M23 等。
Cortex 架构的处理器通常由第三方半导体公司根据 ARM 的授权生产,这些公司包括高通、三星、联发科、意法半导体等。这些处理器被广泛应用于各种设备中,包括智能手机、平板电脑、可穿戴设备、车载信息娱乐系统、工业自动化设备、网络设备等。
Cortex 架构的成功在于其灵活性、高性能和低功耗特性,使其成为全球最受欢迎的处理器架构之一。随着技术的不断进步,ARM 不断推出更新的 Cortex 架构版本,以满足不断变化的市场需求和技术标准。
S32G
NXP Semiconductors(恩智浦半导体)的一款汽车级处理器,它基于 ARM Cortex-A72 和 Cortex-A53 核心。这款处理器旨在满足高性能、高安全性和低功耗的需求,特别适用于汽车信息娱乐系统、高级驾驶辅助系统(ADAS)和自动驾驶车辆。
S32G 处理器的特点包括:
多核 ARM 架构:集成了多个 ARM Cortex-A72 和 Cortex-A53 核心,提供了平衡的性能和效率。
高安全性:支持安全岛(Secure Island)架构,提供隔离的安全运行环境,适用于车联网(V2X)通信和汽车安全应用。
图形处理能力:内置强大的图形处理单元(GPU),支持高分辨率显示屏和复杂的图形渲染。
汽车级特性:符合汽车行业的高温、高湿、振动和电磁干扰等严苛条件。
丰富的外设接口:提供多种接口,如 PCIe、USB、HDMI、MIPI CSI 等,以支持各种外设连接。
低功耗设计:适用于需要长时间运行且功耗受限的汽车应用。
支持多种操作系统:可以运行 Linux、QNX、Android 等操作系统。
S32G 处理器家族包括多个成员,如 S32G274A、S32G295A 等,每个成员都针对不同的应用和性能需求进行了优化。这些处理器广泛应用于汽车行业,帮助汽车制造商实现更智能、更安全的车辆。
S32G399A
是一款由NXP Semiconductors(恩智浦半导体)设计的高性能汽车网络处理器,专为汽车应用中的复杂网络和高性能计算需求而打造。这款芯片结合了多个强大的处理器核心,旨在支持下一代车辆的高级驾驶辅助系统(ADAS)、车载网络、网关、域控制器和高性能ECU(电子控制单元)应用。以下是S32G399A的一些关键特性:
-
多核架构:S32G399A集成了4个Cortex-M7内核和8个Cortex-A53内核,这种混合架构允许它高效处理实时任务和复杂运算任务。Cortex-M7内核适合低功耗、快速响应的控制任务,而Cortex-A53内核则提供更高的处理能力,适合运行复杂的操作系统和应用程序。
-
内存与外设:芯片配备有20MB的内置存储,支持多种汽车网络通信协议,包括CAN FD(Flexible Data-Rate Controller Area Network)、FlexRay、LIN、SPI、PCI Express(PCIe)、千兆以太网(GbE)等,以及LLCE*、PFE*、HSE-H*、XRDC*等专用模块,这些都强化了其在汽车网络中的连接性和数据处理能力。
-
安全性:S32G399A符合ASIL D级别的功能安全要求,这是汽车安全完整性等级中的最高等级,表明它适用于最严格的安全关键应用。
-
封装与兼容性:采用FBGA525(Fine-Pitch Ball Grid Array)封装,适合汽车级的耐用性和热管理要求。此封装形式提供了高密度引脚排列,适用于紧凑型设计。
-
开发支持:支持使用NXP提供的SDK BSP35进行开发,便于开发人员进行管理程序的开发和其他应用编程。
-
应用领域:广泛应用于智能电动汽车的电子电气架构中,负责系统逻辑计算、功能安全和高效的数据处理,支持车辆内部多个系统的高效协同工作。
总之,S32G399A是一款高度集成、高性能、高安全性的汽车处理器,旨在满足现代汽车对于数据处理、连接性和安全性日益增长的需求。
S32G399A
是NXP Semiconductors(恩智浦半导体)推出的一款汽车网络处理器,该处理器结合了多核Arm®Cortex®-A53应用处理器和可选配的集群锁步支持,以及双核锁步Cortex-M7实时微控制器。以下是关于S32G399A的详细信息:
-
内核配置:
-
该处理器拥有4个Cortex-M7核心和8个Cortex-A53核心,总共12个核心。
-
Cortex-M7核心用于实时控制任务,而Cortex-A53核心则用于应用处理。
-
-
性能参数:
-
最大时钟频率达到1.3 GHz。
-
L1缓存指令存储器和数据存储器均为32 kB。
-
数据RAM大小为20 MB。
-
-
安全特性:
-
结合了ISO 26262标准的ASIL D级安全性。
-
配备了硬件HSE加密模块,用于信息安全。
-
-
网络功能:
-
支持20x CAN FD(控制器局域网灵活数据速率)接口。
-
支持4x GbE(千兆以太网)接口。
-
还包括PCIe(高速串行计算机扩展总线标准)、I2C、SPI、UART等其他接口类型。
-
-
环境适应性:
-
可在-40°C至+105°C的温度范围内工作。
-
符合AEC-Q100资格,确保在汽车环境中的可靠性。
-
-
封装与安装:
-
封装类型为FC-PBGA-525。
-
安装风格为SMD/SMT(表面贴装技术)。
-
-
应用领域:
-
主要用于汽车域控制器、网关和安全处理器等应用。
-
支持软件定义汽车(SDV)应用,包括高级驾驶辅助系统(ADAS)和其他智能互联汽车功能。
-
S32G399A处理器通过其高性能、多核配置和丰富的网络功能,为现代汽车应用提供了强大的处理能力,同时确保了功能安全和信息安全。它是NXP Semiconductors S32G系列汽车网络处理器中的一款高端产品,旨在满足汽车行业中日益增长的软件定义汽车应用需求。
S32G399A
是一款由NXP(恩智浦)公司推出的车载网络处理器,其详细信息和特点可以归纳如下:
-
基本参数:
-
型号:S32G399A
-
品牌:NXP
-
封装:525-FCPBGA
-
年份:最新产品,年份为23+(代表2023年及以后)
-
-
技术规格:
-
核心:
-
多达8个Arm® Cortex®-A53内核,这些内核采用Arm Neon™技术,并被组织在两个由四个内核组成的群组中,可选择群组锁步。
-
多达4个Arm Cortex-M7双核锁步(DCLS)复合体,专为实时应用设计。
-
-
内存:高达20MB的片上系统SRAM。
-
网络加速:
-
低延时通信引擎(LLCE),用于汽车网络加速。
-
包转发引擎(PFE),有三个支持2.5Gbps的端口,用于以太网加速。
-
-
安全:硬件安全引擎(HSE)用于安全启动和加速安全服务。
-
-
特点:
-
扩展性和兼容性:与S32G2处理器的软件和引脚兼容,扩展了S32G系列的功能。
-
高性能:通过提升频率至1.3GHz和增加系统RAM,以及增加隔离域数量至16个,满足了对更高性能和更多处理能力的需求。
-
多应用支持:支持涉及面向服务的网关、车载计算机、域控制器、分区处理器和安全处理器的车辆架构的需求。
-
安全标准:符合AEC-Q100 2级设备标准,可在-40℃至105℃的温度范围内工作。
-
-
应用范围:
-
汽车接入点
-
汽车数据记录器
-
汽车区域控制器
-
域控制器
-
空气中的固件(FOTA)
-
网关
-
车载网络
-
安全处理器
-
面向服务的网关
-
车辆计算
-
分区网关
-
-
接口和连接性:
-
支持CAN、LIN、FlexRay和以太网等多种汽车网络协议。
-
提供I2C、SPI、UART等接口,用于与其他设备或系统连接。
-
S32G399A作为NXP S32G系列的一部分,旨在通过其高性能、丰富的功能和强大的网络处理能力,为现代汽车和交通系统提供可靠和高效的解决方案。
PS: 处理系统 (Processing System)
就是与FPGA无关的ARM的SOC的部分。
PL:可编程逻辑 (Progarmmable Logic), 就是FPGA部分。
之所以叫PL,而不是叫FPGA,原因可能是考虑到让搞软件不要看了以后望而生畏。
Zynq基础信息
一、简介
Zynq-7000 All Programmable SOC,是Xilinx推出的全可编程系统,他将处理器(PS部分)的软件可编程性和FPGA(PL部分)的硬件可编程性集成到了同一芯片上,提供了极大的系统性能、灵活性和可扩展性。Zynq系列旨在为视频监视、汽车驾驶员辅助以及工厂自动化等高端嵌入式应用提供所需的处理与计算性能水平。
PS(Processing System)和PL(Programmable Logic)是zynq的两个核心组件,它们之间通过AXI总线进行连接。
PS(Processing System)是整个zynq平台的核心,负责处理、运算和决策等任务。PS基于ARM架构,由一颗或多颗处理器核构成,并包括了各种外设接口和存储器等组件。PS能够运行Linux等高级操作系统,也支持多种应用程序和算法的运行。
PL(Programmable Logic)是Zynq平台中的可编程逻辑部分,它基于Xilinx的FPGA技术。通过使用Vivado等开发工具,用户可以根据应用需求对PL进行编程和定制,实现各种数字逻辑功能。
PL和PS之间通过AXI(Advanced eXtensible Interface)总线进行通信和数据传输。PS端和PL端都可以作为AXI的主设备和从设备。主设备负责启动数据传输,并控制数据的流向和速率;从设备则负责接收数据,并响应主设备的控制信号。通过使用AXI接口,可以实现高性能、高速度的数据传输,并且可以根据应用需求灵活地配置AXI接口的参数。
在Zynq平台中,PS和PL的分工协作可以实现更高效、更灵活和更低功耗的计算与处理能力。
二、架构框图
Zynq-7000 SoC的框图如下所示,其整体分为上下两个矩形框图,上面的矩形框图为PS部分,下面的矩形框图为PL部分。
Zynq将arm处理器为主的PS系统作为为核心,而PL部分只是其一个外设,通过AXI总线进行通信。从框图中容易看出,Zynq PS系统里并非只有 ARM 处理器,还有一组相关的处理资源,形成了一个应用处理器单元(Application Processing Unit, APU),另外还有扩展外设接口、 cache 存储器、存储器接口、互联接口和时钟发生电路等模块。
Zynq PL 部分等价于 Xilinx 7 系列 FPGA,其资源主要由可编程输入/输出单元、可编程逻辑单元、嵌入式块RAM、布线资源、底层嵌入功能单元和内嵌专用硬核等组成。PL部分的架构如下图所示。
PS 和 PL 之间有9个根据AXI4总线协议进行通信的端口,将其分为三类:
1、 通用 AXI(General Purpose AXI):一条 32 位数据总线,适合 PL 和 PS 之间的中低速通信。接口是透传的不带缓冲。总共有四个通用接口:两个 PS 做主机,另两个 PL 做主机。
2、 加速器一致性端口(Accelerator Coherency Port):在 PL 和 APU 内的 SCU 之间的单个异步连接,总线宽度为 64 位。这个端口用来实现 APU cache 和 PL 的单元之间的一致性。 PL 是做主机的。
3、 高性能端口(High Performance Ports):四个高性能 AXI 接口,带有 FIFO 缓冲来提供“批量”读写操作,并支持 PL 和 PS 中的存储器单元的高速率通信。数据宽度是 32 或 64 位,在所有四个接口中PL 都是做主机的。
值得指出的是,虽然zynq 中集成的了硬核arm处理器,但依然可以用FPGA 来搭建嵌入式处理器,即在PL部分实现 MicroBlaze 处理器,其优势在于数量以及实现方式的灵活性。zynq中的硬件处理器和软核处理器并不冲突,可以使用 PL 的逻辑资源搭建一个 Microblaze 软核处理器,来和 ARM 硬核处理器协同工作。
三、zynq SoC系列
Zynq SoC系列是Xilinx FPGA+ARM硬核架构的系列产品,其分类为:
Zynq-7000系列:Zynq 7000 SoC 系列集成 ARM® 处理器的软件可编程性与 FPGA 的硬件可编程性,不仅可实现重要分析与硬件加速,同时还在单个器件上高度集成 CPU、DSP、ASSP 以及混合信号功能。Zynq 7000 系列包括单核 Zynq7000S 器件和双核 Zynq-7000 器件,是具有出色单位功耗性价比的全面可扩展的 SoC 平台,可充分满足应用需求。Zynq7000S 器件采用与 28nm Artix™ 7 可编程逻辑配对的单核 ARM Cortex®-A9 处理器,是可扩展 Zynq-7000 平台的最低成本入门级产品。Zynq-7000S 和 6.25Gb/s 收发器一起提供,配备有通用固化外设,所实现的成本优化系统集成是电机控制与嵌入式视觉等工业物联网应用的理想选择。Zynq 7000 器件配备双核 ARM Cortex-A9 处理器,该处理器与基于 28nm Artix7 或 Kintex 7 的可编程逻辑集成,可实现优异的性能功耗比和最大的设计灵活性。Zynq 7000 器件具有高达 6.25M 的逻辑单元以及从 6.6Gb/s 到 12.5Gb/s 的收发器,可为多摄像头驾驶员辅助系统和 4K2K 超高清电视等大量嵌入式应用实现高度差异化的设计。
Zynq 7000s框图
Zynq7000 框图
Zynq UltraScale+ MPSoC系列:Zynq UltraScale+ MPSoC 器件不仅提供 64 位处理器可扩展性,同时还将实时控制与软硬件引擎相结合,支持图形、视频、波形与数据包处理。置于包含通用实时处理器和可编程逻辑的平台上,三个不同变体包括双核应用处理器 (CG) 器件、四核应用处理器和 GPU (EG) 器件、以及视频编解码器 (EV) 器件, 为 5G 无线、下一代 ADAS 和工业物联网创造了无限可能性。三者均为16nm FinFET+可编程逻辑结构。
Zynq UltraScale+ MPSoC CG器件框图
Zynq UltraScale+ MPSoC EG器件框图
原文链接:https://blog.csdn.net/weixin_43593478/article/details/132796334
XC7Z020
XC7Z020是Xilinx公司Zynq-7000系列SoC(System on Chip,片上系统)中的一款产品。与传统的FPGA不同,Zynq-7000系列集成了一个基于ARM的处理系统(PS)与可编程逻辑(PL),即FPGA结构,形成了一个高度灵活且集成度高的解决方案。具体到XC7Z020,它结合了双核ARM Cortex-A9处理器与Artix-7系列的FPGA架构,适用于需要高性能处理能力和可重配置逻辑的复杂嵌入式应用。
关键特性:
-
ARM Cortex-A9 MPCore处理器:XC7Z020集成了双核ARM Cortex-A9处理器,支持对称多处理(SMP)和非对称多处理(AMP)模式,提供强大的处理能力,适合运行操作系统(如Linux、RTOS)及复杂软件算法。
-
可编程逻辑(PL)部分:包含Artix-7系列FPGA的逻辑资源,包括大量的逻辑单元、DSP切片、BRAM以及丰富的I/O资源,可实现定制化的硬件加速、接口桥接和专用逻辑功能。
-
高速接口:支持多种高速接口标准,如千兆以太网(Gigabit Ethernet)、PCI Express(PCIe)、SATA、USB等,便于与外部设备高速通信。
-
低功耗设计:采用低功耗工艺和技术,支持动态电源管理,有助于在保持高性能的同时降低系统功耗。
-
安全性增强:提供加密引擎和安全启动等特性,增强系统的安全性和可靠性。
-
封装选择:XC7Z020提供了多种封装形式,如FFG676、FFG900等,以适应不同应用场景的空间和引脚需求。
-
开发工具:支持使用Xilinx的Vivado Design Suite进行系统级设计、硬件描述语言(HDL)编程、软件开发以及系统集成,简化了SoC级别的设计流程。
由于其独特的SoC架构,XC7Z020广泛应用于需要高性能计算与灵活可编程逻辑相结合的领域,比如工业自动化、汽车电子、通信基础设施、医疗成像、航空航天以及国防系统等。
XC7Z020
-
XC7Z020 是一款由 Xilinx(现在属于 AMD)生产的 FPGA(现场可编程门阵列)器件。FPGA 是一种半导体器件,可以在制造后通过软件编程来配置其硬件功能。XC7Z020 属于 Xilinx 的第七代产品系列,也就是 Virtex 7 系列,这个系列提供了高性能和高级功能,适合用于复杂的设计和应用。
XC7Z020 具体的特点包括:
-
逻辑资源:这个器件具有大量的逻辑单元(LE),可以用来实现用户设计的逻辑功能。
-
存储资源:包括块 RAM 和分布式 RAM,用于存储数据和配置。
-
DSP 资源:数字信号处理资源,用于执行信号处理算法。
-
端口:提供多种类型的 I/O 端口,用于连接外部设备。
-
时钟管理:内置时钟管理单元,用于生成和分配时钟信号。
-
互连:提供了高效的逻辑单元互连,允许用户设计复杂的逻辑结构。
Virtex 7 系列器件支持 45 纳米工艺技术,具有很高的性能和密度,适用于高端计算、高速数据处理和复杂的逻辑控制应用。XC7Z020 作为这个系列的一员,也被设计用于满足这些要求,尤其是在需要大量逻辑资源和高速 I/O 性能的应用中。
XC7Z020
是Xilinx公司ZYNQ-7000系列的一款高性能全可编程SoC(系统级芯片)。以下是对XC7Z020的详细信息和特点的归纳:
-
芯片概述:
-
型号:XC7Z020
-
系列:ZYNQ-7000
-
主要特点:高性能、全可编程SoC,包含处理系统(PS)和可编程逻辑(PL)两部分。
-
-
处理系统(PS)部分:
-
处理器:集成了两个Cortex-A9处理器,提供强大的处理能力。
-
内存支持:支持DDR3、DDR3L、DDR2、LPDDR2等外部存储器接口。
-
外设接口:包括USB2.0、Gigabit Ethernet、SD/SDIO等关键外设接口。
-
-
可编程逻辑(PL)部分:
-
逻辑资源:拥有85K个逻辑单元、4.9Mbits的嵌入式存储资源、220个DSP单元。
-
时钟管理:包含4个时钟管理单元(CMT)和16个全局时钟网络。
-
I/O资源:提供6个用户I/O BANK和最大253个用户I/O引脚。
-
-
封装和速度等级:
-
封装:BGA400封装,引脚间距为0.8mm。
-
速度等级:-2,工业级。
-
-
应用领域:
-
由于其高度可编程性、高性能处理器、大容量逻辑单元、丰富的外设接口和低功耗设计,XC7Z020被广泛应用于通信系统、多摄像头驾驶员辅助系统、4K2K超高清电视等嵌入式应用中。
-
-
扩展和接口:
-
在高性能开发套件中,如ICETEK-XC7Z020-AL,XC7Z020扩展了视频、音频、千兆网络、TF、HDMI、UART、LCD等多种外设接口以及数据接口,方便用户进行使用和开发。
-
-
性能和参数:
-
最大频率:处理器核高达866MHz。
-
板载存储器:SPI FLASH 64Mb,DDR3 4Gbit x 2片。
-
数字视频接口:支持连接130万像素数字摄像头,实现数字视频信号的输入。
-
其他接口:包括VGA接口、千兆网络接口、RS-232接口、UART接口、USB接口、TF CARD接口、HDMI接口等。
-
综上所述,XC7Z020作为一款高性能全可编程SoC,凭借其丰富的逻辑资源、强大的处理能力、灵活的接口配置和广泛的应用领域,成为嵌入式系统设计中的优选方案。
ZYNQ-7000 XC7Z020 多网口 FPGA开发板
01、产品概述
此款开发板使用的是Xilinx公司的Zynq 7000系列的芯片,型号为XC7Z020-2CLG484I,5 路千兆以太网接口,支持多网口高速数据交换数据处理存储,视频传输处理以及工业控制等。内核 CPU搭载双核 ARM CORTEX-A9;在FPGA芯片的HP端口上连接了2 片 512MB DDR3共1GB,32bit 总线,数据速率 1066Mbps;1 片 256Mbit QSPI FLASH用来静态存储FPGA芯片的配置文件或者其它用户数据, 外围扩展了丰富的外设接口供用户使用;HDMI 输出最高支持 1080P@60Hz 输出。
02、产品参数
主要参数:
核心板:AC7021
FPGA型号:XC7Z020-2CLG4841
内核: 双核 ARM Cortex-A9,主频767MHZ
内存:DDR3 1GB,数据速率1066Mbps
芯片级别:工业级,工作温度 -40°C~85°C
逻辑单元数量:85K
查找表:53.2
触发器:106.4
乘法器:220
Block RAM:4.9Mb
EMMC FLASH:8GB
QSPI FLASH:256MBit
MIO(ARM 端):39 个
PL(FPGA端):198 个
LVDS 差分对:48个
电压可调 1O:100 个
功能和接口:
DDR3:2片512MB DDR3共1GB,32bit总线,数据速率1066Mbps
QSPl Flash:1片 256Mbit QSPI FLASH,可用作 FPGA 用户数据的存储
eMMC Flash:8GB,在ZYNQ 系统使用中,可以作为系统大容量的存储设备
以太网接口:5 路千兆以太网 RJ-45 接口,进行以太网数据交换
JTAG 口:板载 USB CABLE 接口,在线下载和调试 Zynq 系统
HDMI输出:HDMI 视频输出接口1路,最高支持1080P@60Hz输出支持3D 输出
USB 2.0接口:4路 USB 2.0 接口,可连接鼠标、键盘等 USB 外设
USB 转串口:1路 USB Uart 接口,用于和电脑通信,方便用户调试
晶振:1 个 33.33Mhz 有源晶振,给 PS 系统提供稳定时钟源1 个 50Mhz 有源晶振,为 PL逻辑提供额外的时钟
TF 卡座:1路 TF 卡座,用于存储操作系统镜像和文件系统
LED:2个LED灯,1个PS控制,4个PL控制
按键:2 个按键和1个复位按键,1个 PS 控制按键,1个PL控制按键
40 针扩展口:预留 2个40 针 2.54mm 间距的扩展口,可以外接黑金的各种模块(双目摄像头,TFT LCD 屏,高速 AD 模块等等)
电源参数:
输入电压:+12V 电压输入
供电:12V / 3A 供电
输入电流:3A 最大电流
包装清单:
FPGA开发板:1 块
Mini USB 线:1 个
TF卡:1 个
透明保护板:1块
12V电源:1 个
读卡器:1个
结构尺寸:
尺寸大小:核心板 60mm x 60mm,扩展板 188mm x 106mm
叠层数量:核心板 10 层 PCB 板设计,扩展板采用 4 层 PCB 板设计
03、结构尺寸图
04、功能接口图
核心板
开发板
05、应用领域
● 数据处理存储
● 视频传输处理
● 智能识别
● 医疗安防
● 车载数码
● 工业控制
● 智能电网
原文链接:https://blog.csdn.net/dpwkj/article/details/137083280
FPGA开发板 Artix-7 XC7A100T-2FGG484I
01开发板介绍
此款开发板采用核心板+扩展板的模式,方便用户对核心板的二次开发利用。FPGA使用的是Xilinx公司的ARTIX-7系列的芯片,型号为XC7A100T-2FGG484I。在核心板使用了2片MICRON公司的MT41J256M16HA-125 DDR3芯片,组合成32bit的数据总线宽度。1个128Mb的QSPI FLASH用来静态存储FPGA芯片的配置文件或者其它用户数据。底板为核心板扩展了丰富的外围接口,其中包含PCIe、千兆以太网、HDMI输入输出接口等等。
02主要参数
核心板
FPGA:Xilinx ARTIX-7系列FPGA芯片XC7A100T-2FGG484I,速度等级为2,温度等级为工业级。
DDR3:2片大容量的512MByte(共1GB)高速DDR3 SDRAM,时钟速度可达400MHz(数据速率800Mbps),可作为FPGA的数据存储,图像分析缓存,数据处理。
QSPI FLASH:一片128Mbit的QSPI FLASH存储芯片,用作FPGA芯片配置文件和用户数据的存储。
时钟:两个高精度Sitime公司的LVDS差分晶振,一个是200MHz,另一个是125MHz,为FPGA系统和GTP模块提供稳定的时钟输入。
扩展板
PCIe x4接口:1路支持PCI Express 2.0标准,提供PCIe x4高速数据传输接口,单通道通信速率可高达5GBaud。
10/100M/1000M以太网RJ-45接口:2路千兆以太网接口芯片采用Micrel公司的KSZ9031RNX以太网PHY芯片为用户提供网络通信服务。KSZ9031RNX 芯片支持10/100/1000 Mbps网络传输速率; 全双工和自适应。
HDMI输出:1路HDMI输出接口,选用Silion Image公司的SIL9134 HDMI编码芯片,最高支持1080P@60Hz输出,支持3D输出。
HDMI输入:1路HDMI输入接口,选用Silion Image公司的SIL9013 HDMI解码芯片,最高支持1080P@60Hz输入,支持不同格式的数据输出。
USB Uart接口:1路Uart转USB接口,用于和电脑通信,方便用户调试。串口芯片采用Silicon Labs CP2102GM的USB-UAR芯片, USB接口采用MINI USB接口。
Micro SD卡座:1路Micro SD卡座,支持SD模式和SPI模式。
EEPROM:板载一片IIC接口的EEPROM 24LC04;
40针扩展口:预留2个40针2.54mm间距的扩展口,可以外接黑金的各种模块(双目摄像头,TFT LCD屏,高速AD模块等等)。扩展口包含5V电源1路,3.3V电源2路,地3路,IO口34路。
JTAG口:10针2.54mm标准的JTAG口,用于FPGA程序的下载和调试;
按键:2个用户按键,1个复位按键(在核心板);
04发货清单
FPGA开发板一块
Mini USB线一根
12V电源一个
USB下载器一个
散热风扇一个
05结构尺寸
06应用场景
人工智能
机器视觉
图像处理
自动驾驶
高速通信
工业控制
仪器仪表
机器人
原文链接:https://blog.csdn.net/dpwkj/article/details/136645186
XC7A100T
是一款由Xilinx公司推出的高性能可编程逻辑器件(FPGA),属于Artix-7系列。以下是关于XC7A100T的详细信息和特点:
-
基本参数:
-
芯片型号:XC7A100T
-
系列:Artix-7
-
封装类型:根据具体型号有所不同,如FGG484、CSG324等
-
温度范围:-40°C 至 100°C(工业级)
-
-
性能特点:
-
高性能:具有快速的时钟速度和高吞吐量,能够处理复杂的计算任务和数据流。
-
低功耗:采用低功耗设计,能够有效降低能耗,提高系统的效率。
-
配置灵活:支持多种配置模式,可以根据不同的应用需求进行定制化配置,提供最佳的性能和功耗平衡。
-
高可靠性:采用可靠的设计和制造工艺,具有优秀的抗干扰能力和稳定性,保证系统的稳定运行。
-
-
内存与接口:
-
通常与DDR3 SDRAM结合使用,提供高速数据存储和图像处理缓存。
-
配备QSPI-FLASH用于静态存储FPGA芯片的配置文件或其他用户数据。
-
提供丰富的外设接口和通信接口,如USB to UART、千兆以太网接口、JTAG下载接口等。
-
-
应用领域:
-
通信系统:用于实现高速数据传输、信号处理、协议转换等功能。
-
视频处理:用于实现高清视频采集、图像处理、视频编解码等功能。
-
工业自动化:用于实现控制、监测、数据采集等功能。
-
医疗设备:用于实现医疗图像处理、信号处理、数据采集等功能。
-
汽车电子:在先进的驾驶辅助系统(ADAS)、车载娱乐系统等汽车电子领域中,用于处理图像、声音和数据。
-
军事和航空航天:在卫星通讯、雷达系统、导航设备等领域,由于其高可靠性和适应恶劣环境的能力而被广泛使用。
-
-
扩展性:
-
核心板体积小巧,适合二次开发,提供大量的IO接口,如GTX高速差分信号接口等。
-
可通过扩展板实现更多功能,如PCIe、HDMI输入输出接口等。
-
综上所述,XC7A100T是一款功能强大、性能优越的FPGA芯片,广泛应用于各种需要高性能、低功耗和灵活配置的领域。
XC7A100T
XC7A100T是Xilinx公司生产的Artix-7系列FPGA(Field-Programmable Gate Array,现场可编程门阵列)中的一款型号。FPGA是一种集成电路,其内部结构可以通过编程来重新配置,以实现用户自定义的数字逻辑电路功能。XC7A100T特别适用于那些需要高性能、低功耗以及成本效益的设计场景,特别是在通信、工业控制、汽车电子、医疗设备以及消费电子等领域。
关键特性:
-
逻辑资源:XC7A100T提供了丰富的逻辑资源,包括大量的可配置逻辑单元(CLBs)、数字信号处理(DSP)切片、以及大量的输入/输出(I/O)引脚。具体到XC7A100T,它包含约100,000个逻辑单元,具体数目可能因具体封装和速度等级有所不同。
-
布线资源和层次:具备先进的布线资源,支持高速信号传输,以及高效的层次化布线结构,保证了设计的灵活性和性能。
-
DSP能力:拥有数百个DSP切片,每个切片可以实现乘法累加(MAC)运算等复杂数学运算,适合于需要大量数学运算的高性能计算应用,如数字信号处理、图像处理等。
-
内存资源:集成有Block RAM(BRAM),用于存储数据或实现特定的存储逻辑,这对于缓存、帧缓冲等应用至关重要。
-
低功耗设计:Artix-7系列,包括XC7A100T,采用了先进的低功耗技术,包括可选的电源域和优化的睡眠模式,非常适合电池供电或对功耗有严格要求的应用。
-
封装选项:XC7A100T提供了多种封装选择,从较小的FFG1156到较大的FTG1156,以适应不同设计的空间和散热需求。
-
开发支持:Xilinx提供全面的开发工具链,包括Vivado Design Suite,支持高级综合、仿真、布局布线以及比特流生成,帮助工程师高效完成设计、验证和实现过程。
综上,XC7A100T FPGA以其丰富的资源、高性能、低功耗和灵活性,成为了众多高性能嵌入式系统设计的理想选择。
XC7A100T
XC7A100T 是 Xilinx 公司 Artix-7 系列的一款 FPGA(现场可编程门阵列)芯片。Artix-7 系列 FPGA 提供了高逻辑密度、低功耗、高级串行连接功能和卓越的性能,非常适合广泛的应用,包括工业自动化、数字信号处理、嵌入式视觉、医疗电子和航空航天/国防等。Artix-7 FPGA 提供了多种配置选项,以满足不同的性能和容量需求。
Xilinx 是知名的 FPGA 和可编程系统单片机(PSoC)制造商,其产品广泛应用于工业、通信、航空航天和国防等领域。
以下是 XC7A100T 的一些主要特性和规格:
-
逻辑资源:
-
大约 100K 的逻辑单元(Logic Cells)
-
丰富的内存资源,包括 Block RAM(BRAM)和其他存储选项
-
数字信号处理(DSP)单元,用于高效执行复杂数学运算
-
-
I/O 和封装:
-
提供多种 I/O 标准和速度等级
-
通常以 BGA 封装形式提供,以适应不同的板级设计需求
-
-
串行连接:
-
高速串行接口,如 PCIe、千兆以太网(Gigabit Ethernet)等
-
支持多种串行通信协议,如 SPI、I2C、UART 等
-
-
时钟和电源管理:
-
灵活的时钟管理单元(CMTs),支持多个独立时钟域
-
优化的低功耗设计,包括动态功耗管理和睡眠模式
-
-
配置和启动:
-
支持多种配置模式,包括主 SPI、从 SPI、JTAG 等
-
可以通过外部存储器(如 QSPI Flash)进行非易失性配置存储
-
-
开发工具和支持:
-
使用 Xilinx 的 Vivado Design Suite 进行设计和编程
-
提供丰富的 IP 核、库和参考设计,加速开发过程
-
-
温度和可靠性:
-
工业级温度范围,适合各种环境应用
-
可靠性高,适合长时间稳定运行
-
XC7A100T 的具体特性和规格可能因具体的产品版本和封装选项而有所不同。因此,在设计和实现基于 XC7A100T 的系统时,建议参考 Xilinx 的官方文档和指南,以确保满足项目的具体需求。
AXI总线
是一种总线协议,该协议是ARM公司提出的AMBA3.0中最重要的部分,是一种面向高性能、高带宽、低延迟的片内总线。AMBA4.0将其修改升级为AXI4.0。
AMBA4.0 包括AXI4.0、AXI4.0-lite、ACE4.0、AXI4.0-stream。
AXI4.0-lite是AXI的简化版本,ACE4.0 是AXI缓存一致性扩展接口,AXI4.0-stream是ARM公司和Xilinx公司一起提出,主要用在FPGA进行以数据为主导的大量数据的传输应用。
https://blog.csdn.net/bleauchat/article/details/96891619
ARM公司定义的一种高性能、可扩展的系统级总线,主要用于片上系统(SoC)中不同组件间的数据传输。AXI总线支持并行和串行数据传输,具有较高的传输带宽,能够满足高速数据传输的需求。
AXI总线具有以下特点:
-
高性能:AXI总线采用点对点的连接方式,能够提供较高的数据传输速率和带宽。
-
可扩展性:AXI总线支持多通道和虚拟通道,可以灵活地适应不同的系统需求。
-
兼容性:AXI总线遵循ARM公司定义的标准,因此具有较好的兼容性和互操作性。
-
灵活性:AXI总线支持多种数据传输模式,包括单次传输、流水线传输和 burst 传输等。
AXI总线在SoC设计中广泛应用于处理器、内存、外设等各种组件之间的数据交互。在我国的芯片设计和开发中,AXI总线也是一个重要的技术和工具。遵循ARM架构的SoC设计,可以充分利用AXI总线的优势,提高系统的性能和效率。
AXI总线设计用于连接SoC内部的各种组件,如CPU、DSP、GPU、内存控制器、外设等,以高效地传输数据和控制信息。
AXI总线的关键特性:
-
分离的读写通道:AXI定义了独立的读地址(AR)、读数据(R)、写地址(AW)、写数据(W)和写响应(B)通道,这使得读写操作可以并行进行,显著提高了总线的带宽和效率。
-
突发传输:支持一次性传输多个数据 beat(数据段),只需一个地址事务,减少了地址总线的占用,提高了数据传输效率。
-
流水线传输:允许在不同阶段(如地址阶段、数据阶段)的事务重叠进行,进一步提高了总线的吞吐量。
-
灵活的数据宽度:AXI总线支持可配置的数据总线宽度,可以根据不同的应用场景选择最合适的数据宽度,平衡性能与资源消耗。
-
支持cache和非cache一致性:AXI协议考虑到与CPU cache的交互,提供了一套机制来管理数据的一致性,包括内存屏障等指令。
-
可扩展性:AXI总线架构设计为高度模块化和可扩展,可以通过添加更多特性或通道来满足不同系统的需求,比如AXI-Lite用于低带宽的控制寄存器访问,AXI-Stream则专注于高效的数据流传输。
-
服务质量(QoS):高级版本的AXI协议(如AXI4)引入了服务质量的概念,允许设置传输优先级,优化系统性能和实时性。
AXI总线因其高效、灵活和可扩展的特性,在现代高性能嵌入式系统和多核处理器设计中扮演着至关重要的角色。
存储器
RAM(random access memory):
随机存取存储器。可读可写,并且速度很快。
是与CPU直接交换数据的内部存储器,也叫主存(内存)。它可以随时读写,而且速度很快,通常作为操作系统或其他正在运行中的程序的临时数据存储媒介。
电源关闭时RAM不能保留数据。
发展:SDRAM、DRAM、DDR。
静态随机存储器、动态随机存储器和同步动态随机存储器。
SRAM(Static Random Access Memory,静态随机存储器)
它是一种具有静止存取功能的内存,不需要刷新电路即能保存它内部存储的数据。
优点是速度快,不必配合内存刷新电路,可提高整体的工作效率。
缺点是集成度低,功耗较大,相同的容量体积较大,而且价格较高,少量用于关键性系统以提高效率。
DRAM(Dynamic Random Access Memory,动态随机存储器)
DRAM只能将数据保持很短的时间。为了保持数据,DRAM使用电容存储,所以必须隔一段时间刷新(refresh)一次,如果存储单元没有被刷新,存储的信息就会丢失。
必须刷新,后面衍生出DDR,DDR2,DDR3,DDR4。
SDRAM
其实就是同步DRAM的意思,“同步”是指内存工作需要同步时钟,内部命令的发送与数据的传输都以它为基准。内存频率与CPU外频同步,这大幅提升了数据传输效率,再加上64bit的数据位宽与当时CPU的总线一致,只需要一根内存就能让电脑正常工作了,这降低了采购内存的成本。
SDRAM从发展到现在已经经历了四代,分别是:第一代SDR SDRAM,第二代DDR SDRAM,第三代DDR2 SDRAM,第四代DDR3 SDRAM,现在已经发展到DDR5 SDRAM。
集成在soc上的基本为SDRAM。HI3516EV300是集成DDR3。
DDR SDRAM双数据率同步动态随机存储器
Double Data Rate Synchronous Dynamic Random Access Memory(双数据率同步动态随机存储器)的简称,是由VIA等公司为了与RDRAM相抗衡而提出的内存标准,为第二代SDRAM标准。其常见标准有DDR 266、DDR 333和DDR 400。其对于SDRAM,主要它允许在时钟脉冲的上升沿和下降沿传输数据,这样不需要提高时钟的频率就能实现双倍的SDRAM速度,例如DDR266内存与PC133 SDRAM内存相比,工作频率同样是133MHz,但在内存带宽上前者比后者高一倍。这种做法相当于把单车道更换为双车道,内存的数据传输性能自然可以翻倍。
DDR2(Double Data Rate 2)SDRAM
是由JEDEC(电子设备工程联合委员会)开发的第三代SDRAM内存技术标准,1.8v工作电压,240线接口,提供了相较于DDR SDRAM更高的运行效能与更低的电压,同样采用在时钟的上升/下降延同时进行数据传输的基本方式,但拥有两倍于上一代DDR内存预读取能力(即4bit数据读预取能力),其常见的频率规范有DDR2 400\533\667\800\1066\1333等,总线频率553MHz的DDR2内存只需133MHz的工作频率。
从而其传输速度更快(可达 667MHZ ),耗电量更低,散热性能更优良。
DDR3 SDRAM
DDR3是目前最常见的内存类型之一。
相比起DDR2具备更低的工作电压(1.5v),240线接口,支持8bit预读,只需133MHz的工作频率便可实现1066MHz的总线频率。其频率从800MHz起跳,常见频率有DDR3 800\1066\1333\1600\1866\2133等。DDR3是当前流行的内存标准,Intel酷睿i系列(如LGA1156处理器平台)、AMD AM3主板及处理器的平台都是其“支持者”。
特点:
速度和带宽提升:DDR3相对于DDR2在速度和带宽方面有了显著的提升。DDR3的内部时钟速度更高,数据传输速度更快,带宽更大,因此可以提供更高的数据传输性能。
低功耗:DDR3的工作电压较DDR2更低,通常为1.5V,这有助于减少电能消耗和热量产生。低功耗也使得DDR3在移动设备和笔记本电脑等对电池寿命和散热要求较高的场景中更具优势。
高容量支持:DDR3支持更大的内存容量,可以提供更多的存储空间。这对于需要处理大量数据的应用程序和任务来说非常重要,如图形处理、视频编辑和虚拟化等。
高频率和时序:DDR3内存的频率范围通常从800MHz到2133MHz,可以根据需求选择不同的频率。此外,DDR3还引入了更严格的时序要求,以确保数据的稳定和可靠传输。
向后兼容性:DDR3内存插槽通常是不兼容DDR2或DDR的,但DDR3内存模块可以在DDR3兼容的主板上与较早的DDR2或DDR插槽一起使用。然而,需要注意的是,内存模块将以较低的速度和时序运行,以适应较低的标准。
DDR3与DDR2的比较
DDR3与DDR2几个主要的不同之处 :
1.突发长度(Burst Length,BL)
由于DDR3的预取为8bit,所以突发传输周期(Burst Length,BL)也固定为8,而对于DDR2和早期的DDR架构系统,BL=4也是常用的,DDR3为此增加了一个4bit Burst Chop(突发突变)模式,即由一个BL=4的读取操作加上一个BL=4的写入操作来合成一个BL=8的数据突发传输,届时可通过A12地址线来控制这一突发模式。而且需要指出的是,任何突发中断操作都将在DDR3内存中予以禁止,且不予支持,取而代之的是更灵活的突发传输控制(如4bit顺序突发)。
2.寻址时序(Timing)
就像DDR2从DDR转变而来后延迟周期数增加一样,DDR3的CL周期也将比DDR2有所提高。DDR2的CL范围一般在2~5之间,而DDR3则在5~11之间,且附加延迟(AL)的设计也有所变化。DDR2时AL的范围是0~4,而DDR3时AL有三种选项,分别是0、CL-1和CL-2。另外,DDR3还新增加了一个时序参数——写入延迟(CWD),这一参数将根据具体的工作频率而定。
其中DDR2 的频率对照表如下图所示。
3.DDR3新增的重置(Reset)功能
重置是DDR3新增的一项重要功能,并为此专门准备了一个引脚。DRAM业界很早以前就要求增加这一功能,如今终于在DDR3上实现了。这一引脚将使DDR3的初始化处理变得简单。当Reset命令有效时,DDR3内存将停止所有操作,并切换至最少量活动状态,以节约电力。
在Reset期间,DDR3内存将关闭内在的大部分功能,所有数据接收与发送器都将关闭,所有内部的程序装置将复位,DLL(延迟锁相环路)与时钟电路将停止工作,而且不理睬数据总线上的任何动静。这样一来,将使DDR3达到最节省电力的目的。
4.DDR3新增ZQ校准功能
ZQ也是一个新增的脚,在这个引脚上接有一个240欧姆的低公差参考电阻。这个引脚通过一个命令集,通过片上校准引擎(On-Die Calibration Engine,ODCE)来自动校验数据输出驱动器导通电阻与ODT的终结电阻值。当系统发出这一指令后,将用相应的时钟周期(在加电与初始化之后用512个时钟周期,在退出自刷新操作后用256个时钟周期、在其他情况下用64个时钟周期)对导通电阻和ODT电阻进行重新校准。
参考电压分成两个
在DDR3系统中,对于内存系统工作非常重要的参考电压信号VREF将分为两个信号,即为命令与地址信号服务的VREFCA和为数据总线服务的VREFDQ,这将有效地提高系统数据总线的信噪等级。
点对点连接(Point-to-Point,P2P)
这是为了提高系统性能而进行的重要改动,也是DDR3与DDR2的一个关键区别。在DDR3系统中,一个内存控制器只与一个内存通道打交道,而且这个内存通道只能有一个插槽,因此,内存控制器与DDR3内存模组之间是点对点(P2P)的关系(单物理Bank的模组),或者是点对双点(Point-to-two-Point,P22P)的关系(双物理Bank的模组),从而大大地减轻了地址/命令/控制与数据总线的负载。而在内存模组方面,与DDR2的类别相类似,也有标准DIMM(台式PC)、SO-DIMM/Micro-DIMM(笔记本电脑)、FB-DIMM2(服务器)之分,其中第二代FB-DIMM将采用规格更高的AMB2(高级内存缓冲器)。
面向64位构架的DDR3显然在频率和速度上拥有更多的优势,此外,由于DDR3所采用的根据温度自动自刷新、局部自刷新等其它一些功能,在功耗方面DDR3也要出色得多,因此,它可能首先受到移动设备的欢迎,就像最先迎接DDR2内存的不是台式机而是服务器一样。在CPU外频提升最迅速的PC台式机领域,DDR3未来也是一片光明。Intel预计在第二季所推出的新芯片-熊湖(Bear Lake),其将支持DDR3规格,而AMD也预计同时在K9平台上支持DDR2及DDR3两种规格。
DDR4内存
DDR4相对于DDR3提高了传输速率和带宽,最高可达3200 MHz,同时还可以实现更低的电压和更低的功耗。
主要特点
更高的速度和带宽:DDR4相对于DDR3有更高的内部时钟速度和数据传输速率,从而提供更高的带宽。DDR4的传输速率通常从2133MHz开始,可以达到3200MHz以上,甚至更高。16bit预取机制(DDR3为8bit),同样内核频率下理论速度是DDR3的两倍。
低功耗:DDR4相对于DDR3具有更低的工作电压,通常为1.2V,相比DDR3的1.5V,功耗降低了一些。低功耗的特点有助于减少能源消耗,并且产生较少的热量。
高密度和容量支持:DDR4内存相对于DDR3可以支持更大的内存容量。DDR4内存模块的单个芯片密度更高,同时支持多通道和多插槽配置,可以提供更大的存储空间。
更严格的时序要求:DDR4引入了更严格的时序要求,以确保数据的稳定和可靠传输。通过更精细的时序控制,DDR4可以提供更高的性能和更好的信号完整性。
向后兼容性:DDR4内存模块通常不兼容DDR3的内存插槽,也就是说DDR4内存模块不能在DDR3兼容的主板上使用。然而,一些主板支持同时插槽DDR3和DDR4内存,但内存模块将以较低的速度和时序运行。
DDR5内存
DDR5是最新的内存类型,可以提供更高的传输速率和更高的带宽,可以达到8400 MHz的传输速率,同时还支持更高的容量、更高的带宽和更高的数据完整性。
主要特点
更高的速度和带宽:DDR5内存相对于DDR4有更高的内部时钟速度和数据传输速率,从而提供更高的带宽。DDR5的传输速率可以达到6400MT/s以上,比DDR4的最高传输速率提高了一倍以上。
更高的密度和容量支持:DDR5内存相对于DDR4可以支持更大的内存容量和更高的密度。DDR5内存模块的单个芯片容量更大,同时支持更多的通道和更多的插槽配置,可以提供更大的存储空间。
更低的功耗:DDR5内存相对于DDR4具有更低的工作电压和更高的能效。DDR5的工作电压通常为1.1V,比DDR4的1.2V低一些。低功耗的特点有助于减少能源消耗,并且产生较少的热量。
更严格的时序控制:DDR5引入了更严格的时序控制,以确保数据的稳定和可靠传输。通过更精细的时序控制,DDR5可以提供更高的性能和更好的信号完整性。
改进的错误修复和可靠性:DDR5引入了新的错误修复和可靠性功能,包括行级错误修复(RAS)和列级错误修复(CAS)。这些功能可以提供更好的数据完整性和可靠性,减少因内存错误导致的系统崩溃和数据损坏的风险。
总结
DDR4和DDR5相对于DDR3都提供了更高的性能和效率。然而,它们需要配备相应的主板和处理器才能正常运行,并且价格相对较高。选择哪种内存类型取决于您的具体需求和预算。如果您的计算机用途较为简单,DDR3内存已经足够满足您的需求,但如果您需要更高的性能和更多的扩展空间,可以选择DDR4或DDR5内存。比较重要的是,DDR3、DDR4和DDR5的内存都是不能混用的。
https://programmerblog.xyz/
原文链接:https://blog.csdn.net/xishining/article/details/133924632
内存双通道编辑
很多人经常将DDR/DDR2/DDR3和内存的双通道、三通道技术相混淆,事实上这是两组毫无关系的概念,DDR/X是一种内存的设计技术,而多通道内存技术是一种在主板上实现的并行内存访问技术,与使用的内存类型没有关系。两个通道甚至可以使用不同速率或访问时序的内存。
ROM:只读存储器
ROM所存数据,一般是装入整机前事先写好的,整机工作过程中只能读出,而不像随机存储器那样能快速地、方便地加以改写。
ROM所存数据稳定,断电后所存数据也不会改变。
发展:flash、HDD、SSD。
原文链接:https://blog.csdn.net/wd12306/article/details/130122365
频标
在无线电通信和电子工程中,通常指的是一个精确已知且稳定的频率信号源,用于校准、测试接收机或发射机的频率准确性,或者作为参考频率使用。例如,频标信号发生器可以产生不同频率的纯正弦波信号,用于设备调试、频率计数器的校准等。
频率标准通常指的是精确的频率源,如原子钟,它们用于设定和保持无线电通信系统、全球定位系统(GPS)、时间同步系统等的频率基准。在电子工程中,频率标准也用于测试和校准电路的频率响应。
重构
就是通过调整程序代码改善软件的质量、性能,使其程序的设计模式和架构更趋合理,提高软件的扩展性和维护性。但是这个解释缺少了一个前提,完整的说法应该是:在不改变软件可观察行为的前提下,通过调整程序代码改善软件的质量、性能,使其程序的设计模式和架构更趋合理,提高软件的扩展性和维护性。
指对软件系统进行根本性的重新设计,以便提高其可用性、可维护性和可扩展性,同时也可能为了降低成本、提升性能或满足新的业务需求。重构通常涉及对现有系统的深入理解,以及识别出可以改进的地方。
重构不同于“重写”(Rewriting),后者通常意味着用不同的编程语言或技术栈彻底重新开发一个系统。重构更注重在保留系统核心功能和结构的基础上进行内部结构的优化和升级。
重构的步骤通常包括:
-
需求分析:明确重构的目标和原因,确定需要解决的问题。
-
系统评估:对现有系统进行全面的评估,包括代码质量、架构设计、性能等。
-
设计新架构:根据评估结果设计新的系统架构,确定关键的改进点。
-
计划实施:制定详细的重构计划,包括时间表、资源分配、风险管理等。
-
逐步实施:按照计划逐步进行重构,可能包括代码重构、架构调整、功能升级等。
-
测试与验证:在重构过程中进行充分的测试,确保重构后的系统满足预期需求。
-
文档更新:更新系统的文档,包括技术文档和用户手册。
-
用户培训:如果重构影响了用户界面或使用方式,需要对用户进行重新培训。
重构是软件工程中的一个重要活动,可以帮助企业延长软件产品的生命周期,提高其市场竞争力。然而,重构也是一个复杂的过程,需要仔细规划和执行,以避免引入新的问题和风险。
重构的目的:
-
提高代码质量:通过消除代码冗余、复杂度和不良设计模式,使代码更加清晰和简洁。
-
增强可读性:使得代码更容易被理解和维护,降低新成员加入团队的学习成本。
-
提升可维护性:良好的代码结构便于未来的修改和扩展,减少维护成本。
-
促进代码复用:通过抽象和模块化,增加代码的复用性,减少重复代码。
-
提升性能:有时重构可以间接发现并解决性能瓶颈。
重构的最佳实践:
-
小步快跑:每次只重构一小块代码,频繁地编译和测试,确保每一步都未破坏原有功能。
-
使用自动化测试:重构前确保有充分的测试覆盖,重构后运行所有测试来验证行为未变。
-
理解现有代码:在重构之前彻底理解代码的功能和上下文,避免盲目修改。
-
遵循设计原则:如单一职责原则(SRP)、开闭原则(OCP)、里氏替换原则(LSP)等,这些原则指导你做出更好的设计决策。
-
适时重构:在添加新功能、修复错误或理解代码时发现不合理结构,都是重构的好时机。
-
代码审查:重构成果应该经过同事的代码审查,以确保改动合理且符合团队编码规范。
常见的重构手法:
-
提取函数(Extract Function):将一段代码封装成一个独立的函数,提高代码复用和阅读性。①拆分过长的函数。②提炼在多个函数中使用的相同代码。
-
内联函数(Inline Function)( 在C++中,以inline修饰的函数叫做内联函数,编译时C++编译器会调用内联函数的地方展开,没有函数压栈开销,内联函数提升程序运行的效率):将小而频繁调用的函数体直接嵌入调用处,减少函数调用开销。
-
提炼变量(Extract Variable):将复杂的表达式或魔法数字替换成有意义的变量名,增强代码的表达力。
-
搬移函数(Move Function):将函数移动到更适合的位置,通常是更相关的类或模块中。
-
重构继承关系(Replace Inheritance with Delegation/Composition):使用组合或委托代替继承,以减少耦合和提高灵活性。
重构是一个技术活,需要开发者具备良好的设计直觉、对代码的敏感度以及对软件设计原则的深刻理解。正确的重构不仅能改善现有代码,还能提升开发团队的整体技术水平和项目交付质量。
解耦
一、耦合
1、耦合是指两个或两个以上的体系或两种运动形式间通过相互作用而彼此影响以至联合起来的现象。
2、在软件工程中,对象之间的耦合度就是对象之间的依赖性。对象之间的耦合越高,维护成本越高,因此对象的设计应使类和构件之间的耦合最小。
3、分类:有软硬件之间的耦合,还有软件各模块之间的耦合。耦合性是程序结构中各个模块之间相互关联的度量。它取决于各个模块之间的接口的复杂程度、调用模块的方式以及哪些信息通过接口。
二、解耦
1、解耦,字面意思就是解除耦合关系。
2、在软件工程中,降低耦合度即可以理解为解耦,模块间有依赖关系必然存在耦合,理论上的绝对零耦合是做不到的,但可以通过一些现有的方法将耦合度降至最低。
3、设计的核心思想:尽可能减少代码耦合,如果发现代码耦合,就要采取解耦技术。让数据模型,业务逻辑和视图显示三层之间彼此降低耦合,把关联依赖降到最低,而不至于牵一发而动全身。原则就是A功能的代码不要写在B的功能代码中,如果两者之间需要交互,可以通过接口,通过消息,甚至可以引入框架,但总之就是不要直接交叉写。
4、观察者模式:观察者模式存在的意义就是「解耦」,它使观察者和被观察者的逻辑不再搅在一起,而是彼此独立、互不依赖。比如网易新闻的夜间模式,当用户切换成夜间模式之后,被观察者会通知所有的观察者「设置改变了,大家快蒙上遮罩吧」。QQ消息推送来了之后,既要在通知栏上弹个推送,又要在桌面上标个小红点,也是观察者与被观察者的巧妙配合。
三、如何解耦
1、反射解耦:我们可以利用Java的反射技术,通过类定名,来进行反射创建对象,这个时候我们可以成功的避免编译时异常,并且保证了项目在这个时候还能正常运行。
2、工厂模式解耦:在实际开发中我们可以把三层的对象都使用配置文件配置起来,当启动服务器应用加载的时候,让一个类中的方法通过读取配置文件,把这些对象创建出来并存起来。在接下来的使用的时候,直接拿过来用就好了。那么,这个读取配置文件,创建和获取三层对象的类就是工厂。
原文链接:https://blog.csdn.net/weixin_52536274/article/details/130334514
解耦(Decoupling)
是软件工程中的一项重要原则,指的是降低系统中各组件之间的相互依赖性,使得每个组件可以独立地开发、测试、部署和维护,而不会影响到其他部分。解耦的目标是提高系统的灵活性、可维护性和可扩展性。以下是实现解耦的一些策略和方法:
-
接口与抽象
-
定义清晰的接口:通过定义明确的接口(Interface)或抽象类,规定组件间的交互方式,隐藏具体实现细节。
-
依赖倒置原则(Dependency Inversion Principle, DIP):高层模块不应依赖于低层模块,两者都应该依赖于抽象。抽象不应该依赖于细节,细节应该依赖于抽象。
-
松耦合设计模式
-
工厂模式、抽象工厂模式:通过工厂类来创建对象,减少代码中对具体类的直接引用。
-
策略模式:定义一系列算法,将每个算法封装起来,并使它们可以相互替换,让算法的变化独立于使用算法的客户。
-
观察者模式:建立一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,当主题对象状态发生变化时,会通知所有观察者对象。
-
服务化与微服务架构
-
服务化:将大型应用拆分为一组小型服务,每个服务实现特定功能,并通过API进行通信。
-
微服务架构:这是一种更为彻底的服务化形式,每个服务都围绕着具体业务功能构建,拥有自己的数据库和独立运行的进程,服务之间通过轻量级通信机制(如HTTP RESTful API)交互。
-
模块化与组件化
-
模块化:将系统划分为多个模块,每个模块完成特定的功能,模块间通过明确定义的接口进行通信。
-
组件化:类似模块化,但更强调组件的可复用性和独立性,组件可以单独开发、测试和部署。
-
事件驱动与消息队列
-
事件驱动架构:系统中的组件通过发布和订阅事件来进行通信,而不是直接调用,从而减少直接耦合。
-
消息队列:利用消息中间件(如RabbitMQ、Kafka)异步处理请求,实现组件间的解耦。
-
配置与注入
-
依赖注入(Dependency Injection, DI):将依赖关系从代码中抽离出来,通过外部容器在运行时动态注入,降低组件间的耦合度。
-
配置文件:将配置信息从代码中分离出来,通过外部配置文件管理,使得系统更易于配置和修改。
通过以上方法,软件系统可以变得更加灵活、易于维护和扩展,同时提高开发效率和系统的整体健壮性
嵌入式与 bsp
嵌入式系统定义
IEEE(国际电气和电子工程师协会)对嵌入式系统的定义:“用于控制、监视或者辅助操作机器和设备的装置”。
国内普遍认同的嵌入式系统定义为:以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗等严格要求的专用计算机系统。可以这样认为,嵌入式系统是一种专用的计算机系统,作为装置或设备的一部分。
通常,嵌入式系统是一个控制程序存储在ROM中的嵌入式处理器控制板。事实上,所有带有数字接口的设备,如手表、微波炉、录像机、汽车等,都使用嵌入式系统,有些嵌入式系统还包含操作系统,但大多数嵌入式系统都是是由单个程序实现整个控制逻辑。
嵌入式系统的组成
一个嵌入式系统装置一般都由嵌入式计算机系统和执行装置组成,如图1-1所示,嵌入式计算机系统是整个嵌入式系统的核心,由硬件层、中间层、系统软件层和应用软件层组成。
执行装置也称为被控对象,它可以接受嵌入式计算机系统发出的控制命令,执行所规定的操作或任务。执行装置可以很简单,如手机上的一个微小型的电机,当手机处于震动接收状态时打开;也可以很复杂,如SONY 智能机器狗,上面集成了多个微小型控制电机和多种传感器,从而可以执行各种复杂的动作和感受各种状态信息。
下面对嵌入式计算机系统的组成进行介绍。
1)硬件层
硬件层中包含嵌入式微处理器、存储器(SDRAM、ROM、Flash等)、通用设备接口和 I/O接口(A/D、D/A、I/O等)备。在一片嵌入式处理器基础上添加电源电路、时钟电路和存储器电路,就构成了一个嵌入式核心控制模块。其中操作系统和应用程序都可以固化在ROM中。
(1)嵌入式微处理器
嵌入式系统硬件层的核心是嵌入式微处理器,嵌入式微处理器与通用CPU最大的不同在于:嵌入式微处理器大多工作在为特定用户群所专用设计的系统中,它将通用CPU许多由板卡完成的任务集成在芯片内部,从而有利于嵌入式系统在设计时趋于小型化,同时还具有很高的效率和可靠性。
嵌入式微处理器的体系结构可以采用冯·诺依曼体系或哈佛提醒哦结构;指令系统可以选用精简指令系统Reduced Instruction Set Computer,RISC)和复杂指令系统CISC(Complex Instruction Set Computer,CISC)。
CISC计算机在通道中只包含最有用的指令,确保数据通道快速执行每一条指令,从而提高了执行效率并使CPU硬件结构设计变得更为简单。
嵌入式微处理器有各种不同的体系,即使在同一体系中也可能具有不同的时钟频率和数据总线宽度,或集成了不同的外设和接口。据不完全统计,目前全世界嵌入式微处理器已经超过1000多种,体系结构有30多系列,其中主流的体系有ARM、MIPS、 PowerPC、X86和SH等。但与全球PC市场不同的是,没有一种嵌入式微处理器可以主导市场,仅以32位的产品而言,就有100种以上的嵌入式微处理器。嵌入式微处理器的选择是根据具体的应用而决定的。
(2)存储器
嵌入式系统需要存储器来存放和执行代码。包含Cache、主存和辅助存储器,其存储结构如图1-2所
嵌入式系统的存储结构示。
1>Cache
Cache是一种容量小、速度快的存储器阵列它位于主存和嵌入式微处理器内核之间,存放的是最近一段时间微处理器使用最多的程序代码和数据。在需要进行数据读取操作时,微处理器尽可能的从Cache中读取数据,而不是从主存中读取,这样就大大改善了系统的性能,提高了微处理器和主存之间的数据传输速率。
Cache的主要目标就是:减小存储器(如主存和辅助存储器)给微处理器内核造成的存储器访问瓶颈,使处理速度更快,实时性更强。
在嵌入式系统中Cache全部集成在嵌入式微处理器内,可分为数据Cache、指令Cache或混合Cache,Cache的大小依不同处理器而定。一般中高档的嵌入式微处理器才会把Cache集成进去。
2>主存
主存是嵌入式微处理器能直接访问的寄存器,用来存放系统和用户的程序及数据。它可以位于微处理器的内部或外部,其容量为256KB~1GB,根据具体的应用而定,一般片内存储器容量小,速度快,片外存储器容量大。
常用作主存的存储器有:
ROM类 NOR Flash、EPROM和PROM等。
RAM类 SRAM、DRAM和SDRAM等。
其中NOR Flash 凭借其可擦写次数多、存储速度快、存储容量大、价格便宜等优点,在嵌入式领域内得到了广泛应用。
3>辅助存储器
辅助存储器用来存放大数据量的程序代码或信息,它的容量大、但读取速度与主存相比就慢的很多,用来长期保存用户的信息。
嵌入式系统中常用的外存有:硬盘、NAND Flash、CF卡、MMC和SD卡等。
(3)通用设备接口和I/O接口
嵌入式系统和外界交互需要一定形式的通用设备接口,如A/D、D/A、I/O等,外设通过和片外其他设备的或传感器的连接来实现微处理器的输入/输出功能。每个外设通常都只有单一的功能,它可以在芯片外也可以内置芯片中。外设的种类很多,可从一个简单的串行通信设备到非常复杂的802.11无线设备。
目前嵌入式系统中常用的通用设备接口有A/D(模/数转换接口)、D/A(数/模转换接口),I/O接口有RS-232接口(串行通信接口)、Ethernet(以太网接口)、USB(通用串行总线接口)、音频接口、VGA视频输出接口、 I2C(现场总线)、SPI(串行外围设备接口)和IrDA(红外线接口)等。
2)中间层
硬件层与软件层之间为中间层,也称为硬件抽象层(Hardware Abstract Layer,HAL)或板级支持包(Board Support Package,BSP),它将系统上层软件与底层硬件分离开来,使系统的底层驱动程序与硬件无关,上层软件开发人员无需关心底层硬件的具体情况,根据 BSP 层提供的接口即可进行开发。该层一般包含相关底层硬件的初始化、数据的输入/输出操作和硬件设备的配置功能。
BSP具有以下两个特点:
硬件相关性:因为嵌入式实时系统的硬件环境具有应用相关性,而作为上层软 件与硬件平台之间的接口,BSP需要为操作系统提供操作和控制具体硬件的方法。
操作系统相关性:不同的操作系统具有各自的软件层次结构,因此,不同的操作系统具有特定的硬件接口形式。
实际上,BSP是一个介于操作系统和底层硬件之间的软件层次,包括了系统中大部分与硬件联系紧密的软件模块。
设计一个完整的BSP需要完成两部分工作:嵌入式系统的硬件初始化以及BSP功能,设计硬件相关的设备驱动。
(1)嵌入式系统硬件初始化
系统初始化过程可以分为3个主要环节,按照自底向上、从硬件到软件的次序依次为:片级初始化、板级初始化和系统级初始化。
片级初始化
完成嵌入式微处理器的初始化,包括设置嵌入式微处理器的核心寄存器和控制寄存器、嵌入式微处理器核心工作模式和嵌入式微处理器的局部总线模式等。片级初始化把嵌入式微处理器从上电时的默认状态逐步设置成系统所要求的工作状态。这是一个纯硬件的初始化过程。
板级初始化
完成嵌入式微处理器以外的其他硬件设备的初始化。另外,还需设置某些软件的数据结构和参数,为随后的系统级初始化和应用程序的运行建立硬件和软件环境。这是一个同时包含软硬件两部分在内的初始化过程。
系统初始化
该初始化过程以软件初始化为主,主要进行操作系统的初始化。BSP将对嵌入式微处理器的控制权转交给嵌入式操作系统,由操作系统完成余下的初始化操作,包含加载和初始化与硬件无关的设备驱动程序,建立系统内存区,加载并初始化其他系统软件模块,如网络系统、文件系统等。最后,操作系统创建应用程序环境,并将控制权交给应用程序的入口。
(2)硬件相关的设备驱动程序
BSP的另一个主要功能是硬件相关的设备驱动。硬件相关的设备驱动程序的初始化通常是一个从高到低的过程。尽管BSP中包含硬件相关的设备驱动程序,但是这些设备驱动程序通常不直接由BSP使用,而是在系统初始化过程中由BSP将他们与操作系统中通用的设备驱动程序关联起来,并在随后的应用中由通用的设备驱动程序调用,实现对硬件设备的操作。与硬件相关的驱动程序是BSP设计与开发中另一个非常关键的环节。
3)系统软件层
由实时多任务操作系统(Real-time Operation System,RTOS)、文件系统、图形用户接口(Graphic User Interface,GUI)、网络系统及通用组件模块组成。RTOS是嵌入式应用软件的基础和开发平台。
(1)嵌入式操作系统EOS
是一种用途广泛的系统软件,过去它主要应用与工业控制和国防系统领域。EOS负责嵌入系统的全部软、硬件资源的分配、任务调度,控制、协调并发活动。它必须体现其所在系统的特征,能够通过装卸某些模块来达到系统所要求的功能。目前,已推出一些应用比较成功的EOS产品系列。随着 Internet技术的发展、信息家电的普及应用及EOS的微型化和专业化,EOS开始从单一的弱功能向高专业化的强功能方向发展。嵌入式操作系统在系统实时高效性、硬件的相关依赖性、软件固化以及应用的专用性等方面具有较为突出的特点。EOS是相对于一般操作系统而言的,它除具有了一般操作系统最基本的功能,如任务调度、同步机制、中断处理、文件处理等外,还有以下
4)应用软件层
应用软件层是由基于实时系统开发的应用程序组成,用来实现对被控对象的控制功能。功能层是要面对被控对象和用户,为方面用户操作,往往需要提供一个友好的人机界面。
对于一些复杂的系统,在系统设计的初期阶段就要对系统的需求进行分析,确定系统的功能,然后将系统的功能映射到整个系统的硬件、软件和执行装置的设计过程中,称为系统的功能实现。
嵌入式设备的主控芯片
嵌入式应用的多样化主要体现在嵌入式设备主控芯片 和外围设备的多样化,目前,嵌入式设备的主控芯片类型包括四类:微控制器 、嵌入式处理器 、DSP 处理器和片上系统SOC。嵌入式外围设备种类繁多,而且不同的嵌入式应用有不同的外挂设备,为了支持这些不同的外挂设备就必须有这些不同设备的板级支持包BSP (board support package).
根据其现状,嵌入式处理器可以分成下面几类:
◆嵌入式微处理器(MICRO Processor Unit,MPU)
嵌入式微处理器是由通用计算机中的CPU 演 变而来的。它的特征是具有32位以上的处理器,具有较高的性能,当然其价格也相应较高。但与计算机处理器不同的是,在实际嵌入式应用中,只保留和嵌入式应 用紧密相关的功能硬件,去除其他的冗余功能部分,这样就以最低的功耗和资源实现嵌入式应用的特殊要求。和工业控制计算机相比,嵌入式微处理器具有体积小、 重量轻、成本低、可靠性高的优点。目前主要的嵌入式处理器类型有Am186/88、386EX、SC-400、POWER PC、68000 、MIPS、ARM/ StrongARM系列等。
其中Arm/StrongArm是专为手持设备开发的嵌入式微处理器,属于中档的价位。
◆嵌入式微控制器 (MICRO controller Unit, MCU)
嵌入式微控制器的典型代表是单片机,从70年代末单片机出现到今天,虽然已经经过了20多年的历史,但这种8位的电子 器件目前在嵌入式设备中仍然有着极其广泛的应用。单片机芯 片内部集成ROM/EPROM、RAM、总线 、总线逻辑、定时/计数器 、看门狗、I/O、串行口、脉宽调制输出、A/D、D/A、Flash RAM、EEPROM 等各种必要功能和外设。和嵌入式微处理器相比,微控制器的最大特点是单片化,体积大大减小,从而使功耗和成本下降、可靠性提高。微控制器是目前嵌入式系统工业的主流。微控制器的片上外设资源一般比较丰富,适合于控制,因此称微控制器。
由于MCU低廉的价格,优良的功能,所以拥有的品种和数量最多,比较有代表性的包括8051、MCS-251、 MCS-96/196/296、P51XA、C166/167、68K系列以及 MCU 8XC930/931、C540、C541,并且有支持I2C、CAN-Bus、LCD 及众多专用MCU和兼容系列。目前MCU占嵌入式系统约70%的市场份额。近来Atmel出产的Avr单片机由于其集成了FPGA等器件,所以具有很高的性价比,势必将推动单片机获得更高的发展。
◆嵌入式DSP处理器(Embedded Digital Signal Processor, EDSP)
DSP处理器是专门用于信号处理方面的处理器,其在系统结构和指令算法方面进行了特殊设计,具有很高的编译效率和指令的执行速度。在数字滤波、FFT、谱分析等各种仪器 上DSP获得了大规模的应用。
DSP的理论算法在70年代就已经出现,但是由于专门的DSP处理器还未出现,所以这种理论算法只能通过MPU等由分立元件实现。MPU较低的处理速度无法满足DSP的算法要求,其应用领域仅仅局限于一些尖端的高科技领域。随着大规模集成电路 技术发展,1982年世界上诞生了首枚DSP芯片 。 其运算速度比MPU快了几十倍,在语音合成和编码解码器中得到了广泛应用。至80年代中期,随着CMOS技术的进步与发展,第二代基于CMOS工艺的 DSP芯片应运而生,其存储容量和运算速度都得到成倍提高,成为语音处理、图像硬件处理技术的基础。到80年代后期,DSP的运算速度进一步提高,应用领 域也从上述范围扩大到了通信和计算机方面。90年代后,DSP发展到了第五代产品,集成度更高,使用范围也更加广阔。
目前最为广泛应用的是TI的TMS320C2000 /C5000系列,另外如Intel的MCS-296和Siemens的TriCore也有各自的应用范围。
◆嵌入式片上系统(System On Chip)
SoC追求产品系统最大包容的集成器件,是目前嵌入式应用领域的热门话题之一。
SOC最大的特点是成功实现了软硬件无缝结合,直接在处理器片内嵌入操作系统的代码模块。而且SOC具有极高的综合性,在一个硅片内部运用VHDL等硬件描述语言,实现一个复杂的系统。用户 不需要再像传统的系统设计一样,绘制庞大复杂的电路板, 一点点的连接焊制,只需要使用精确的语言,综合时序设计直接在器件库中调用各种通用处理器的标准,然后通过仿真之后就可以直接交付芯片厂商进行生产。由于 绝大部分系统构件都是在系统内部,整个系统就特别简洁,不仅减小了系统的体积和功耗,而且提高了系统的可靠性,提高了设计生产效率。
BSP(Board Support Package,板级支持包)
是指为特定硬件平台(如嵌入式系统、单板计算机等)提供的软件包,它包含了一系列驱动程序、配置文件、启动加载程序(Bootloader)、库文件以及必要的API,目的是为了支持操作系统(如Linux、RTOS等)在该硬件平台上顺利运行。BSP的主要作用和内容包括:
-
硬件初始化:提供硬件初始化代码,如CPU、内存控制器、外设控制器(如串口、网卡、GPIO、定时器等)的初始化,确保硬件处于可工作的状态。
-
Bootloader:一个小型的程序,负责加载操作系统内核到内存中并启动它。BSP通常包含或兼容特定的Bootloader,如U-Boot或RedBoot。
-
驱动程序:提供设备驱动程序,使得操作系统能够识别和控制硬件设备。这包括显卡、网络、存储、输入输出等设备的驱动。
-
中断处理:实现中断处理机制,确保操作系统能正确响应硬件产生的中断信号。
-
系统时钟和定时器配置:设置CPU和系统时钟频率,配置定时器,为操作系统提供时间基准和服务。
-
内存管理:配置内存布局,包括RAM、ROM、Flash等的分配和管理,确保操作系统和应用程序有足够的内存空间。
-
调试支持:提供调试接口和工具,帮助开发者在目标硬件上进行调试工作。
-
API和库:为应用程序提供访问硬件的接口和库函数,使得开发者能够在操作系统层面编写应用软件时,无需关心底层硬件细节。
-
文档和示例:详细的硬件说明、接口描述、配置指南和示例代码,帮助用户快速上手和集成操作系统。
BSP的开发和定制是嵌入式系统开发过程中的关键步骤,它是连接硬件平台和操作系统或应用程序的桥梁,极大地影响着系统的性能、稳定性和开发效率。不同的硬件平台需要专门定制的BSP,以满足特定的操作系统要求和应用场景。
BSP概念总结
BSP在嵌入式系统和Windows系统中的不同
在日常生活中使用的PC机上(windows或linux系统)也是有BSP的,只是PC机均采用的CPU架构为统一的x86体系架构。因此操作系统的BSP相对x86架构是单一确定的,不需要做任何修改就可以很容易支持操作系统在x86上正常运行,所以在PC机上谈论BSP这个概念没有什么意义了。
而嵌入式系统则完全不同,目前市场上存在多种架构的的嵌入式CPU(ARM,MIPS,RISC-V等),同时外围设备也会根据需求有不同的选择和定义。一个嵌入式操作系统针对不同的CPU,会有不同的BSP。即使同一种CPU,由于外设的差别,其BSP相应的部分也不一样。所以根据硬件设计编写和修改BSP,保证系统正常的运行是非常重要的。
BSP和PC机主板上的BIOS区别
BSP和PC机主板上的BIOS区别很大,BIOS主要是负责在电脑开启时检测、初始化系统设备(设置栈指针,中断分配,内存初始化等)、装入操作系统并调度操作系统向硬件发出的指令,它的Firmware代码是在芯片生产过程中固化的,一般来说用户是无法修改。其实是为下载运行操作系统做准备,把操作系统由硬盘加载到内存,并传递一些硬件接口设置给系统。
在OS正常运行后,BIOS的作用基本上也就完成了,这就是为什么更改BIOS一定要从新关机开机。PC机BIOS的作用更象嵌入式系统中的Bootloader(最底层的引导软件,初始化主板的基本设置,为接收外部程序做硬件上的准备)。与Bootloader不同的是BIOS在装载OS系统的同时,还传递一些参数设置(中断端口定义等),而Bootloader只是简单的装载系统。
BSP和操作系统绑在一起运行在主板上,尽管BSP的开始部分和BIOS所做的工作类似,可是大部分和BIOS不同,作用也完全不同。此外BSP还包含和系统有关的基本驱动(串口,网口等),此外程序员还可以编程修改BSP,在BSP中任意添加一些和系统无关的驱动或程序,甚至可以把上层开发的统统放到BSP中。而BIOS程序是用户不能更改,编译编程的,只能对参数进行修改设置。更不会包含一些基本的硬件驱动。
BSP与HAL(硬件抽象层)的关系
硬件的变动将会对BSP(板级支持层)进行大规模改动,无疑对BSP的维护是一种巨大的负担。引入了HAL(硬件抽象层)的概念,由HAL库对BSP库进一步的封装,形成统一的标准,而下次再改动硬件电路部分时,只需要改动BSP库的具体功能函数,而不需要对上层进行任何的修改。
原文链接:https://blog.csdn.net/leesan0802/article/details/124087630
操作系统
1.1操作系统的定义和目标
定义:操作系统是控制管理计算机系统的硬软件,分配调度资源的系统软件。对于普通终端用户来说是一个操作环境, 是执行各种操作的一个平台。
目标:方便性,有效性(提高系统资源的利用率、提高系统的吞吐量),可扩充性,开放性。
1.2 操作系统的基本功能
统一管理计算机资源:处理器资源,IO设备资源,存储器资源,文件资源;
实现了对计算机资源的抽象:IO设备管理软件提供读写接口,文件管理软件提供操作文件接;
提供了用户与计算机之间的接口:GUI(图形用户界面),命令形式,系统调用形式。
1.3 操作系统的特征
最基本的特征,互为存在条件:并发,共享;
(1)并行:指两个或多个事件可以在同一个时刻发生,多核CPU可以实现并行,一个cpu同一时刻只有一个程序在运行;
(2)并发:指两个或多个事件可以在同一个时间间隔发生,用户看起来是每个程序都在运行,实际上是每个程序都交替执行。
(3)共享性:操作系统的中资源可供多个并发的程序共同使用,这种形式称之为资源共享。
互斥共享:当资源被程序占用时,其它想使用的程序只能等待。
同时访问:某种资源并发的被多个程序访问。
虚拟和异步特性前提是具有并发性。
(4)虚拟性:表现为把一个物理实体转变为若干个逻辑实体。
时分复用技术:资源在时间上进行复用,不同程序并发使用,多道程序分时使用计算机的硬件资源,提高资源的利用率。
空分复用技术:用来实现虚拟磁盘(物理磁盘虚拟为逻辑磁盘,电脑上的C盘、D盘等)、虚拟内存(在逻辑上扩大程序的存储容量)等,提高资源的利用率,提高编程效率。
(5)异步性:在多道程序环境下,允许多个进程并发执行,但由于资源等因素的限制,使进程的执行以“停停走走”的方式运行,而且每个进程执行的情况(运行、暂停、速度、完成)也是未知的。
原文链接:https://blog.csdn.net/Royalic/article/details/119999404
五、操作系统的作用
1、作为用户和计算机硬件的接口
操作系统改造和扩充过的计算机不但功能更强,使用也更加方便,用户可以直接调用系统提供的各种功能,而无需了解软硬件本身的细节,为用户提供了一个与运行底层细节无关可管理的运行环境,对于用户来讲,操作系统便成为了他与计算机硬件之间的一个接口。
2、作为计算机系统的资源管理者
操作系统管理的计算机系统软硬件资源包括:处理机、存储器、设备、文件(程序和数据)
处理机:计算机系统中存储程序和数据,并按照程序规定的步骤执行指令的部件。包括:中央处理器(CPU)、主存储器、输入-输出接口(I/O接口)。处理器加上外围设备如鼠标、键盘等,就构成完整的计算机系统
中央处理器:CPU,一块超大规模的集成电路,是一台计算机的运算核心和控制核心。其功能主要为解释计算机指令和处理计算机软件中的数据。
内核:操作系统的构件(操作系统的基本单元)。
3、作为虚拟计算机(扩充机器)
虚拟计算机:操作系统是紧靠硬件的第一层软件,计算机上覆盖操作系统后,可以拓展基本功能,为用户提供一台功能显著增强,使用更加方便,安全可靠性好,效率明显提高的机器,称为虚拟计算机或者操作系统虚机器(Virtual Machine)。
六、操作系统的功能
1、处理机管理
处理机管理的主要任务是对处理机的分配和运行实施有效的管理,包括进程控制、进程同步、进程通信和调度。
进程控制:负责进程的创建、撤销及状态转换
进程同步:对并发执行的进程进行协调,有同步与互斥
进程通信:负责完成进程之间的信息交换
调度:分为作业调度(从后备作业队列中按照一定的原则,选择若干作业进入内存)和进程调度(决定哪个进程获得处理机)
2、存储器管理
存储器管理的主要任务是方便用户使用存储器,提高存储器的利用率,从逻辑上扩充内存。存储器管理包括内存分配、内存保护、内存扩充和地址映射。
3、设备管理
设备管理功能包括设备分配、缓冲管理、设备驱动和设备独立性。
设备分配:根据用户的I/O请求,为之分配所需的设备,设备使用完成后还应该回收。
缓冲管理:对各类设备的缓冲区进行有效的管理
设备驱动:主要完成设备启动、I/O操作及中断处理
设备独立性:如何确保应用程序独立于物理设备,如何虚拟化设备
4、文件管理
文件管理的主要任务是对文件进行管理,方便用户使用并保证文件的安全性。文件管理功能包括文件存储空间的管理、目录管理、文件操作管理和文件保护。
文件存储空间的管理:包括存储空间的分配与回收等功能
目录管理:管理文件的数据结构,提供按名存取的功能
文件操作管理:从外存读入数据或将数据写入外存
文件保护:防止未授权用户存取文件,防止授权用户以不正确方式存取文件
原文链接:https://blog.csdn.net/m0_62056106/article/details/129320510
实时操作系统(RTOS)
是一种专门为实时应用程序设计的操作系统。与通用操作系统不同,RTOS具有极低的延迟和可预测的响应时间,这对于需要快速响应输入和输出的应用程序非常重要。这些应用程序包括航空航天、工业自动化、医疗设备、通信设备、嵌入式系统等。
实时操作系统的主要特征包括:
实时性:RTOS能够在严格的时间限制内完成操作,能够及时地响应外部事件。
可靠性:RTOS能够保证系统的可靠性和稳定性,尽可能地避免系统崩溃和死锁。
多任务处理:RTOS能够同时处理多个任务,保证系统的高效性和灵活性。
低延迟:RTOS能够实现非常低的响应延迟,从而提高系统的实时性。
可裁剪性:RTOS可以根据具体的应用需求进行定制和裁剪
常见的嵌入式操作系统及其特点
FreeRTOS:一个基于实时内核的开源操作系统,适用于嵌入式设备和实时应用程序。
uC/OS:一个用于嵌入式系统的实时操作系统,支持多任务、消息传递、定时器、信号量、互斥量等功能。
Linux及其衍生系统:一个基于Linux内核的开源操作系统,适用于嵌入式设备和系统,具有良好的可移植性和可扩展性,支持多任务、多线程、进程管理、文件系统等功能。
VxWorks:一个实时操作系统,具有可靠性高、可定制性强、支持多任务、多线程等特点,广泛用于工业自动化、网络设备等领域。
Nucleus RTOS:一种实时操作系统,适用于高性能嵌入式系统,支持多任务、多线程、消息队列等功能,具有低延迟、低开销的特点。
ThreadX:一个实时嵌入式操作系统,具有低开销、可裁剪的特点,适用于内存受限的嵌入式设备。
embOS:一种实时嵌入式操作系统,支持多任务、多线程、定时器、信号量等功能,适用于对实时性要求高的应用。
QNX:一种实时操作系统,具有可靠性高、可定制性强、支持多任务、多线程等特点,广泛用于汽车、航空、医疗等领域。
这些嵌入式操作系统各有优点和特点,适用于不同的应用场景。在选择嵌入式操作系统时,需要考虑应用的实时性、资源需求、功能要求等多个因素。
原文链接:https://blog.csdn.net/qq_54140018/article/details/129845215
嵌入式操作系统
嵌入式操作系统:对整个智能芯片以及它所控制的各种部件模块等资源进行统一调度、指挥和控制的系统软件。
应用:嵌入式操作系统几乎包括了生活中的所有的电器设备,如平板、手机(Android、iOS等)、微波炉、数字相机、自动售货机等
延伸:嵌入式系统进一步延伸,目前有移动操作系统、手机操作系统、物联网系统、工业控制系统等。 原文链接:https://blog.csdn.net/m0_62056106/article/details/129320510
X86架构和ARM架构什么区别
X86架构和ARM架构是两种不同的处理器架构,它们在设计理念、指令集、应用领域和市场定位等方面存在显著差异。
-
设计理念:
-
X86架构:由英特尔公司最初开发,是一种复杂指令集计算机(CISC)架构。它的设计侧重于提供丰富的指令集,以支持复杂的操作,使得软件编写更加容易。
-
ARM架构:由英国ARM Holdings公司开发,是一种精简指令集计算机(RISC)架构。它的设计理念是简化指令集,每条指令尽可能简单,以提高执行速度和降低功耗。
-
-
指令集:
-
X86架构:拥有一个庞大的指令集,支持各种复杂的操作,包括浮点运算、多任务处理等。
-
ARM架构:指令集相对简单,主要包括基础的算术和逻辑操作,以及用于控制流程的指令。ARM架构通过组合简单的指令来执行复杂的操作。
-
-
应用领域:
-
X86架构:广泛应用于个人电脑(PC)、服务器和一些高端嵌入式系统中。英特尔的X86处理器是桌面和服务器市场的主导者。
-
ARM架构:最初主要用于移动设备,如智能手机和平板电脑,但由于其低功耗特性,逐渐被应用到嵌入式系统、物联网(IoT)、服务器和其他消费电子产品中。
-
-
市场定位:
-
X86架构:通常用于需要高性能和兼容性的场景,如传统的PC和服务器市场。
-
ARM架构:专注于低功耗和高性能的平衡,适合于电池供电的移动设备和对能效有要求的嵌入式系统。
-
-
能源效率:
-
X86架构:由于其复杂性和历史的设计,通常在同等性能下比ARM架构消耗更多的能源。
-
ARM架构:以其出色的能源效率而闻名,能够在低功耗下提供良好的性能。
-
-
兼容性和生态系统:
-
X86架构:拥有成熟的生态系统,包括大量的操作系统、驱动程序和应用程序。
-
ARM架构:虽然生态系统较X86架构年轻,但随着其在移动设备市场的成功,也发展出了包括安卓和iOS在内的广泛操作系统支持。
-
总的来说,X86架构和ARM架构各有特点,分别适用于不同的市场需求。X86架构在桌面和服务器市场占据主导地位,而ARM架构在移动设备和嵌入式系统市场中占据主导地位。随着技术的发展,两种架构在某些领域(如服务器和移动设备)之间的界限变得越来越模糊。
RISC指令集
RISC(Reduced Instruction Set Computing,精简指令集计算)是一种微处理器设计哲学,旨在通过简化计算机处理器中的指令集来提高运算效率。RISC设计原则起源于对CISC(Complex Instruction Set Computing,复杂指令集计算)体系的反思与改进,其核心理念包括:
-
指令简化:RISC架构专注于提供一组少量的、使用频率高的简单指令,这些指令通常具有固定长度,执行速度快。相比于CISC架构中包含的大量复杂指令,RISC减少了指令的种类和复杂性。
-
提高运行速度:通过减少每条指令的复杂度,RISC处理器能够更快地执行单个指令,同时,由于指令长度固定,也便于实现指令流水线技术,进一步提升处理速度。
-
通用寄存器增多:RISC架构通常配备更多的通用寄存器,减少对慢速内存的访问,因为数据更多地在寄存器之间直接传递,这有助于提升性能。
-
单一周期执行:很多RISC指令设计为能在单个时钟周期内完成,简化了处理器的设计并提高了执行效率。
-
编译器负担加重:由于指令集简化,一些复杂的操作需要通过多条简单指令组合来完成,这要求编译器更加智能,以生成高效的代码。
-
超标量与超流水线结构:RISC处理器常采用超标量技术和超流水线设计,允许多个指令同时执行,进一步提升了处理器的并行处理能力。
RISC架构的这些特点使其在很多领域,特别是那些对功耗敏感和需要高性能计算的场景(如移动设备、嵌入式系统、高性能计算服务器等)中得到广泛应用。著名的RISC架构处理器包括MIPS、ARM、PowerPC、SPARC等。
嵌入式操作系统的整体架构
1.嵌入式操作系统特点及分类
嵌入式操作系统(Embedded Operating System,EOS)是一种支持嵌入式系统应用的实时操作系统,是嵌入式系统极为重要的组成部分。
1.1嵌入式操作系统的特点
目前存在很多种嵌入式操作系统,如VxWorks、μC/OS、嵌入式Linux和WinCE等,这些操作系统功能日益完善,在嵌入式系统中能实现很多桌面通用操作系统具备的功能。嵌入式操作系统除了具有通用操作系统的基本特点之外,更有其特殊的部分,如高实时性、可裁剪性、高可靠性、接口统一、网络功能强大、体积小巧、固化代码、操作简单易学等特点,其中重要的包括高实时性、可裁剪性和高可靠性等。
1)高实时性
大多数嵌入式操作系统工作在对实时性要求很高的场合,如监测控制、数据采集和信息处理等。这些过程往往是一个连续的过程,一个过程必须在一个定长的时间内完成,否则若逻辑和时序出现偏差,将会引起严重后果。因此,嵌入式操作系统中实时性是其重要特征之一。
2)可裁剪性
由于嵌入式系统是面向单一设备的单一应用,其环境复杂多变,如硬件环境中除CPU之外,其他硬件并没有标准化,而系统的应用对功能、可靠性、成本、体积和功耗等有一定需求。因此,嵌入式操作系统必须是开放的、可伸缩的体系结构,其中的很多部件必须具有很强的可裁剪性,便于修改,从而能适应不同嵌入式系统的需求。
3)高可靠性
高可靠性是嵌入式系统的基本特征之一,嵌入式系统中,出于安全方面的考虑,要求系统不能崩溃,而且还要有自愈能力。因此,作为嵌入式系统的最基本软件的操作系统,需要尽可能减少安全漏洞和不可靠的隐患,通过系统监控进程监视各进程的运行状况,在遇到异常情况时采取措施对其进行修复,实施有利于系统稳定可靠的方法将问题解决,从而从嵌入式系统的底层增强可靠性。
4)统一的接口
嵌入式操作系统可提供各种设备的驱动接口。随着各类嵌入式操作系统的开发,考虑到为嵌入式应用软件的设计者提供统一的服务接口,就必须约定嵌入式系统提供的接口,从而为嵌入式应用软件的运行提供无关性平台。
5)网络功能强大
嵌入式操作系统必须不仅能支持TCP/IP协议,还能支持其他如UDP/PPP协议等,并为嵌入式系统提供统一的MAC访问层接口,从而为各种移动计算设备预留接口,提供对更多的嵌入式系统的支持。
1.2嵌入式操作系统的分类
当前,常用的嵌入式操作系统可分为商用系统、专用系统以及开放系统三大类。
1)商用嵌入式操作系统
商用嵌入式操作系统功能较强大,辅助工具较齐全,可应用的范围也较广,在许多领域都有应用,例如Microsoft的WindowsCE、WindRiver的VxWorks、EPSON的ROS33、CoreTek的 DeltaOS、pSOS+、3Com的PalmOS以及中科院的Hopen等。
2)专用嵌入式操作系统
专用嵌入式操作系统一般不对用户公开,它是一些专业的公司针对该公司产品所特制的嵌入式操作系统。专用嵌入式操作系统功能相对较弱,但具有较强的针对性,而且比普通的商用嵌入式操作系统更加安全可靠。
3)开放嵌入式操作系统
开放嵌入式操作系统是近年来迅速发展的一类操作系统。因为应用系统的开发者可免费得到这些系统的源代码,因此开发难度低。但开放嵌入式操作系统的功能简单,技术支持以及系统的稳定性也相对较差,因此对应用系统开发者提出了较高的要求。
2.嵌入式操作系统的总体架构
嵌入式操作系统通常包括与硬件相关的底层驱动软件、系统内核、设备驱动接口、通信协议、图形界面和标准化浏览器Browser等。随着嵌入式系统的发展,嵌入式操作系统的体系结构出现了单块结构、分层结构、微内核结构和构件化结构等多种。
1.单块结构
单块结构是最早出现的一种结构,该结构将整个嵌入式实时操作系统看成一个整块,内部分为若干个模块,模块之间直接相互调用,不分层次,形成网状调用模式,如图12.1所示。
由于单块结构本身具有强大功能的完整内核,能为嵌入式软件开发提供非常完整的平台,因此,其具有以下特点:
(1)可设置嵌入式芯片的通用接口。
(2)允许设备驱动器、网络服务器、防火墙等复用一些公共的代码或其他开源代码。
(3)根据功能进行系统的开发,避免实现多余功能以及额外的内存占用。
(4)用户运行的应用程序设计简洁、开发简单、易于调试、相对可靠。
(5)大多数嵌入式系统对实时性要求不高,单块结构可以实现快速响应。
(6)通过硬件的设计保证对请求的快速响应。
(7)对简单的小系统,单块结构有几乎最高的系统效率和实时性保障。
(8)通用RTOS系统的单位成本更低。
(9)对于复杂系统的应用,需大量硬件资源。
(10)内核的复杂性使系统的运行变得不可预测和不可靠。
(11)模块越多,模块之间的依赖越严重,在可裁剪性、可扩展性、可移植性和可维护性等方面存在明显缺陷,制约了该类结构RTOS 的应用。
单块结构常应用在WindowsCE和嵌入式系统中。
2.分层结构
分层结构是现今许多流行的嵌入式实时操作系统所采用的体系结构,在分层结构中,每一层对其上层好像一个虚拟计算机,下层为上层提供服务,上层使用下层提供的服务;在层与层之间定义良好的接口,上下层通过结构进行交互和通信;每一层中划分为一个或多个模块(组件),并可针对应用需求配置个性化RTOS。整个分层结构如图12.2所示。
分层结构的实时多任务内核部分是整个分层结构的核心,其基本工作是任务切换,其运行与队列密不可分;分层结构中的其他部分是对整个嵌入式操作系统的有力支撑,包括存储管理、I/O设备管理(包括逻辑I/O和设备驱动)、嵌入式文件系统、网络系统和命令解释器等。
分层结构常用于VxWorks、DeltaOS等嵌入式操作系统中。
3.微内核结构
微内核结构是目前的主流结构之一,又称为客户/服务器(C/S)结构,在这种体系结构中,微内核仅提供任务调度、任务间通信、底层网络通信、中断处理接口和实时时钟等几种基本服务,且内核非常小,任务在独立的地址空间运行,速度极快;而传统的操作系统提供的其他服务,如存储管理、文件管理、中断处理和网络通信协议等,在内核以上以协作任务的形式出现,每个协作任务可以看成一个功能服务器。微内核结构如图12.3所示。
由于微内核结构中将内核功能和其他服务功能分开,因此,微内核结构具有以下优点和不足:
(2)可以更方便地扩展功能,包括动态扩展。
(3)可以更容易地做到上层应用与下层系统的分离,便于系统移植。
(4)服务模块的可重用性高。
(5)在任务执行时,需要客户端与服务器端通信,会增加一定的开销,与整体系统相比性能将有一定的下降。
微内核结构常用于QNX等嵌入式操作系统中。
4.构件化结构
构件化结构是采用构件组装思想及技术而设计的体系结构,在构件化结构中,嵌入式操作系统的内核由一组独立的构件和一个构件管理器组成,构件管理器用于维护内核构件之间的协作关系。构件化结构如图12.4所示。
构件化结构具有以下特点:
(1)所有嵌入式操作系统抽象都由可加载的构件实现,配置灵活,裁剪方便。
(2)构件之间具有统一标准的交互式界面,便于用户掌握,方便应用程序开发。
(3)传统服务作为一个构件或由一些相互协作的构件构成,可为应用软件开发提供统一的编程接口。
(4)通过构件组装检验,可以确保生成的嵌入式操作系统满足设计约束。
(5)可以提供硬件无关性支持。
构件化结构应用在TinyOS等嵌入式操作系统中。
统服务作为一个构件或由一些相互协作的构件构成,可为应用软件开发提供统一的编程接口。
(4)通过构件组装检验,可以确保生成的嵌入式操作系统满足设计约束。
(5)可以提供硬件无关性支持。
构件化结构应用在TinyOS等嵌入式操作系统中。
总而言之,上述的体系结构都是目前较为流行的结构,从中充分体现了嵌入式操作系统的高实时性、高可靠性和可裁剪性等特点。
原文链接:https://blog.csdn.net/weixin_55953651/article/details/133746308
嵌入式操作系统选择原则和对比
嵌入式系统是以应用为中心,软硬件可裁减的,适用于对功能、可靠性、成本、体积、功耗等综合性严格要求的专用计算机系统。具有软件代码小、高度自动化、响应速度快等特点,特别适合于要求实时和多任务的体系。嵌入式系统主要由嵌入式处理器、相关支撑硬件、嵌入式操作系统及应用软件系统等组成,它是可独立工作的“器件”。
一、嵌入式操作系统的发展
作为嵌入式系统(包括硬、软件系统)极为重要的组成部分的嵌入式操作系统,通常包括与硬件相关的底层驱动软件、系统内核、设备驱动接口、通信协议、图形界面、标准化浏览器等。嵌入式操作系统具有通用操作系统的基本特点,如能够有效管理越来越复杂的系统资源;能够把硬件虚拟化,使得开发人员从繁忙的驱动程序移植和维护中解脱出来;能够提供库函数、驱动程序、工具集以及应用程序。与通用操作系统相比较,嵌入式操作系统在系统实时高效性、硬件的相关依赖性、软件固态化以及应用的专用性等方面具有较为突出的特点。
嵌入式操作系统伴随着嵌入式系统的发展经历了四个比较明显的阶段:
第一阶段:无操作系统的嵌入算法阶段。
以单芯片为核心的可编程控制器形式的系统,具有与监测、伺服、指示设备相配合的功能。应用于一些专业性极强的工业控制系统中,通过汇编语言编程对系统进行直接控制,运行结束后清除内存。系统结构和功能都相对单一,处理效率较低,存储容量较小,几乎没有用户接口。
第二阶段:以嵌人式CPU为基础、简单操作系统为核心的嵌入式系统。
CPU种类繁多,通用性比较差;系统开销小,效率高;一般配备系统仿真器,操作系统具有一定的兼容性和扩展性;应用软件较专业,用户界面不够友好;系统主要用来控制系统负载以及监控应用程序运行。
第三阶段:通用的嵌人式实时操作系统阶段,以嵌入式操作系统为核心的嵌入式系统。
能运行于各种类型的微处理器上,兼容性好;内核精小、效率高,具有高度的模块化和扩展性;具备文件和目录管理、设备支持、多任务、网络支持、图形窗口以及用户界面等功能;具有大量的应用程序接口(APl);嵌入式应用软件丰富。
第四阶段:以基于Internet为标志的嵌入式系统。
这是一个正在迅速发展的阶段。目前大多数嵌入式系统还孤立于Internet之外,但随着Internet的发展以及Internet技术与信息家电、工业控制技术等结合日益密切,嵌入式设备与Intemet的结合将代表着嵌入式技术的真正未来。
二、使用实时操作系统的必要性
嵌入式实时操作系统在目前的嵌入式应用中用得越来越广泛,尤其在功能复杂、系统庞大的应用中显得愈来愈重要。
1.嵌人式实时操作系统提高了系统的可靠性。
在控制系统中,出于安全方面的考虑,要求系统起码不能崩溃,而且还要有自愈能力。不仅要求在硬件设计方面提高系统的可靠性和抗干扰性,而且也应在软件设计方面提高系统的抗干扰性,尽可能地减少安全漏洞和不可靠的隐患。长期以来的前后台系统软件设计在遇到强干扰时,使得运行的程序产生异常、出错、跑飞,甚至死循环,造成了系统的崩溃。而实时操作系统管理的系统,这种干扰可能只是引起若干进程中的一个被破坏,可以通过系统运行的系统监控进程对其进行修复。通常情况下,这个系统监视进程用来监视各进程运行状况,遇到异常情况时采取一些利于系统稳定可靠的措施,如把有问题的任务清除掉。
2.提高了开发效率,缩短了开发周期。
在嵌入式实时操作系统环境下,开发一个复杂的应用程序,通常可以按照软件工程中的解耦原则将整个程序分解为多个任务模块。每个任务模块的调试、修改几乎不影响其他模块。商业软件一般都提供了良好的多任务调试环境。
3.嵌入式实时操作系统充分发挥了32位CPU的多任务潜力。
32位CPU比8、16位CPU快,另外它本来是为运行多用户、多任务操作系统而设计的,特别适于运行多任务实时系统。32位CPU采用利于提高系统可靠性和稳定性的设计,使其更容易做到不崩溃。
例如,CPU运行状态分为系统态和用户态。将系统堆栈和用户堆栈分开,以及实时地给出CPU的运行状态等,允许用户在系统设计中从硬件和软件两方面对实时内核的运行实施保护。如果还是采用以前的前后台方式,则无法发挥32位CPU的优势。从某种意义上说,没有操作系统的计算机(裸机)是没有用的。在嵌入式应用中,只有把CPU嵌入到系统中,同时又把操作系统嵌入进去,才是真正的计算机嵌入式应用。
三、嵌入式操作系统选型
当我们在设计信息电器、数字医疗设备等嵌入式产品时,嵌入式操作系统的选择至关重要。一般而言,在选择嵌入式操作系统时,可以遵循以下原则。总的来说,就是“做加法还是做减法”的问题。
(一)市场进入时间
制定产品时间表与选择操作系统有关系,实际产品和一般演示是不同的。目前是Windows程序员可能是人力资源最丰富的。现成资源最多的也就可能是 WinCE。使用WinCE能够很快进入市场。因为WinCE+X86做产品实际上是在做减法,去掉你不要的功能,能很快出产品,但伴随的可能是成本高,核心竞争力差。而某些高效的操作系统可能由于编程人员缺乏,或由于这方面的技术积累不够,影响开发进度。
(二)可移植性
操作系统相关性。当进行嵌入式软件开发时,可移植性是要重点考虑的问题。良好的软件移植性应该比较好,可以在不同平台、不同系统上运行,跟操作系统无关。软件的通用性和软件的性能通常是矛盾的。即通用以损失某些特定情况下的优化性能为代价。很难设想开发一个嵌入式浏览器而仅能在某一特定环境下应用。反过来说,当产品与平台和操作系统紧密结合时,往往你的产品的特色就蕴含其中。
(三)可利用资源
产品开发不同于学术课题研究,它是以快速、低成本、高质量的推出适合用户需求的产品为目的的。集中精力研发出产品的特色,其他功能尽量由操作系统附加或采用第三方产品,因此操作系统的可利用资源对于选型是一个重要参考条件。Linux和WinCE都有大量的资源可以利用,这是他们被看好的重要原因。其他有些实时操作系统由于比较封闭,开发时可以利用的资源比较少,因此多数功能需要自己独立开发。从而影响开发进度。近来的市场需求显示,越来越多的嵌入式系统,均要求提供全功能的Web浏览器。而这要求有一个高性能、高可靠的GUI的支持。
(四)系统定制能力
信息产品不同于传统PC的Wintel结构的单纯性,用户的需求是千差万别的,硬件平台也都不一样,所以对系统的定制能力提出了要求。要分析产品是否对系统底层有改动的需求,这种改动是否伴随着产品特色?Linux由于其源代码开放的天生魅力,在定制能力方面具有优势。随着WinCE3.0原码的开放,以及微软在嵌入式领域力度的加强,其定制能力会有所提升。
(五)成本
成本是所有产品不得不考虑的问题。操作系统的选择会对成本有什么影响呢?Linux免费,WinCE等商业系统需要支付许可证使用费,但这都不是问题的答案。成本是需要综合权衡以后进行考虑的——选择某一系统可能会对其他一系列的因素产生影响,如对硬件设备的选型、人员投入、以及公司管理和与其他合作伙伴的共同开发之间的沟通等许多方面的影响。
(六)中文内核支持
国内产品需要对中文的支持。由于操作系统多数是采用西文方式,是否支持双字节编码方式,是否遵循GBK,GBl8030等各种国家标准,是否支持中文输入与处理,是否提供第三方中文输入接口是针对国内用户的嵌入式产品的必需考虑的重要因素。
上面提到用WinCE+x86出产品是减法,这实际上就是所谓PC家电化;另外一种做法是加法,利用家电行业的硬件解决方案(绝大部分是非x86的)加以改进,加上嵌入式操作系统,再加上应用软件。这是所谓家电PC化的做法,这种加法的优势是成本低,特色突出,缺点是产品研发周期长,难度大(需要深入了解硬件和操作系统)。如果选择这种做法,Linux是一个好选择,它让你能够深入到系统底层,如果你愿意并且有能力。
四、几种代表性嵌入式操作系统比较
(一)VxWorks
VxWorks操作系统是美国WindRiver公司于1983年设计开发的一种嵌入式实时操作系统(RTOS),是Tornado嵌入式开发环境的关键组成部分。良好的持续发展能力、高性能的内核以及友好的用户开发环境,在嵌人式实时操作系统领域逐渐占据一席之地。
VxWorks具有可裁剪微内核结构;高效的任务管理;灵活的任务间通讯;微秒级的中断处理;支持POSIX 1003.1b实时扩展标准;支持多种物理介质及标准的、完整的TCP/IP网络协议等。
然而其价格昂贵。由于操作系统本身以及开发环境都是专有的,价格一般都比较高,通常需花费10万元人民币以上才能建起一个可用的开发环境,对每一个应用一般还要另外收取版税。一般不通供源代码,只提供二进制代码。由于它们都是专用操作系统,需要专门的技术人员掌握开发技术和维护,所以软件的开发和维护成本都非常高。支持的硬件数量有限。
(二)Windows CE
Windows CE与Windows系列有较好的兼容性,无疑是Windows CE推广的一大优势。其中WinCE3.0是一种针对小容量、移动式、智能化、32位、了解设备的模块化实时嵌人式操作系统。为建立针对掌上设备、无线设备的动态应用程序和服务提供了一种功能丰富的操作系统平台,它能在多种处理器体系结构上运行,并且通常适用于那些对内存占用空间具有一定限制的设备。它是从整体上为有限资源的平台设计的多线程、完整优先权、多任务的操作系统。它的模块化设计允许它对从掌上电脑到专用的工业控制器的用户电子设备进行定制。操作系统的基本内核需要至少200KB的ROM。由于嵌入式产品的体积、成本等方面有较严格的要求,所以处理器部分占用空间应尽可能的小。系统的可用内存和外存数量也要受限制,而嵌入式操作系统就运行在有限的内存(一般在ROM或快闪存储器)中,因此就对操作系统的规模、效率等提出了较高的要求。从技术角度上讲,Windows CE作为嵌入式操作系统有很多的缺陷:没有开放源代码,使应用开发人员很难实现产品的定制;在效率、功耗方面的表现并不出色,而且和Windows一样占用过的系统内存,运用程序庞大;版权许可费也是厂商不得不考虑的因素。
(三)嵌入式Linux
这是嵌入式操作系统的一个新成员,其最大的特点是源代码公开并且遵循GPL协议,在近一年多以来成为研究热点,据IDG预测嵌入式Linux将占未来两年的嵌入式操作系统份额的50%。
由于其源代码公开,人们可以任意修改,以满足自己的应用,并且查错也很容易。遵从GPL,无须为每例应用交纳许可证费。有大量的应用软件可用。其中大部分都遵从GPL,是开放源代码和免费的。可以稍加修改后应用于用户自己的系统。有大量的免费的优秀的开发工具,且都遵从GPL,是开放源代码的。有庞大的开发人员群体。无需专门的人才,只要懂Unix/Linux和C语言即可。随着 Linux在中国的普及,这类人才越来越多。所以软件的开发和维护成本很低。优秀的网络功能,这在Internet时代尤其重要。稳定——这是Linux 本身具备的一个很大优点。内核精悍,运行所需资源少,十分适合嵌入式应用。
支持的硬件数量庞大。嵌入式Linux和普通Linux并无本质区别,PC上用到的硬件嵌入式Linux几乎都支持。而且各种硬件的驱动程序源代码都可以得到,为用户编写自己专有硬件的驱动程序带来很大方便。
在嵌入式系统上运行Linux的一个缺点是Linux体系提供实时性能需要添加实时软件模块。而这些模块运行的内核空间正是操作系统实现调度策略、硬件中断异常和执行程序的部分。由于这些实时软件模块是在内核空间运行的,因此代码错误可能会破坏操作系统从而影响整个系统的可靠性,这对于实时应用将是一个非常严重的弱点。
(四)μC/OS一Ⅱ
μC/OS一Ⅱ是著名的源代码公开的实时内核,是专为嵌入式应用设计的,可用于8位,16位和32位单片机或数字信号处理器(DSP)。它是在原版本 μC/OS的基础上做了重大改进与升级,并有了近十年的使用实践,有许多成功应用该实时内核的实例。它的主要特点如下:
* 公开源代码,容易就能把操作系统移植到各个不同的硬件平台上;
* 可移植性,绝大部分源代码是用C语言写的,便于移植到其他微处理器上;
* 可固化;
* 可裁剪性,有选择的使用需要的系统服务,以减少斗所需的存储空间;
* 占先式,完全是占先式的实时内核,即总是运行就绪条件下优先级最高的任务;
* 多任务,可管理64个任务,任务的优先级必须是不同的,不支持时间片轮转调度法;
* 可确定性,函数调用与服务的执行时间具有其可确定性,不依赖于任务的多少;
* 实用性和可靠性,成功应用该实时内核的实例,是其实用性和可靠性的最好证据。
由于μC/OS一Ⅱ仅是一个实时内核,这就意味着它不像其他实时存在系统那样提供给用户的只是一些API函数接口,还有很多工作需要用户自己去完成。
五、结束语
在嵌入式应用中,使用实时操作系统(RTOS)是当前嵌入式应用的一个特点,一种趋势,也是单片机应用从低水平向高水平的一个进步。在实际的应用中,根据不同的要求和条件选择合适的操作系统,使开发工作更容易,设计出更完美的嵌入式系统。
原文链接:https://blog.csdn.net/xiaojianpitt/article/details/2428009
嵌入式系统、单片机、PLC、FPGA和DSP之间关系
它们都是电子和计算机工程领域中重要的组成部分,各自在特定的应用场景下发挥着关键作用。
嵌入式系统:
是一个更广泛的概念,它指的是以应用为中心,以计算机技术为基础,软件、硬件可裁剪的专用计算机系统。它通常被嵌入到各种设备或系统中,用于实现特定的功能或控制任务。
单片机
是嵌入式系统硬件中的一种,它将中央处理单元(CPU)、存储器、I/O接口电路等集成在一块半导体硅片上,形成一个微型计算机。单片机具有体积小、功耗低、性价比高等特点,在嵌入式系统设计中有着广泛的应用。
PLC(可编程控制器)
是一种专门为工业环境应用而设计的数字运算操作的电子系统。它采用可编程的存储器,用于存储程序、执行逻辑运算、顺序控制等任务。PLC通常与外围设备一起,用于控制各种机械或生产过程。在某些情况下,PLC的内部CPU芯片可能会采用DSP(数字信号处理器)来实现高速运算。
FPGA(现场可编程门阵列)
是一种可编程逻辑器件,由数百万个逻辑单元组成,具有并行处理能力,适用于需要高性能、实时性要求高的应用场景。FPGA可以根据不同的应用需求重新配置内部逻辑结构,实现不同的电路功能。
DSP(数字信号处理器)
是一种专门用于数字信号处理的芯片。它使用数字表示信号和进行计算处理,具有高精度、灵活性、可编程性和实时性等特点。DSP在音频、视频、通信等领域有着广泛的应用。
综上所述,嵌入式系统是一个更广泛的概念,单片机、PLC、FPGA和DSP都是嵌入式系统的重要组成部分。它们各自具有不同的特点和应用场景,但在实现嵌入式系统的各种功能时,它们之间可能相互协作、相互补充。例如,单片机可以作为嵌入式系统的核心处理器,FPGA可以实现高性能的并行处理,DSP可以处理复杂的数字信号,而PLC则可以在工业控制领域发挥重要作用。通过合理地选择和组合这些组件,可以构建出功能强大、性能优越的嵌入式系统。
原文链接:https://blog.csdn.net/D_ovis/article/details/137942039
实时操作系统Real-time operating system, RTOS
又称即时操作系统,它会按照排序运行、管理系统资源,并为开发应用程序提供一致的基础。
实时操作系统与一般的操作系统相比,最大的特色就是“实时性”,如果有一个任务需要执行,实时操作系统会马上(在较短时间内)执行该任务,不会有较长的延时。这种特性保证了各个任务的及时执行。
实时操作系统经常与嵌入式操作系统一起出现,实际上这是完全不同的两种东西。大多数实时操作系统都是嵌入式操作系统,但嵌入式操作系统并不全都是实时的。
实时运算(Real-time computing)是计算机科学中对受到“实时约束”的计算机硬件和计算机软件系统的研究,实时约束像是从事件发生到系统回应之间的最长时间限制。实时程序必须保证在严格的时间限制内响应。
实时操作系统中都要包含一个实时任务调度器,这个任务调度器与其它操作系统的最大不同是强调:严格按照优先级来分配CPU时间,并且时间片轮转不是实时调度器的一个必选项。
实时操作系统主要是为了解决两个问题:
1.早期的CPU任务切换的开销太大,实时调度器可以避免任务频繁切换导致CPU时间的浪费;
2.在一些特殊的应用场景中,必须要保证重要的任务优先被执行。
实时任务调度器是实时操作系统的一个必选项,但不代表只要设计出来一个实时调度器就足够了。事实上设计一个实时调度内核并不是一个多么复杂的任务,实时操作系统的特性是在整个操作系统的设计思路上都要时刻关注实时性。
实时操作系统特点
2.1 实时的消息、事件处理机制
常规的操作系统中,消息队列都是按照FIFO(先进先出)的方式进行调度,如果有多个接受者,那么接受者也是按照FIFO的原则接受消息(数据),但实时操作系统会提供基于优先级的处理方式:两个任务优先级是分别是10和20,同时等待一个信号量,如果按照优先级方式处理,则优先级为10的任务会优先收到信号量。
2.2 提供内核级的优先级翻转处理方式
实时操作系统调度器最经常遇到的问题就是优先级翻转,因此对于类似信号量一类的API,都能提供抑止优先级翻转的机制,防止操作系统死锁。
2.3 减少粗粒度的锁和长期关中断的使用
这里的锁主要是指自旋锁(spinlock)一类会影响中断的锁,也包括任何关中断的操作。在Windows和Linux的驱动中,为了同步的需要,可能会长期关闭中断,这里的长期可能是毫秒到百微秒级。但实时操作系统通常不允许长期关中断。
对于非实时操作系统来说,如果收到一个外部中断,那么操作系统在处理中断的整个过程中可能会一直关中断。但实时操作系统的通常做法是把中断作为一个事件通告给另外一个任务,interrupt handler在处理完关键数据以后,立即打开中断,驱动的中断处理程序以一个高优先级任务的方式继续执行。
2.4 系统级的服务也要保证实时性
对于一些系统级的服务,比如文件系统操作,非实时系统会缓存用户请求,并不直接把数据写入设备,或者建立一系列的线程池,分发文件系统请求。但实时系统中允许高优先级的任务优先写入数据,在文件系统提供服务的整个过程中,高优先级的请求被优先处理,这种高优先级策略直到操作完成。
这种设计实际上会牺牲性能,但实时系统强调的是整个系统层面的实时性,而不是某一个点(比如内核)的实时性,所以系统服务也要实时。
由于应用场景的差异,会出现有些用户需要实时性的驱动,有些用户需要高性能的驱动,因此实时操作系统实际上要提供多种形式的配置以满足不同实时性需求的用户。
2.5 避免提供实时性不确定的API
多数实时操作系统都不支持虚拟内存(page file/swap area),主要原因是缺页中断(page fault)会导致任务调度的不确定性增加。实时操作系统很多都支持分页,但很少会使用虚拟内存,因为一次缺页中断的开销十分巨大(通常都是毫秒级),波及的代码很多,导致用户程序执行的不确定性增加。
实时操作系统的确定性是一个很重要的指标,在某些极端场景下,甚至会禁用动态内存分配(malloc/free),来保证系统不受到动态的任务变化的干扰。
2.6 提供针对实时系统调度的专用API
ARINC 653标准中就针对任务调度等作出了一系列的规定,同时定义了特定的API接口和API行为.
2.7 降低系统抖动
由于关中断等原因,通常情况下,操作系统的调度器不会太精确的产生周期性的调度,比如x86早期的默认60的时钟周期(clock rate),抖动范围可能在15-17ms之间。但一个设计优秀的实时操作系统能把调度器的抖动降低到微秒甚至百纳秒一级,在像x86这种天生抖动就很大的架构上,降低系统抖动尤其重要。
2.8 针对实时性设计的SMP和虚拟化技术
SMP(多核)场景的实时调度是很困难的,这里还涉及到任务核间迁移的开销。针对SMP场景,多数实时操作系统的设计都不算十分优秀,但比起普通操作系统来说,其实时性已经好很多了。
同时实时操作系统的虚拟化能从hypervisor层面上提供虚拟机级别的实时调度,虚拟机上可以是另外一个实时系统,也可以是一个非实时系统。
非实时操作系统也可以很快,实时操作系统也可能很慢;
通常来说实时操作系统的吞吐量会大一些,但非实时系统也可以做到吞吐量更大;
实时操作系统一般都比非实时操作系统要小,但规模大的实时操作系统也是存在的。而且由于可能需要针对不同用户提供不同等级的实时服务,实时操作系统可能并不是那么精简的。
由于设备性能的发展,原来很多实时性要求高的场景,已经切换到普通的操作系统了。Linux在嵌入式设备上的推广,使用实时操作系统的很多设备已经改用Linux了,因为硬件性能的提升会让系统延迟降低到一个用户可以接受的程度。同时,由于实时操作系统的特性,它并不是一个应用场景广泛的系统,嵌入式系统和实时系统不是等完全相同的,嵌入式开发,不一定需要在实时操作系统下完成。
VxWorks
美国WindRiver公司于1983年设计开发的一种嵌入式实时操作系(RTOS),具有硬实时、确定性与稳定性,也具备航空与国防、工业、医疗、汽车、消费电子产品、网络及其他行业要求的可伸缩性与安全性。
主要功能:
支持可预测的任务同步机制
支持多任务间的通信
存储器优化管理
操作系统的(中断延迟、任务切换、驱动程序延迟等)行为是可知的和可预测的。
实时时钟服务+中断管理服务。
主要特点:
具有一个高性能的操作系统内核Wind(实时性好、可裁减)
友好的开发调试环境、较好的兼容性
支持多种开发和运行环境
μCLinux
μClinux是一种嵌入式Linux版本,其全称为micro-control Linux,从字面意思看是指微控制Linux。同标准的Linux相比,μClinux的内核非常小,但是它仍然继承了Linux操作系统的主要特性,包括良好的稳定性和移植性、强大的网络功能、出色的文件系统支持、标准丰富的API,以及TCP/IP网络协议等。因为没有MMU内存管理单元,所以其多任务的实现需要一定技巧。
μClinux在结构上继承了标准Linux的多任务实现方式,分为实时进程和普通进程,分别采用先来先服务和时间片轮转调度,仅针对中低档嵌入式CPU特点进行改良,且不支持内核抢占,实时性一般。
μClinux最大特点在于针对无MMU处理器设计。μClinux结构复杂,移植相对困难,内核也较大,系统移植需要至少512KB的RAM空间,1MB的ROM/FLASH空间。
原文链接:https://blog.csdn.net/qq_38342510/article/details/136219953
实时操作系统RTOS
是指当外界事件或数据产生时,能够接受并以足够快的速度予以处理,其处理的结果又能在规定的时间之内来控制生产过程或对处理系 统作出快速响应,并控制所有实时任务协调一致运行的操作系统。因而,提供及时响应和高可靠性是其主要特点。实时操作系统有硬实时和软实时之分,硬实时要求 在规定的时间内必须完成操作,这是在操作系统设计时保证的;软实时则只要按照任务的优先级,尽可能快地完成操作即可。我们通常使用的操作系统在经过一定改 变之后就可以变成实时操作系统。
实时操作系统是保证在一定时间限制内完成特定功能的操作系统。例如,可以为确保生产线上的机器人能获取某个物 体而设计一个操作系统。在“硬”实时操作系统中,如果不能在允许时间内完成使物体可达的计算,操作系统将因错误结束。在“软”实时操作系统中,生产线仍然 能继续工作,但产品的输出会因产品不能在允许时间内到达而减慢,这使机器人有短暂的不生产现象。一些实时操作系统是为特定的应用设计的,另一些是通用的。 一些通用目的的操作系统称自己为实时操作系统。但某种程度上,大部分通用目的的操作系统,如微软的Windows NT或IBM的OS/390有实时系统的特征。这就是说,即使一个操作系统不是严格的实时系统,它们也能解决一部分实时应用问题。
特点
多任务;
有线程优先级
多种中断级别
相关术语
代码临界段:指处理时不可分割的代码。一旦这部分代码开始执行则不允许中断打入;
资源:任何为任务所占用的实体;
共享资源:可以被一个以上任务使用的资源;
任务:也称作一个线程,是一个简单的程序。每个任务被赋予一定的优先级,有它自己的一套CPU寄存器和自己的栈空间。典型地,每个任务都是一个无限的循环,每个任务都处在以下五个状态下:休眠态,就绪态,运行态,挂起态,被中断态;
任务切换:将正在运行任务的当前状态(CPU寄存器中的全部内容)保存在任务自己的栈区,然后把下一个将要运行的任务的当前状态从该任务的栈中重新装入CPU的寄存器,并开始下一个任务的运行;
内核:负责管理各个任务,为每个任务分配CPU时间,并负责任务之间通讯。分为不可剥夺型内核于可剥夺型内核;
调度:内核的主要职责之一,决定轮到哪个任务运行。一般基于优先级调度法;
任务优先级:分为优先级不可改变的静态优先级和优先级可改变的动态优先级;
优先级反转:优先级反转问题是实时系统中出现最多的问题。共享资源的分配可导致优先级低的任务先运行,优先级高的任务后运行。解决的办法是使用“优先级继承”算法来临时改变任务优先级,以遏制优先级反转。
互斥:
虽然共享数据区简化了任务之间的信息交换,但是必须保证每个任务在处理共享共享数据时的排他性。使之满足互斥条件的一般方法有:关中断,使用测试并置位指令(TAS),禁止做任务切换,利用信号量。
因为采用实时操作系统的意义就在于能够及时处理各种突发的事件,即处理各种中断,因而衡量嵌入式实时操作系统的最主要、最具有代表性的性能指标参数无疑应该是中断响应时间了。中断响应时间通常被定义为:
中断响应时间=中断延迟时间+保存CPU状态的时间+该内核的ISR进入函数的执行时间[2]。
中断延迟时间=MAX(关中断的最长时间,最长指令时间) + 开始执行ISR的第一条指令的时间[2]。
分时操作系统
使一台计算机同时为几个、几十个甚至几百个用户服务的一种操作系统。把计算机与许多终端用户连接起来,分时操作系统将系统处理机时间与内存空 间按一定的时间间隔,轮流地切换给各终端用户的程序使用。由于时间间隔很短,每个用户的感觉就像他独占计算机一样。分时操作系统的特点是可有效增加资源的 使用率。例如UNIX系统就采用剥夺式动态优先的CPU调度,有力地支持分时操作。
产生分时系统是为了满足用户需求所形成的一种新型 OS 。它与多道批处理系统之间,有着截然不同的性能差别。用户的需求具体表现在以下几个方面: 人—机交互 共享主机 便于用户上机
特点
交互性:用户与系统进行人机对话。
多路性:多用户同时在各自终端上使用同一CPU。
独立性:用户可彼此独立操作,互不干扰,互不混淆。
及时性:用户在短时间内可得到系统的及时回答。
影响响应时间的因素:终端数目多少、时间片的大小、信息交换量、信息交换速度。
相关术语
时间片 :是把计算机的系统资源(尤其是 CPU时间)进行时间上的分割,每个时间段称为一个时间片,每个用户依次轮流使用时间片。
分时技术:把处理机的运行时间分为很短的时间片,按时间片轮流把处理机分给各联机作业使用。
分时操作系统:是一种联机的多用户交互式的操作系统。一般采用时间片轮转的方式使一台计算机为多个终端服务。对每个用户能保证足够快的响应时间,并提供交互会话能力。
设计目标: 对用户的请求及时响应,并在可能条件下尽量提高系统资源的利用率。
工作方式:
一台主机连接了若干个终端;每个终端有一个用户在使用;交互式地向系统提出命令请求;系统接受每个用户的命令;采用时间片轮转方式处理服务请求;并通过交互方式在终端上向用户显示结果;用户根据上步结果发出下道命令
分时系统实现中的关键问题:及时接收。及时处理。
原文链接:https://blog.csdn.net/JackSparrow_sjl/article/details/119279680
开源实时操作系统(RTOS)
在嵌入式系统和物联网(IoT)设备中扮演着重要的角色。它们提供了任务管理、内存管理、通信机制和文件系统等功能,使得开发者能够在一个可靠的环境中构建复杂的嵌入式应用。从 FreeRTOS 到 Zephyr,每个 RTOS 都有其独特的特点和优势,适用于不同的应用场景。
开发者选择 RTOS 时,需要考虑以下因素:
-
资源限制:嵌入式系统的内存和处理能力通常有限。因此,选择一个资源占用小的 RTOS 非常重要。
-
实时性要求:如果应用需要硬实时响应,那么选择一个支持硬实时任务的 RTOS 是必要的。
-
开发环境:开发者可能需要一个易用、有良好文档和社区支持的环境。
-
可扩展性:随着项目的发展,可能需要添加新的功能或支持新的硬件。因此,选择一个可扩展的 RTOS 是有益的。
-
生态系统:一些 RTOS 拥有丰富的第三方库和工具,这可以加速开发过程。
开源 RTOS 的优势在于它们通常由社区维护,这意味着开发者可以访问源代码,并根据自己的需要进行修改。此外,开源 RTOS 通常遵循 BSD 或其他宽松的许可证,允许商业使用。
在实际应用中,开发者可能会根据项目需求将多个 RTOS 集成到一个系统中,或者在一个 RTOS 中运行多个实例。例如,一个复杂的工业控制系统可能同时使用 FreeRTOS 和 Zephyr,前者用于控制低级的传感器和执行器,后者用于处理网络通信和数据采集。
原文链接:https://blog.csdn.net/u013558123/article/details/136735267
单核操作系统和微内核操作系统
1、简介
单核和多核的本质区别就是同一时刻可以运行几个线程,单核只能运行一个,多核可以运行多个。
单核操作系统(monolithic)
是指操作系统将所有的服务和功能都集成在内核中,包括文件系统、设备驱动程序、网络协议栈等。这种设计可以提高操作系统的性能,但是也会导致内核代码变得非常庞大和复杂,难以维护。在单处理器操作系统中,系统一次只能处理一个任务,多任务一般通过并发执行。类似于去超市买东西排队,一个个处理问题。
微内核
是内核的一种精简形式,将通常与内核集成在一起的系统服务层被分离出来,变成可以根据需求加入的选件,这样就可提供更好的可扩展性和更加有效的应用环境。使用微内核设计,对系统进行升级,只要用新模块替换旧模块,不需要改变整个操作系统,所有服务(包括设备驱动)在用户模式下运行,而处理这些服务同处理其他的任何一个程序一样。因为每个服务只是在自己的地址空间运行。所以,这些服务之间彼此之间都受到了保护。
微内核操作系统,将操作系统的基本服务和功能分离出来,只将最基本的服务放在内核中,其他服务则作为用户空间的进程运行。这种设计可以提高系统的可靠性和安全性,同时也可以使内核代码更加简洁和易于维护。
2、典型产品
单核操作系统典型厂家:Google
代表产品:Android
安卓(Android)是一种基于Linux内核(不包含GNU组件)的自由及开放源代码的移动操作系统。主要应用于移动设备,如智能手机和平板电脑。Android是一款开放源代码的操作系统,任何人都可以免费获取和使用它。这使得开发者可以基于Android系统进行开发和定制,从而满足不同用户的需求。Android系统也有庞大的开发者社区,使得开发者可以共享和交流各种开发经验和技术。
架构
Android 操作系统是一个软件组件的栈,在架构图中它大致可以分为五个部分和四个主要层。
内核。采用Linux内核,提供了基本的系统功能,比如进程管理,内存管理。
主要应用场景:智能手机和平板电脑、智能手表和智能穿戴设备、物联网
客户群体:企业
微内核操作系统典型厂家:Quantum Software Systems
代表产品:QNX
QNX是一种商用的遵从POSIX规范的类Unix实时操作系统,目标市场主要是面向嵌入式系统。采用独特的微内核实时平台,相比Windos、Linux等大型操作系统,QNX内核极小且运行速度极快。QNX构架是有一个微型内核,然后又包含许多相关进程。这样的好处是,即使有一个进程出错,也不会影响内核。
希望更深了解请点击漫谈QNX架构
主要应用场景:汽车车载软件平台、工业控制、医疗设备
客户群体:负责进行汽车制造、工业控制系统开发、医疗设备制造等领域的企业。
原文链接:https://blog.csdn.net/z1076233241/article/details/133999923
选择任务优先级-单调速率调度(Rate Monotonic Scheduling, RMS)
是一种常用的优先级分配技术。其根据任务周期性执行的速率来分配一个唯一的优先级。 具有最高周期执行频率的任务赋予高最优先级;具有最低周期执行频率的任务赋予最低优先级。这种优先级分配方式被证明了可以最大化整个应用程序的可调度性(schedulability),但是运行时间不定以及并非所有任务都具有周期性,会使得对这种方式的全面计算变得相当复杂。
原文链接:https://blog.csdn.net/JackSparrow_sjl/article/details/119279680
任务优先级-时间片tick-时钟滴答
调度器保证总是在所有可运行的任务中选择具有最高优先级的任务, 并使其进入运行态。如果被选中的优先级上具有不止一个任务,调度器会让这些任务轮流执行。这种行为方式在之前的例子中可以明显看出来。两个测试任务被创建在同一个优先级上,并且一直是可运行的。所以每个任务都执行一个时间片,任务在时间片起始时刻进入运行态, 在时间片结束时刻又退出运行态。
要能够选择下一个运行的任务,调度器需要在每个时间片的结束时刻运行自己本身。一个称为心跳(tick,有些地方被称为时钟滴答,本文中一律称为时钟心跳)中断的周期性中断用于此目的。时间片的长度通过心跳中断的频率进行设定,心跳中断频率由FreeRTOSConfig.h 中的编译时配置常量 configTICK_RATE_HZ进行配置。比如说,如果 configTICK_RATE_HZ 设为 100(HZ),则时间片长度为 10ms。
初始优先级运行后可以通过 vTaskPrioritySet() API 函数进行修改,优先级数目可以自定义,为常量configMAX_PRIORITIES的值。范围0~configMAX_PRIORITIES-1。如果一个任务持续运行,且优先级较高,其他任务将”饿死“。
原文链接:https://blog.csdn.net/JackSparrow_sjl/article/details/119279680
函数重入 Function Reentrancy
是计算机编程中的一个概念,特别是在多线程环境和系统编程中非常重要。简单来说,函数重入是指一个函数在同一个进程或者线程中被多次调用,而不会导致混乱或错误的行为。
在单线程环境下,函数重入通常不是问题,因为每次调用都会按顺序执行。但在多线程程序中,不同的线程可能会同时调用同一个函数,如果该函数使用了全局变量或者修改了共享资源,而不采取适当的同步措施,就可能导致数据竞争和不一致的状态,这就是非重入函数可能出现的问题。
为了实现函数重入,程序员需要确保:
-
函数在使用共享资源时是互斥的,比如使用互斥锁(mutex)来保护共享数据。
-
函数内部不使用静态变量,或者在使用静态变量时采取措施保证线程安全。
-
函数的调用和返回逻辑允许它被中断后再次执行,而不会造成不可预期的后果。
在某些高级编程语言中,语言本身会提供机制来支持函数重入,例如使用原子操作或者线程安全的存储类。
函数重入的正确实现对于确保程序的正确性和性能都是非常重要的。在不支持重入的上下文中错误地使用了重入,可能会导致难以调试的问题。因此,程序员在设计需要重入的函数时必须非常小心,并确保在所有可能的调用场景下都能保持函数的重入性质。
互斥Mutual Exclusion
是多线程编程中的一个关键概念,用于确保在任意时刻,只有一个线程可以访问共享资源。这是为了避免多个线程同时访问共享资源时可能出现的竞态条件(Race Condition),从而保证程序的正确性和一致性。
互斥通常通过互斥锁(Mutex)来实现。互斥锁是一种同步机制,它允许一个线程在获取锁之后独占对共享资源的访问,其他线程在尝试访问资源时必须等待,直到锁被释放。
互斥锁有以下几种状态:
-
锁定(Locked):表示锁已经被一个线程获取,其他线程不能访问共享资源。
-
解锁(Unlocked):表示锁未被任何线程获取,线程可以自由地访问共享资源。
在多线程环境中,互斥锁的使用通常遵循以下原则:
-
最小锁粒度:尽量减小锁的作用范围,只保护必要的代码块,而不是整个函数或程序。
-
避免死锁:确保锁的获取和释放顺序一致,避免因为循环等待而导致的死锁情况。
-
避免饥饿:确保线程在合理的时间内能够获取到锁,避免某些线程长时间得不到锁而无法执行。
互斥锁是一种基本的同步机制,但在某些情况下,可能会因为锁竞争导致性能瓶颈。为了优化性能,可以考虑使用其他同步机制,如读写锁(Read-Write Lock)、条件变量(Condition Variable)等。这些同步机制可以根据不同的使用场景和需求,提供更加灵活和高效的线程同步方案。
常见的互斥实现方式:
-
互斥锁(Mutex):是最常见的互斥实现方式。当一个线程获取了锁,其他试图获取同一锁的线程将会阻塞,直到锁被释放。互斥锁可以是递归锁,允许同一个线程多次获取而不死锁。
-
信号量(Semaphore):信号量可以视为一种更通用的锁,不仅可以实现互斥,还能控制对某种资源的访问数量。它维护一个计数器,当计数器大于0时,允许线程进入;线程进入时计数减1,退出时计数加1。二进制信号量常用于实现互斥。
-
自旋锁(Spinlock):当线程尝试获取锁失败时,不是立即阻塞而是不断循环检查(自旋),直到锁变为可用状态。这种方式适用于锁持有时间很短且CPU核心较多的情况,避免了线程上下文切换的开销,但若锁被长时间持有,会浪费CPU资源。
-
读写锁(Read-Write Lock):允许多个读取者同时访问资源,但写入者访问时会排除所有其他读取者和写入者。适合读多写少的场景,可以提高并发性能。
互斥的应用场景:
-
保护共享资源:如全局变量、共享内存区域、数据库连接等。
-
临界区保护:在需要原子操作的代码段前后加锁解锁,确保操作的完整性。
-
资源的独占访问:如文件操作、硬件设备控制等,确保同一时间只有一个任务在进行操作。
实现互斥时,开发者需要谨慎处理死锁、优先级反转等问题,并确保锁的正确获取和释放,避免造成系统不稳定或性能下降。
进程和线程的深入理解
下面是抽象类比:
单CPU:一台单核处理器计算机 = 一个车间;
多CPU:一台多核处理器计算机 = 一座工厂;
进程:一个车间 = 一个进程; (即一个运行的程序)
多进程:一座工厂可以同时运行多个车间;
CPU和进程:单CPU只能同时运行单个进程,多CPU可以同时运行多个进程。
线程:车间内一个工人 = 一个线程;
进程与线程:一个进程可以包括多个线程。
线程间内存共享:车间的空间是工人们共享的,比如许多房间是每个工人都可以进出的。
一个进程的内存空间是共享的,每个线程都可以使用这些共享内存。
内存安全:可是,每个车间容纳大小不同,有的最多只能容纳一个人。车间人满的时候,其他人就进不去了。
一个线程使用某些共享内存时,其他线程必须等它结束,才能使用这一块内存。
互斥锁:
一个防止他人进入的简单方法,就是门口加一把锁。先到的人锁上门,后到的人看到上锁,就在门口排队,等锁打开再进去。
这就叫"互斥锁"–Mutex,防止两个线程同时读写某一块内存区域。
信号量:
这时的解决方法,就是在门口挂n把钥匙。进去的人就取一把钥匙,出来时再把钥匙挂回原处。后到的人发现钥匙架空了,就知道必须在门口排队等着了。
这种做法叫做"信号量"(Semaphore),用来保证多个线程不会互相冲突。
锁和信号量:不难看出,互斥锁是信号量的一种特殊情况(n=1时)。也就是说,完全可以用后者替代前者。但是,因为mutex较为简单,且效率高,所以在必须保证资源独占的情况下,还是采用这种设计。
操作系统的资源分配与调度逻辑
以多进程形式,允许多个任务同时运行;
以多线程形式,允许单个任务分成不同的部分运行;
提供协调机制,一方面防止进程之间和线程之间产生冲突,另一方面允许进程之间和线程之间共享资源。
下面是严谨的解释:
进程
进程是程序的一次执行过程,是一个动态概念,是程序在执行过程中分配和管理资源的基本单位,每一个进程都有一个自己的地址空间,包括代码区、数据区和堆栈区,进程之间的地址空间是隔离的,互不影响。至少有 5 种基本状态,它们是:初始态,执行态,等待状态,就绪状态,终止状态。
进程是一个具有一定独立功能的程序在一个数据集合上依次动态执行的过程。进程是一个正在执行的程序的实例,包括程序计数器、寄存器和程序变量的当前值。
一个在内存中运行的应用程序。每个进程都有自己独立的一块内存空间,一个进程可以有多个线程,比如在Windows系统中,一个运行的xx.exe就是一个进程。
线程
线程是CPU调度和分派的基本单位,它可与同属一个进程的其他的线程共享进程所拥有的全部资源。
进程和线程的关系
线程是进程的一部分
一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。
线程被设计成进程的一个执行路径,同一个进程中的线程共享进程的资源。
进程和线程的区别
理解它们的差别,我从资源使用的角度出发。(所谓的资源就是计算机里的中央处理器,内存,文件,网络等等)
根本区别:进程是操作系统资源分配的基本单位,而线程是任务调度和执行的基本单位
开销方面:每个进程都有独立的代码和数据空间(程序上下文),进程之间切换开销大;线程可以看做轻量级的进程,同一类线程共享代码和数据空间,每个线程都有自己独立的运行栈和程序计数器(PC),线程之间切换的开销小
所处环境:在操作系统中能同时运行多个进程(程序);而在同一个进程(程序)中有多个线程同时执行(通过CPU调度,在每个时间片中只有一个线程执行)
内存分配:系统为每个进程分配不同的内存空间;而对线程而言,除了CPU外,系统不会为线程分配内存(线程所使用的资源来自其所属进程的资源),线程组之间只能共享资源
包含关系:线程是进程的一部分,所以线程也被称为轻权进程或者轻量级进程
原文链接:https://blog.csdn.net/luhao19980909/article/details/89403233
线程私有资源
线程上下文thread context。
线程运行的本质其实就是函数的执行,函数的执行总会有一个源头,这个源头就是所谓的入口函数,CPU从入口函数开始执行从而形成一个执行流,只不过我们人为的给执行流起一个名字,这个名字就叫线程。
既然线程运行的本质就是函数的执行,那么函数执行都有哪些信息呢?
在《函数运行时在内存中是什么样子?这篇文章中我们说过,函数运行时的信息保存在栈帧中,栈帧中保存了函数的返回值、调用其它函数的参数、该函数使用的局部变量以及该函数使用的寄存器信息,如图所示,假设函数A调用函数B:
此外,CPU执行指令的信息保存在一个叫做程序计数器的寄存器中,通过这个寄存器我们就知道接下来要执行哪一条指令。由于操作系统随时可以暂停线程的运行,因此我们保存以及恢复程序计数器中的值就能知道线程是从哪里暂停的以及该从哪里继续运行了。
由于线程运行的本质就是函数运行,函数运行时信息是保存在栈帧中的,因此每个线程都有自己独立的、私有的栈区。
同时函数运行时需要额外的寄存器来保存一些信息,像部分局部变量之类,这些寄存器也是线程私有的,一个线程不可能访问到另一个线程的这类寄存器信息。
从上面的讨论中我们知道,到目前为止,所属线程的栈区、程序计数器、栈指针以及函数运行使用的寄存器是线程私有的。
以上这些信息有一个统一的名字,就是线程上下文,thread context。
我们也说过操作系统调度线程需要随时中断线程的运行并且需要线程被暂停后可以继续运行,操作系统之所以能实现这一点,依靠的就是线程上下文信息。
现在你应该知道哪些是线程私有的了吧。
线程间共享资源
除此之外,剩下的都是线程间共享资源。
那么剩下的还有什么呢?还有图中的这些。
这其实就是进程地址空间的样子,也就是说线程共享进程地址空间中除线程上下文信息中的所有内容,意思就是说线程可以直接读取这些内容。
接下来我们分别来看一下这些区域。
代码区
进程地址空间中的代码区,这里保存的是什么呢?从名字中有的同学可能已经猜到了,没错,这里保存的就是我们写的代码,更准确的是编译后的可执行机器指令。
那么这些机器指令又是从哪里来的呢?答案是从可执行文件中加载到内存的,可执行程序中的代码区就是用来初始化进程地址空间中的代码区的。
线程之间共享代码区,这就意味着程序中的任何一个函数都可以放到线程中去执行,不存在某个函数只能被特定线程执行的情况。
堆区
堆区是程序员比较熟悉的,我们在C/C++中用malloc或者new出来的数据就存放在这个区域,很显然,只要知道变量的地址,也就是指针,任何一个线程都可以访问指针指向的数据,因此堆区也是线程共享的属于进程的资源。
栈区
唉,等等!刚不是说栈区是线程私有资源吗,怎么这会儿又说起栈区了?
确实,从线程这个抽象的概念上来说,栈区是线程私有的,然而从实际的实现上看,栈区属于线程私有这一规则并没有严格遵守,这句话是什么意思?
通常来说,注意这里的用词是通常,通常来说栈区是线程私有,既然有通常就有不通常的时候。
不通常是因为不像进程地址空间之间的严格隔离,线程的栈区没有严格的隔离机制来保护,因此如果一个线程能拿到来自另一个线程栈帧上的指针,那么该线程就可以改变另一个线程的栈区,也就是说这些线程可以任意修改本属于另一个线程栈区中的变量。
这从某种程度上给了程序员极大的便利,但同时,这也会导致极其难以排查到的bug。
试想一下你的程序运行的好好的,结果某个时刻突然出问题,定位到出问题代码行后根本就排查不到原因,你当然是排查不到问题原因的,因为你的程序本来就没有任何问题,是别人的问题导致你的函数栈帧数据被写坏从而产生bug,这样的问题通常很难排查到原因,需要对整体的项目代码非常熟悉,常用的一些debug工具这时可能已经没有多大作用了。
说了这么多,那么同学可能会问,一个线程是怎样修改本属于其它线程的数据呢?
接下来我们用一个代码示例讲解一下。
文件
最后,如果程序在运行过程中打开了一些文件,那么进程地址空间中还保存有打开的文件信息,进程打开的文件也可以被所有的线程使用,这也属于线程间的共享资源。关于文件IO操作,你可以参考《读取文件时,程序经历了什么?
One More Thing:TLS
本文就这些了吗?
实际上本篇开头关于线程私有数据还有一个项没有详细讲解,因为再讲下去本篇就撑爆了,实际上本篇讲解的已经足够用了,剩下的这一点仅仅作为补充。
线程局部存储,Thread Local Storage,TLS。
关于线程私有数据还有一项技术,那就是线程局部存储,Thread Local Storage,TLS。
这是什么意思呢?
其实从名字上也可以看出,所谓线程局部存储,是指存放在该区域中的变量有两个含义:
-
存放在该区域中的变量是全局变量,所有线程都可以访问
-
虽然看上去所有线程访问的都是同一个变量,但该全局变量独属于一个线程,一个线程对此变量的修改对其他线程不可见。
说了这么多还是没懂有没有?没关系,接下来看完这两段代码还不懂你来打我。
我们先来看第一段代码,不用担心,这段代码非常非常的简单:
int a = 1; // 全局变量 void print_a() { cout<<a<<endl; } void run() { ++a; print_a(); } void main() { thread t1(run); t1.join(); thread t2(run); t2.join(); }
怎么样,这段代码足够简单吧,上述代码是用C++11写的,我来讲解下这段代码是什么意思。
-
首先我们创建了一个全局变量a,初始值为1
-
其次我们创建了两个线程,每个线程对变量a加1
-
线程的join函数表示该线程运行完毕后才继续运行接下来的代码
那么这段代码的运行起来会打印什么呢?
全局变量a的初始值为1,第一个线程加1后a变为2,因此会打印2;第二个线程再次加1后a变为3,因此会打印3,让我们来看一下运行结果:
2 3
看来我们分析的没错,全局变量在两个线程分别加1后最终变为3。
接下来我们对变量a的定义稍作修改,其它代码不做改动:
__thread int a = 1; // 线程局部存储
我们看到全局变量a前面加了一个__thread关键词用来修饰,也就是说我们告诉编译器把变量a放在线程局部存储中,那这会对程序带来哪些改变呢?
简单运行一下就知道了:
2 2
和你想的一样吗,有的同学可能会大吃一惊,为什么我们明明对变量a加了两次,但第二次运行为什么还是打印2而不是3呢?
想一想这是为什么。
原来,这就是线程局部存储的作用所在,线程t1对变量a的修改不会影响到线程t2,线程t1在将变量a加到1后变为2,但对于线程t2来说此时变量a依然是1,因此加1后依然是2。
因此,线程局部存储可以让你使用一个独属于线程的全局变量。也就是说,虽然该变量可以被所有线程访问,但该变量在每个线程中都有一个副本,一个线程对改变量的修改不会影响到其它线程。
链接:https://www.zhihu.com/question/519893352/answer/2375191174
多线程间的同步与互斥
现代操作系统基本都是多任务操作系统,即同时有大量可调度实体在运行。在多任务操作系统中,同时运行的多个任务可能:
-
都需要访问/使用同一种资源;
-
多个任务之间有依赖关系,某个任务的运行依赖于另一个任务。
【同步】:
是指散步在不同任务之间的若干程序片断,它们的运行必须严格按照规定的某种先后次序来运行,这种先后次序依赖于要完成的特定的任务。最基本的场景就是:两个或两个以上的进程或线程在运行过程中协同步调,按预定的先后次序运行。比如 A 任务的运行依赖于 B 任务产生的数据。
【互斥】:
是指散步在不同任务之间的若干程序片断,当某个任务运行其中一个程序片段时,其它任务就不能运行它们之中的任一程序片段,只能等到该任务运行完这个程序片段后才可以运行。最基本的场景就是:一个公共资源同一时刻只能被一个进程或线程使用,多个进程或线程不能同时使用公共资源。
原文链接:https://blog.csdn.net/daaikuaichuan/article/details/82950711
也就是说互斥是两个任务之间不可以同时运行,他们会相互排斥,必须等待一个线程运行完毕,另一个才能运行,而同步也是不能同时运行,但他是必须要安照某种次序来运行相应的线程(也是一种互斥)!因此互斥具有唯一性和排它性,但互斥并不限制任务的运行顺序,即任务是无序的,而同步的任务之间则有顺序关系。
多线程与临界区
多线程想要访问临界区时,就要对临界区进行上锁,这与之前写到的进程互斥是一个道理,这也就是防止共享数据被并发访问的解决方法,这种上锁叫做互斥锁
互斥锁
互斥锁以排他的方式保护共享数据被并发访问。
因为在线程中,内存地址空间是共享的,就像一个大房子,在这个进程中的线程们都可以进来,当我们某一个线程想做一些事时,不想让其他线程打断,那我们就给门上加个锁,当一个进程进来后,把门锁上,当干完想干的事时,再解锁出去,让其他进程进来,这样就保证在做一件事时绝对不会被打断,当其它进程进来时,同样可以做自己想做的事情,可以是与之前进程一样的事情
互斥锁是一个二元信号量
互斥锁的基本操作
在线程里也有这么一把锁——互斥锁(mutex),互斥锁是一种简单的加锁的方法来控制对共享资源的访问,互斥锁只有两种状态,即上锁( lock )和解锁( unlock )。
【互斥锁的特点】:
-
原子性:把一个互斥量锁定为一个原子操作,这意味着操作系统(或pthread函数库)保证了如果一个线程锁定了一个互斥量,没有其他线程在同一时间可以成功锁定这个互斥量;
-
唯一性:如果一个线程锁定了一个互斥量,在它解除锁定之前,没有其他线程可以锁定这个互斥量;
-
非繁忙等待:如果一个线程已经锁定了一个互斥量,第二个线程又试图去锁定这个互斥量,则第二个线程将被挂起(不占用任何cpu资源),直到第一个线程解除对这个互斥量的锁定为止,第二个线程则被唤醒并继续执行,同时锁定这个互斥量。
【互斥锁的操作流程如下】:
-
在访问共享资源后临界区域前,对互斥锁进行加锁;
-
在访问完成后释放互斥锁导上的锁。在访问完成后释放互斥锁导上的锁;
-
对互斥锁进行加锁后,任何其他试图再次对互斥锁加锁的线程将会被阻塞,直到锁被释放。对互斥锁进行加锁后,任何其他试图再次对互斥锁加锁的线程将会被阻塞,直到锁被释放。
条件变量
条件变量是用来等待而不是用来上锁的。条件变量用来自动阻塞一个线程,直到某特殊情况发生为止。通常条件变量和互斥锁同时使用。
条件变量使我们可以睡眠等待某种条件出现。条件变量是利用线程间共享的全局变量进行同步 的一种机制,主要包括两个动作:
一个线程等待"条件变量的条件成立"而挂起;
另一个线程使 “条件成立”(给出条件成立信号)。
【原理】:
条件的检测是在互斥锁的保护下进行的。线程在改变条件状态之前必须首先锁住互斥量。如果一个条件为假,一个线程自动阻塞,并释放等待状态改变的互斥锁。如果另一个线程改变了条件,它发信号给关联的条件变量,唤醒一个或多个等待它的线程,重新获得互斥锁,重新评价条件。如果两进程共享可读写的内存,条件变量 可以被用来实现这两进程间的线程同步。
【条件变量的操作流程如下】:
-
初始化:init()或者pthread_cond_tcond=PTHREAD_COND_INITIALIER;属性置为NULL;
-
等待条件成立:pthread_wait,pthread_timewait.wait()释放锁,并阻塞等待条件变量为真 timewait()设置等待时间,仍未signal,返回ETIMEOUT(加锁保证只有一个线程wait);
-
激活条件变量:pthread_cond_signal,pthread_cond_broadcast(激活所有等待线程)
-
清除条件变量:destroy;无线程等待,否则返回EBUSY清除条件变量:destroy;无线程等待,否则返回EBUSY
原文链接:https://blog.csdn.net/daaikuaichuan/article/details/82950711
条件变量基本原理:
互斥锁能够解决资源的互斥访问,但有些情况,互斥并不能解决。
例如下面这种情况,系统有全局变量 i 和 j,线程A和B都要访问,线程A需要互斥的执行i++;j–操作;线程B需要互斥的在 i 等于 j是执行do_something()函数。
如果只使用互斥锁,可能导致do_something()永远不会执行,因为当i=j=5时,线程B不一定能抢占到资源
所以,需要某个机制来解决此问题,更重要的是,线程B仅仅只有一种情况需要执行do_something()函数,但不停的申请释放互斥锁将造成资源的浪费。
在使用互斥锁时结合条件变量解决这一问题。
这里要注意的是,条件变量不能单独使用,必须配合互斥锁一起实现对资源的互斥访问。
条件变量的基本操作
初始化和销毁没有什么好说的,man一下,全清楚
那就说说signal和wait,
wait是在等一个它要等的人(条件),这个人就是signal,signal会发一个信号,当signal发出消息,wait就可以继续执行自己的事情,否则它就一直等待
还是用生产者消费者的例子来看
生产者在生产时要上锁保证自己的生产不被打断,消费者也是一样,但是消费者需要在生产者生产后,才能进行消费所以当生产者生产后要通知一下,消费者也要等着生产者的信号。其实这就像在食堂吃饭时,我们买好饭然后就等着食堂阿姨做好了叫我们,然后阿姨(生产者)去做饭,阿姨做好饭后会叫我们。
读写锁
读写锁与互斥量类似,不过读写锁允许更改的并行性,也叫共享互斥锁。互斥量要么是锁住状态,要么就是不加锁状态,而且一次只有一个线程可以对其加锁。读写锁可以有3种状态:读模式下加锁状态、写模式加锁状态、不加锁状态。
一次只有一个线程可以占有写模式的读写锁,但是多个线程可以同时占有读模式的读写锁(允许多个线程读但只允许一个线程写)。
【读写锁的特点】:
如果有其它线程读数据,则允许其它线程执行读操作,但不允许写操作;
如果有其它线程写数据,则其它线程都不允许读、写操作。
【读写锁的规则】:
如果某线程申请了读锁,其它线程可以再申请读锁,但不能申请写锁;
如果某线程申请了写锁,其它线程不能申请读锁,也不能申请写锁。
读写锁适合于对数据结构的读次数比写次数多得多的情况。
原文链接:https://blog.csdn.net/daaikuaichuan/article/details/82950711
读写锁基本原理:
在对数据的读写应用中,很多情况是大量的读操作,二较少的写操作,例如对数据库系统数据的访问,显然,这时使用互斥锁将非常影响效率。为了满足这一情况,posix线程提供了读写锁机制。
读写锁的基本操作
原文链接:https://blog.csdn.net/lindaxym/article/details/79872176
自旋锁(同步)
自旋锁与互斥量功能一样,唯一一点不同的就是互斥量阻塞后休眠让出cpu,而自旋锁阻塞后不会让出cpu,会一直忙等待,直到得到锁。
自旋锁在用户态使用的比较少,在内核使用的比较多!自旋锁的使用场景:锁的持有时间比较短,或者说小于2次上下文切换的时间。
自旋锁在用户态的函数接口和互斥量一样,把pthread_mutex_xxx()中mutex换成spin,如:pthread_spin_init()。
信号量(同步与互斥)
信号量广泛用于进程或线程间的同步和互斥,信号量本质上是一个非负的整数计数器,它被用来控制对公共资源的访问。
编程时可根据操作信号量值的结果判断是否对公共资源具有访问的权限,当信号量值大于 0 时,则可以访问,否则将阻塞。PV 原语是对信号量的操作,一次 P 操作使信号量减1,一次 V 操作使信号量加1。
【信号量用于同步】:
【信号量用于互斥】:
原文链接:https://blog.csdn.net/daaikuaichuan/article/details/82950711
线程同步的四种方法
1、临界区(Critical Section):
通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问。
优点:保证在某一时刻只有一个线程能访问数据的简便办法
缺点:虽然临界区同步速度很快,但却只能用来同步本进程内的线程,而不可用来同步多个进程中的线程。
2、互斥量(Mutex):
为协调共同对一个共享资源的单独访问而设计的。
互斥量跟临界区很相似,比临界区复杂,互斥对象只有一个,只有拥有互斥对象的线程才具有访问资源的权限。
优点:使用互斥不仅仅能够在同一应用程序不同线程中实现资源的安全共享,而且可以在不同应用程序的线程之间实现对资源的安全共享。
缺点:①互斥量是可以命名的,也就是说它可以跨越进程使用,所以创建互斥量需要的资源更多,所以如果只为了在进程内部是用的话使用临界区会带来速度上的优势并能够减少资源占用量。因为互斥量是跨进程的互斥量一旦被创建,就可以通过名字打开它。
②通过互斥量可以指定资源被独占的方式使用,但如果有下面一种情况通过互斥量就无法处理,比如现在一位用户购买了一份三个并发访问许可的数据库系统,可以根据用户购买的访问许可数量来决定有多少个线程/进程能同时进行数据库操作,这时候如果利用互斥量就没有办法完成这个要求,信号量对象可以说是一种资源计数器。
3、信号量(Semaphore):
为控制一个具有有限数量用户资源而设计。它允许多个线程在同一时刻访问同一资源,但是需要限制在同一时刻访问此资源的最大线程数目。互斥量是信号量的一种特殊情况,当信号量的最大资源数=1就是互斥量了。
优点:适用于对Socket(套接字)程序中线程的同步。(例如,网络上的HTTP服务器要对同一时间内访问同一页面的用户数加以限制,只有不大于设定的最大用户数目的线程能够进行访问,而其他的访问企图则被挂起,只有在有用户退出对此页面的访问后才有可能进入。)
缺点:①信号量机制必须有公共内存,不能用于分布式操作系统,这是它最大的弱点;
②信号量机制功能强大,但使用时对信号量的操作分散, 而且难以控制,读写和维护都很困难,加重了程序员的编码负担;
③核心操作P-V分散在各用户程序的代码中,不易控制和管理,一旦错误,后果严重,且不易发现和纠正。
4、事件(Event):
用来通知线程有一些事件已发生,从而启动后继任务的开始。
优点:事件对象通过通知操作的方式来保持线程的同步,并且可以实现不同进程中的线程同步操作。
缺点:
总结:
①临界区不是内核对象,只能用于进程内部的线程同步,是用户方式的同步。互斥、信号量是内核对象可以用于不同进程之间的线程同步(跨进程同步)。
②互斥其实是信号量的一种特殊形式。互斥可以保证在某一时刻只有一个线程可以拥有临界资源。信号量可以保证在某一时刻有指定数目的线程可以拥有临界资源。
原文链接:https://blog.csdn.net/weixin_45590051/article/details/116530748
发布订阅模式
订阅者(Subsciber)通过事件注册(Subscribe)将订阅事件提交到调度中心(Topic),调度中心保存好订阅者的注册信息(回调函数),每当发布者(Publisher)发布事件的时候,通过事件发布(Publish)将发布的消息提交到调度中心,然后调度中心统一处理订阅者注册该事件的消息(执行注册时的回调函数)。
原文链接:https://blog.csdn.net/chenjycm/article/details/105779425
GPL
是GNU General Public License(GNU通用公共许可证)的缩写,是一种广泛使用的软件许可协议,由自由软件基金会(Free Software Foundation, FSF)创立的GNU项目制定。它的设计目的是保证软件的自由度,即保证用户可以自由地运行、复制、修改和重新分发软件,同时也确保这些自由被任何后续的分发版本保持下去。
主要特点:
-
自由使用:允许用户无限制地运行软件。
-
源代码访问:要求软件以源代码形式提供,以便用户可以查看和修改代码。
-
再分发自由:允许用户重新分发软件,无论是原始版本还是修改后的版本。
-
修改和衍生作品:用户可以修改软件,并且必须在分发修改版时也遵循GPL许可,确保所有收到的人都能享有相同的自由。
-
** copyleft条款**:这是一个关键特征,意味着任何基于GPL许可软件开发的衍生作品也必须采用GPL许可,确保自由软件的开放性不会在下游被封闭。
版本历史:
-
GPLv1:最初的版本,发布于1989年。
-
GPLv2:最广泛使用的版本之一,发布于1991年,许多著名的自由软件项目如Linux内核都采用这一版本。
-
GPLv3:发布于2007年,对一些法律和技术问题进行了更新,包括软件专利、DRM(数字版权管理)和许可证兼容性等问题。
应用范围:
GPL适用于各种类型的软件,包括操作系统(如Linux)、应用程序、编程库等,是自由软件和开源软件运动中的基石之一。
凸函数
定义:
凸函数是数学分析中的一个重要概念,尤其在优化理论和凸分析中扮演核心角色。一个实值函数 𝑓:𝑅𝑛→𝑅f:Rn→R 被称为凸函数,如果对于所有 𝑥,𝑦∈𝑅𝑛x,y∈Rn 和所有的 𝑡∈[0,1]t∈[0,1],下述条件成立:
𝑓(𝑡𝑥+(1−𝑡)𝑦)≤𝑡𝑓(𝑥)+(1−𝑡)𝑓(𝑦)f(tx+(1−t)y)≤tf(x)+(1−t)f(y)
这个不等式表达的是函数图形在任意两点间连线段上的点不会高于这两点对应的函数值,形象地说,这样的函数图形在每两点间都是“下凹”的。这个性质意味着凸函数没有局部极小值点,除了可能是全局最小值点外。这也表明,如果一个函数是凸的,那么任何局部最小值点自动就是全局最小值点,这是凸优化问题能够保证全局最优解的基础。
几个典型的凸函数例子包括:
-
一次函数(线性函数)
-
二次函数(当其系数矩阵为半正定矩阵时)
-
指数函数 𝑒𝑥ex
-
幂函数 𝑥𝑎xa 当 𝑎≥1a≥1 或 0<𝑎<10<a<1 且 𝑥≥0x≥0
-
对数函数 log(𝑥)log(x) 当 𝑥0x0
相反地,如果上述不等式反向,则函数被称为凹函数。如果既不满足凸函数也不满足凹函数的定义,则该函数是非凸非凹函数。在凸优化中,我们主要关注的是凸函数及其性质。
注意:
-
在中国大陆的数学界,关于函数凹凸性的定义和国外的定义是相反的。Convex Function在某些中国大陆的数学书中指凹函数,而Concave Function指凸函数。但在涉及经济学的很多书中,凹凸性的提法和其他国家的提法是一致的。
-
凸函数的定义在不同的教材或文献中可能会有所不同,但基本上都遵循上述的核心定义。
性质:
-
一阶导数递增:如果一个函数是凸函数,那么它的一阶导数在定义域内单调递增。
-
二阶导数非负:如果一个函数是凸函数,那么它的二阶导数在定义域内恒大于或者等于0。如果其二阶导数在区间上恒大于0,则称为严格凸函数。
-
切线作用:对于凸函数的任意两个点,函数图像段位于这两点之上的一条直线是这个函数图像在两点处的切线。这意味着凸函数的图像始终在它的切线之上。
-
局部最小值即全局最小值:凸函数的任何极小值也是最小值。严格凸函数最多有一个最小值。
应用:
凸函数在金融风险管理、偏微分方程、凸优化、图像识别和资源分配问题等领域有广泛的应用。例如,在金融领域,凸函数被广泛用于估算资产的风险度量;在偏微分方程中,凸函数可以用于最小曲面问题的求解;在优化问题中,凸函数是描述和解决优化问题的关键工具。
综上所述,凸函数是一类具有特定性质和广泛应用的数学函数。其定义基于函数的值与其参数之间的凸性关系,具有一系列重要的数学性质和应用价值。
凸优化算法
是数学最优化领域中的一类重要算法,专门用于解决凸优化问题,即目标函数为凸函数,且约束条件为凸集的优化问题。以下是关于凸优化算法的详细回答:
定义与性质
凸优化算法研究的是定义在凸集中的凸函数最小化问题。凸优化问题具有一系列良好的性质,例如:
-
局部最优解必定是全局最优解。
-
凸函数的凸性使得凸分析中的有力工具(如次导数)在最优化问题中得以应用。
常见算法
凸优化问题可以通过多种算法求解,以下是一些常见的算法:
-
梯度下降法:通过迭代地计算函数在当前点的梯度,并沿梯度的反方向更新参数,以逐渐逼近最优解。
-
内点法:适用于具有不等式约束的凸优化问题。该算法从可行域的内部开始,沿着使目标函数值下降且满足约束的方向移动,直到找到最优解。
-
牛顿法:基于函数的二阶导数信息(即海森矩阵)进行迭代更新,通常比梯度下降法收敛更快。
-
坐标下降法:在每次迭代中,固定除一个坐标外的所有坐标,然后沿该坐标方向进行最小化,直到收敛。
-
捆集法(Bundle Method):适用于求解非光滑凸优化问题。它通过维护一个包含函数值和次梯度的“捆集”,来逼近非光滑函数并求解。
算法选择与应用
在选择凸优化算法时,需要考虑问题的性质、约束条件、函数的光滑性等因素。不同的算法在不同的场景下具有不同的性能表现。
凸优化算法广泛应用于多个领域,包括:
-
自动控制系统:用于优化控制策略,提高系统性能。
-
信号处理:用于信号重构、去噪等任务,提高信号处理准确性。
-
金融:用于证券组合优化、风险管理等问题,实现资产的有效配置和风险管理。
-
机器学习:在支持向量机、逻辑回归等算法中用于求解优化问题,提升模型的准确性和泛化能力。
总结
凸优化算法是数学最优化领域中的重要工具,专门用于解决凸优化问题。通过选择合适的算法并结合问题的具体性质,可以高效地求解凸优化问题,并在多个领域得到广泛应用。
什么是凸函数以及如何判断函数是否为凸函数
一、什么是凸函数
定义一
对于一元函数f(x),如果对于任意tϵ[0,1]均满足:f(tx1+(1−t)x2)≤tf(x1)+(1−t)f(x2),则称f(x)为凸函数(convex function)
如果对于任意tϵ(0,1)均满足:f(tx1+(1−t)x2)<tf(x1)+(1−t)f(x2),则称f(x)为严格凸函数(convex function) 定义二 首先定义凸集,如果x,y属于某个集合M,并且所有的θx+(1−θ)f(y)也属于M,那么M为一个凸集。如果函数f的定义域是凸集,并且满足f(θx+(1−θ)y)≤θf(x)+(1−θ)f(y)则该函数为凸函数。 我们可以从几何上直观地理解凸函数的特点,凸函数的割线在函数曲线的上方,如图1所示:从f(x1)连一条线到右侧的虚线,利用三角形边的比例性质可以推出中间虚线与上面直线交点的值
上面的公式,完全可以推广到多元函数。在数据科学的模型求解中,如果优化的目标函数是凸函数,则局部极小值就是全局最小值。这也意味着我们求得的模型是全局最优的,不会陷入到局部最优值。 「注意」:中国大陆数学界某些机构关于函数凹凸性定义和国外的定义是相反的。Convex Function在某些中国大陆的数学书中指凹函数。Concave Function指凸函数。但在中国大陆涉及经济学的很多书中,凹凸性的提法和其他国家的提法是一致的,也就是和数学教材是反的。举个例子,同济大学高等数学教材对函数的凹凸性定义与本条目相反,本条目的凹凸性是指其上方图是凹集或凸集,而同济大学高等数学教材则是指其下方图是凹集或凸集,两者定义正好相反。
二、如何判断函数是否为凸函数?
对于一元函数f(x),我们可以通过其二阶导数f′′(x) 的符号来判断。如果函数的二阶导数总是非负,即f′′(x)≥0,则f(x)是凸函数
对于多元函数f(X),我们可以通过其Hessian矩阵(Hessian矩阵是由多元函数的二阶导数组成的方阵)的正定性来判断。如果Hessian矩阵是半正定矩阵,则是f(X)凸函数
三、为什么要求是凸函数呢?
如果是下图这样的函数,则无法获得全局最优解。
四、为什么要求是凸集呢?
如果可行域不是凸集,也会导致局部最优。
五、Jensen不等式
对于凸函数,我们可以推广出一个重要的不等式,即Jensen不等式。如果 f是凸函数,X是随机变量,那么f ( E ( X ) ) ≤ E ( f ( X ) ),上式就是Jensen不等式的一般形式 我们还可以看它的另一种描述。假设有 n个样本x1,x2,...,xn和对应的权重α1,α2,...,αn,权重满足a i ⩾ 0 ,∑αi=1,对于凸函数 f,以下不等式成立: f(∑i=1 n αi xi)≤∑i=1 n αi f(xi)
六、实际建模中如何判断一个最优化问题是不是凸优化问题
-
目标函数f如果不是凸函数,则不是凸优化问题
-
决策变量x中包含离散变量(0-1变量或整数变量),则不是凸优化问题
-
约束条件写成g ( x ) ≤ 0 时,g如果不是凸函数,则不是凸优化问题 之所以要区分凸优化问题和非凸的问题原因在于凸优化问题中局部最优解同时也是全局最优解,这个特性使凸优化问题在一定意义上更易于解决,而一般的非凸最优化问题相比之下更难解决。
七、非凸优化问题如何转化为凸优化问题的方法:
非凸优化问题如何转化为凸优化问题的方法:
-
修改目标函数,使之转化为凸函数
-
抛弃一些约束条件,使新的可行域为凸集并且包含原可行域
四元数是做什么用的
四元数为我们提供了将一个点围绕指定的轴旋转指定的角度的方法。
四元数(Quaternion)是一种数学工具,它在多个领域中有着广泛的应用,特别是在计算机图形学、机器人学、航空航天和信号处理等领域。四元数主要用于表示和处理三维空间中的旋转。
在三维空间中,表示一个物体的旋转有多种方法,例如旋转矩阵(Rotation Matrix)或欧拉角(Euler Angles)。然而,这些方法都有其局限性:
-
旋转矩阵:虽然能够准确表示旋转,但是矩阵乘法运算比较复杂,特别是当涉及到多个变换时,计算量会迅速增加。
-
欧拉角:使用角度来表示旋转,直观易懂,但是欧拉角会有万向节锁(Gimbal Lock)的问题,即当一个轴与另外两个轴之一对齐时,另外两个轴将失去独立性,这会导致在某些情况下计算不稳定。
四元数则较好地解决了这些问题。四元数由一个实数部分和三个虚数部分组成,通常表示为 q = a + bi + cj + dk
,其中 a, b, c, d
是实数,i, j, k
是虚数单位。四元数可以表示为复数的形式,但是它与传统的复数不同,因为它有三个虚数单位而不是两个(在四元数中,i^2 = j^2 = k^2 = ijk = -1
)。
使用四元数来表示和计算旋转的好处包括:
-
避免万向节锁:四元数不会出现欧拉角在某些变换时失去独立性的问题。
-
计算效率:四元数的乘法和除法运算比矩阵运算要简单快捷得多。
-
连续旋转:四元数可以连续地表示旋转,使得在连续变换时非常平滑,不会出现欧拉角那样的跳变。
-
包含尺度变换:四元数可以方便地表示包含缩放(尺度)的旋转,这在计算机图形学中非常有用。
因此,四元数在需要表示和处理三维空间中旋转的场景中是非常有用的工具,特别是在图形渲染、游戏开发、机器人导航、航空航天器的姿态控制等领域。
制导-导弹
定义
指按照一定规律控制武器飞行方向、姿态、高度和速度,引导其战斗部准确攻击目标的军用技术。
精确制导技术足以微电子、电子计算机技术和光电转换技术为核心,以自动控制技术为基础发展起来的高新技术,广泛应用于导弹、航空炸弹、炮弹、鱼雷、地雷等武器系统中。
精确制导武器系统按照不同控制引导方式可概括为自主式、寻的式、遥控式和复合式制导4种。
自主式制导。
引导指令由弹上制导系统按照预先拟定的飞行方案飞向目标,制导系统与目标、指挥站不发生任何联系。海湾战争中的“飞毛腿”导弹就属于自主式制导。
寻的式制导。
有一个动的、静态的目标对象。
利用弹上设备接受来自目标辐射或反射的能量,如电磁波、红外线、激光、可见光等信号,靠弹上探测设备测量目标和导弹相对运动的参数,并将这些参数变换成引导指令信号,使导弹飞向目标。
遥控制导。
由设在导弹以外的地面、水面或空中制导站控制导弹飞向目标。
复合制导
是在—种武器中采用两种或两种以上制导方式组合形成的制导技术。
智能制导
目前,随着微电子技术与电子计算机技术的曰新月异,精确制导武器正向更先进的智能制导发展。智能制导的优点是抗干扰能力强。智能化的关键是用成像传感器代替人眼,用微处理器模拟人的分析、推理、判断、决策等逻辑功能,用电子计算机和各种软件部分地代替人的思维过程。
发展多用途导引头也是制导技术的前景之一。—种导弹能对付不同类型的目标,或具有在不同平台上发射的能力,是今后导弹发展的方向。 未来战争复杂的电磁环境.要求提高精确制导武器的抗干扰能力。
制导-卫星
一般称为轨控:卫星向着期望轨道运行,由地面发送上行指令控制轨控发动机点火,又称为轨道维持或者轨道机动,人在回路,非自动。
制导-火箭
定义
Guidance,即导引和控制无人飞行器按一定规律飞向目标或预定轨道的技术和方法。
广义的制导系统:包括与质心运动相关的一切机动,如:加表减载控制、子级脱落控制等。狭义的制导:何控制火箭进入期望的目标轨道这么一项技术。
制导过程中,导引系统不断测定飞行器与目标或预定轨道的相对位置关系,发出制导信息传递给飞行器控制系统,以控制飞行。分有线制导、无线电制导、雷达制导、红外制导、激光制导、音响制导、地磁制导、惯性制导和天文制导等。
制导技术主要包括自主制导、遥控制导和惯性制导等几种方式。
自主制导:
依赖于飞行器自身携带的传感器和计算机系统来确定飞行路径和目标位置。
遥控制导
则是由地面或其他飞行器上的操作员通过无线电或其他通信手段对飞行器进行控制。
惯性制导
则是利用飞行器内部的惯性测量单元来确定其位置和速度,不受外部环境影响。
在弹道导弹和火箭等领域,制导技术是确保其能够准确打击目标的关键。例如,朝鲜报道其在2024年成功进行了采用新制导导航技术的战术弹道导弹试射,这表明其弹道导弹技术取得了新的进展。
制导技术同样在航天领域发挥着重要作用。例如,中国的空间交会对接技术,天舟七号货运飞船就采用了新的3小时交会对接方案,将太空“快递”提升为速运”,这不仅提高了太空物资运输的效率,也进一步验证了中国航天技术的成熟度。
此外,制导技术也在民用领域得到广泛应用,如无人机送货、地图导航等。随着技术的不断发展和创新,制导技术的应用领域将会更加广泛。
标称轨道
是指设计时理论设定的、理想的航天器运行轨迹。
在标称轨道中,“标称”一词通常指设计时所确定的技术指标或者特性。因此,所谓的标称轨道就是指在计划和设计阶段为航天器预先设定的理想轨道。这条轨道是根据任务需求以及实际的发射能力和飞行控制能力综合计算得出的,旨在确保航天器能够顺利完成预定任务。
标称轨道的概念在实际操作中具有重要的指导意义。首先,它是飞行控制的基础。在航天器发射和入轨阶段,飞行控制系统会尽力将航天器引导至这条标称轨道上。接下的飞行过程中,任何偏离此轨道的波动都会被监测并需要通过中途修正来调整,以确保任务目标不受影响。
其次,标称轨道是任务规划和实施的重要参考。在进行空间任务设计时,科研人员会根据标称轨道来优化飞行路径、计算消耗的燃料量、安排与地面站的通信时间窗口等。这些计划的实施都依赖于一个精确设定的标称轨道,以期在保证任务成功的同时,最大限度地节约成本和资源。
由于太空环境复杂多变,如地球引力场的非均匀性、其他天体的引力作用、太阳风压力等因素都可能引起轨道的偏移,这就需要对航天器进行定期的轨道校正,使其尽可能贴近或回归到标称轨道上。这种校正通常通过轨道控制系统实施精确的推力调整来完成。
在实际应用中,例如静止轨道卫星的标称投影问题,就是一个具体案例。为了将卫星拍摄的影像数据有效地用于气象分析或其他地球观测任务,通常需要对这些数据进行地理校正,将其映射到相应的地理位置上。这一过程中,标称投影作为一种简化处理手段被广泛使用,它可以帮助将数据快速转换成易于分析和使用的格式。
此外,理解标称轨道的概念还有助于深入掌握轨道设计和轨道控制的技术细节。例如,在进行轨道优化时,可以采用标称轨道作为基础模型,通过最小化某些性能指标(如燃料消耗、飞行时间等)来寻求最优的轨道转移方案。
综上所述,标称轨道不仅是空间任务设计和实施的理论基准,也是确保航天器能够高效、准确执行任务的关键。通过对标称轨道的持续研究和应用,不仅可以提升航天任务的成功率,还可以在更大程度上实现空间资源的合理利用和探索。
火箭过载
指在火箭发射和飞行过程中,由于加速度的作用,使得火箭及其内部搭载的物体(如航天员、设备等)所承受的重力超过其正常重力状态的现象。这种现象可以用过载系数(通常用G表示)来衡量,它表示实际作用在物体上的重力与其正常重力状态下的重力之比。
以下是关于火箭过载的详细解释:
定义与原理:
-
火箭过载是由于火箭在飞行过程中不断加速,使得物体所承受的重力超过其正常重力状态。这种过载现象会对物体产生额外的压力和影响,特别是在航天员身上,会引起一系列生理和心理的变化。
-
过载系数(G)是一个重要的衡量指标,它表示实际作用在物体上的重力与其正常重力状态下的重力之比。例如,当过载系数为2G时,表示物体所承受的重力是其正常重力状态下的两倍。
过载值范围:
-
火箭正常发射时的最大过载值通常在4-5G之间。这意味着在火箭发射的峰值时刻,航天员和设备所承受的重力可能是其正常重力状态下的4-5倍。
-
在某些紧急情况下,如火箭发射过程中的异常或逃逸系统启动时,过载值可能会更高,甚至达到10-12G。这种过载已经接近人类能够承受的极限,并可能导致严重的伤害。
对航天员的影响:
-
火箭过载对航天员的生理和心理都会产生显著影响。在过载状态下,航天员的血液循环、呼吸和感知等系统都会发生变化,需要经历严格的训练和适应。
-
为了应对过载的影响,航天员会进行专门的地面训练,包括在专门的设备上模拟过载环境,以提高他们的适应能力和应对能力。
总结:
火箭过载是火箭发射和飞行过程中不可避免的现象,它会对火箭内部搭载的物体产生额外的压力和影响。过载系数是衡量过载程度的重要指标,而航天员则需要通过专门的训练和适应来应对过载带来的生理和心理影响。
制导
是一种导引和控制飞行器按一定规律飞向目标或预定轨道的技术和方法。以下是对制导技术的详细解释:
制导的基本过程
-
制导过程中,导引系统不断测定飞行器与目标或预定轨道的相对位置关系。
-
导引系统发出制导信息传递给飞行器控制系统,以控制飞行。
制导的分类
制导技术可以分为多种类型,包括但不限于以下几种:
-
有线制导:
-
是遥控制导的一种方式。
-
制导站不断跟踪目标,形成制导指令,并通过有线形式传输到制导武器上。
-
优点包括设备简单、精度高、抗干扰能力强;缺点有操作难度大、作用距离近。
-
适用于近程反坦克导弹等场景。
-
-
雷达制导:
-
分为雷达波束制导和雷达寻的制导。
-
利用雷达波束或目标反射的电磁波来跟踪目标,并控制导弹飞向目标。
-
-
红外制导:
-
利用目标发出的红外辐射来跟踪目标。
-
-
激光制导:
-
利用激光束照射目标,并接收从目标反射回来的激光信号来制导。
-
-
惯性制导:
-
利用陀螺仪高速旋转的稳定性建立惯性坐标系,测量导弹的速度和加速度等方位数据,反馈给控制系统来控制导弹的飞行。
-
主要适用于导弹飞行的初段和中段。
-
-
地形匹配制导:
-
利用地形高度随位置变化而变化的原理进行工作,对照导弹当前所在区域的地形与预定飞行航线的地形,以获得正确飞行路线。
-
主要适用于导弹飞行初始段、中段和末段。
-
-
自主制导:
-
是一种不依赖于外部信息的制导方式。
-
-
GPS制导:
-
利用全球定位系统(GPS)进行制导,提高打击精度。
-
制导技术的发展趋势
-
随着现代科技的快速发展,制导技术正向着更高的精度、更智能的识别功能、多攻击方式等方向发展。
-
主动制导技术、激光武器技术和智能化制导系统等是未来的发展方向。
总之,制导技术是军事、航空、航天等领域中不可或缺的一部分,随着科技的不断发展,制导技术也将不断得到提高和完善。
一句话理解制导与控制
制导
就是将飞行器看作质点,我们关心飞行器的位置。制导律设计产生到下一位置需要的迎角以及控制量信息。
控制
是将飞行器看作刚体,我们关心的是其姿态。控制律设计实现对飞机期望状态的快速准确响应。
在制导律设计的方法上与控制律的设计方法没有多大的区别。
法向过载由转弯引起,体现在航迹角的变化,主要考虑乘员的舒适性。
输出变量跟踪参考信号,称之为跟踪问题,参考信号为常值称为定点调节。
原文链接:https://blog.csdn.net/JISANSAN/article/details/106537865
摄动制导、捷联制导、迭代制导
一、摄动制导
定义:
摄动制导是以小偏差理论建立关机方程和导引方程对飞行器运动轨迹进行控制的制导方法。它又称线性制导或程序导引法。
只关注落点,不关注实际弹道,需要保证实际落点与标准弹道落点相同,即控制射程偏差和横程偏差为零。
早期阶段。
原理:
在摄动制导中,摄动是指航天器或导弹在绕某一天体运行时,因受其他天体或其他因素影响,其轨道产生的偏离。在导弹制导中,摄动指导弹质心运动参数因受多种因素影响,相对于标准弹道参数产生的小偏差。
指一个天体绕另一个天体按二体问题的规律运动时,因受别的天体的吸引或其他因素的影响,在轨道上产生的偏差,这些作用与中心体的引力相比是很小的,因此称为摄动。天体在摄动作用下,其:坐标、速度、轨道,要素都产生变化,这种变化成分称为摄动项。
特点:
-
小偏差前提:摄动制导的前提是必须保证实际弹道与标准弹道之间(特别是在主动段)的偏差很小。
-
制导方法:包括弹头落点偏差控制制导方法、速度关机的射程控制制导方法等。
-
误差:由于关机方程没有考虑射程展开二阶以上各项,制导方法误差较大。为提高精度,可采用二阶摄动制导。
摄动制导三大方程:
射程控制:关机方程设计-关机时间;横程控制:横向导引方程设计-偏航通道;弹道倾角控制:法向导引方程设计-俯仰通道。
二、捷联制导
“捷联(Strapdown,Strap:系,捆绑)”这一术语的英文原义就是“捆绑”的意思。将惯性敏感元件(陀螺和加速度计)直接“捆绑”在运载体的机体上,从而完成制导和导航。
基本组成:陀螺仪、加速度计。
陀螺仪用来测量运载平台的各种倾角,比如俯仰角、横滚角,也就是所谓的“姿态”。
加速度计用来测量平台的线性加速度(几个方向上)。
利用加速度计或者陀螺仪得出加速度和角速度,积分得到速度,位置和角度,由于积分误差随时间增加,一般都结合GPS进行修正,就是一般的惯导系统。
定义:
捷联制导是利用直接安装在弹体上的惯性测量装置进行的制导。它将陀螺仪和加速度计直接固联在载体上,利用惯性原理控制和导引导弹。
由于敏感元件直接装在运动物体上,振动较大,工作的环境条件较差并受其角运动的影响,必须通过计算机计算才能获得所需要的运动参数。这种系统对计算机的容量和运算速度要求较高,但整个系统的重量和尺寸较小。
捷联惯导系统,其敏感元件是直接装在飞行器上,因此捷联式仪表比起装在稳定平台上的仪表所遇到的动态环境恶劣得多。通过对仪表和系统误差的补偿和修正,是可以将捷联系统精度提高到平台系统的水平。
分类:
-
位置捷联式惯性制导:通过位置陀螺仪、加速度计等设备测量角速度、角位移和线加速度,送入弹载计算机进行计算,形成导引信号和关机指令。
-
速率捷联式惯性制导:通过速率陀螺仪测量导弹角速度矢量(瞬时平均角速度),与加速度计测得的加速度矢量结合,由弹载计算机进行导航计算,得到速度和位置导航参数。
特点:
-
直接测量:直接通过弹体上的设备测量和计算,无需外部信号。
-
应用:多用于姿态角变化较大和机动飞行的中近程导弹的制导。
三、迭代制导
定义:
是用迭代的方法选择制导规律控制导弹和运载火箭关机时间的制导方法。它基于标准弹道关机点的坐标和速度矢量作为关机条件。
一种自适应制导技术。
特别适合于需要动态优化飞行轨迹的应用场景。与摄动制导不同,迭代制导不是基于预设弹道,而是在飞行过程中不断根据当前的飞行状态(如速度、位置、外部环境等)重新计算最优的飞行轨迹和制导指令,以实现更精确的轨迹控制和性能优化。迭代制导能够在飞行中实时调整目标入轨点,提高轨道插入精度,尤其是在执行复杂轨道转移或需要高精度轨道注入的任务中更为有效。
原理:
以标准弹道关机点的坐标和速度矢量作为关机条件,用迭代的方法选择制导规律,控制导弹和运载火箭的关机时间。
-
实时评估: 在制导过程中,系统持续收集关于飞行器当前状态(如位置、速度、姿态)以及外界环境参数(如风速、重力场变化)的信息。
-
目标与约束: 系统根据任务目标(如打击点、轨道插入点)和约束条件(如燃料限制、飞行时间、避障需求)定义优化问题。
-
迭代计算: 利用优化算法(如梯度下降、遗传算法、粒子群优化等),在每次迭代中根据最新的状态信息和目标函数,计算出新的最优或更优的飞行轨迹(不需要对曲率和再入段空气动力的影响进行修正,直接对导弹和运载火箭的推力矢量及关机时间进行控制)。
-
指令生成与执行: 根据计算出的最佳轨迹,生成制导指令,调整飞行器的飞行路径和姿态,然后重复这一过程,直至达到目标或满足终止条件。
控制过程:
-
迭代制导的整个控制工作及其程序由两部分组成:剩余飞行时间的估计和迭代计算,以及控制姿态角的计算。
-
通过迭代计算得到的关机方程,控制运载火箭与导弹的射程,确保实际弹道与标准弹道的关机点坐标矢量和速度矢量相等,从而避免射程偏差。
特点:
-
高精度:迭代制导具有较高的制导精度(精度比摄动制导要高)。
-
自适应能力强:较好地解决了远程导弹和运载火箭低推力、长时间飞行的制导问题。
-
计算公式简单:计算量少,可自动起步,易于弹上实现。
-
还具有很强的抗干扰能力,能够在敌方干扰和复杂电磁环境下保持稳定的导航和制导性能。
综上所述,摄动制导、捷联制导和迭代制导各有其特点和应用场景,为现代飞行器提供了多样化的制导选择。
捷联惯导系统(SINS)
是在平台式惯导系统之上发展来的,它是一种无框架系统,是由三个速率陀螺、三个线加速度计和微型计算机组成。捷联惯导系统的陀螺和加速度计直接固连在载体上作为测量标准,它跟平台式惯导系统区别就在于不再由机电平台,而是在计算机内建立一个数学平台,其飞行器姿态数据通过计算机得到。
导航,制导,姿控的关系
导航、制导和姿态控制(姿控)是航天器、飞行器以及其他移动平台控制领域的三个核心组成部分,它们相互配合,确保平台能够准确、安全地完成既定任务。下面是它们各自的作用及相互之间的关系:
导航:
navigation,导航主要是确定平台当前的位置、速度以及姿态等状态信息,并预测或规划其后续的运动路径。它涉及使用传感器(如GPS、惯性导航系统、星敏感器等)和算法来不断地估计平台相对于地球或其他参考坐标系的位置。导航系统为制导和姿态控制提供必要的信息,告诉系统“我在哪里,飞得多快?方位?”。
一般用发射惯性系。
眼睛。
制导:
guidance,制导负责根据目标位置或预定轨道(统称:标称轨道),计算出从当前位置到期望位置的最优或所需路径,并生成控制指令以引导平台沿此路径移动。制导系统利用导航提供的位置和速度信息,通过比较实际路径与理想路径的差异,计算出需要对飞行器进行的纠正措施。简而言之,制导回答了“我应该如何去那里”的问题。
姿态控制(姿控):
control system,姿态控制负责维持或改变平台的三维方向(俯仰、偏航、滚转),确保平台按照制导指令准确指向或保持期望的姿态。这包括使用执行机构(如喷气发动机、舵面、反应轮等)以及反馈控制算法来实时调整平台的姿态。姿态控制确保平台能够稳定飞行或对制导指令做出快速响应,其核心在于“我该如何正确地指向”。
依据制导指令,摇摆尾部的矢量发动机,实现箭体姿态的改变。火箭的动力箭体轴向上,改变箭体姿态,也就改变了箭体的过载方向,质心运动的路径会改变,也就改变整个飞行轨迹。
关系:
三者之间的关系紧密相连:导航提供制导所需的位置和速度信息,制导依据这些信息计算出飞行路径并发出控制指令,而姿态控制则根据这些指令调整平台的姿态,确保平台能够精确地沿着规划的路径前进。在实际应用中,导航、制导与控制(NGC)系统通常作为一个整体协同工作,共同保障飞行任务的成功完成。
制导(Guidance):即轨迹规划(Trajectory Planning),从起始位置/状态到目标位置/状态全程的位移、速度、加速度规划;
导航(Navigation):指的是 "the state at a given time",即某一时刻运动体处的位置/状态;
控制(Control):在构型空间(Configuration Space)依据具体的控制律(Control Law)控制执行器,达到制导要求的状态。
用个简化的例子说,比如从香港到旧金山的航班,制导相当于全程的航行规划,导航告诉你当前飞机飞到哪个位置了,控制是实时的发动机及机翼动作。
链接:https://www.zhihu.com/question/39452981/answer/157315028
火箭为什么要程序转弯
火箭进行程序转弯主要是为了调整飞行轨迹,确保其能够准确地达到预定的目标位置或轨道。这个过程涉及到几个重要的因素:
-
轨道机动:火箭在飞行过程中可能需要改变其速度和方向,以进入或维持预期的轨道。例如,在地球轨道任务中,火箭可能需要进行程序转弯来调整其轨道倾角,以便与目标卫星或空间站的轨道对齐。
-
飞行路径优化:通过程序转弯,火箭可以避开不必要的空气阻力,减少燃料消耗,提高飞行效率。在大气层外飞行时,这一因素尤为重要。
-
任务需求:某些任务可能要求火箭在特定时间或位置进行动作,比如对地球某一特定区域的观测,或是为了与另一飞行器对接。
-
稳定性和控制:火箭在飞行中需要保持稳定,程序转弯可以帮助调整其姿态,保证飞行的稳定性和可控性。
-
地球自转影响:地球自转会产生科里奥利力,对火箭的轨迹产生影响。火箭的程序转弯可以用来补偿这种效应,确保飞行路径的准确性。
-
环境适应性:火箭在飞行中可能会遇到各种不可预测的环境因素,如风速和风向的变化,程序转弯可以帮助火箭适应这些变化。
在执行程序转弯时,火箭的导航和控制系统会计算最合适的转弯时机、角度和速度变化,以确保任务的成功。这些计算会综合考虑火箭的性能限制、飞行任务需求以及外部环境条件。
大推力沉底
是火箭发射技术中的一种推进剂管理方法,它主要用于运载火箭上面级的微重力环境下。这种方法通过利用火箭发动机产生的推力来控制推进剂在燃料箱中的位置,从而确保推进剂能够有效地供给发动机,维持火箭的正常运行。下面将详细分析大推力沉底的技术背景、实施方式、应用范围以及它在现代航天发射任务中的重要性:
技术背景与发展
-
技术需求:随着航天技术的发展,对火箭发射的精确度和可靠性要求越来越高。特别是在微重力环境下,推进剂的管理成为了一个关键技术难题。
-
技术进步:我国在大推力氢氧发动机技术上取得显著进展,如500吨级垂直双工位液体火箭发动机试验台的成功建设和应用,为大推力沉底技术的实施提供了坚实的基础。
大推力沉底的实施方式
-
持续正推沉底:通过持续施加小量推力,使推进剂在燃料箱中保持向底部集中的状态,避免推进剂在微重力环境下随意漂浮,影响发动机的燃料供应。
-
正推重定位沉底:在需要进行轨道调整或姿态控制时,通过施加较大的推力,实现推进剂的快速重定位,确保发动机在关键时刻能够获得足够的推进剂。
-
辅助发动机:使用压缩气罐、固体火箭等辅助发动机提供加速度,使得燃料和氧化剂在加速度作用下沉积到容器底部。
-
柔性燃料箱:采用柔性设计的燃料箱,通过改变其形状和结构,使得燃料在失重条件下能够自然沉积到发动机附近。
-
磁液技术(未广泛应用):利用磁场对液体燃料进行操控,使其在磁场作用下沉积到特定位置。
关键技术参数:
贮箱容积:大推力火箭的贮箱容积一般多达100升以上,需要确保在这些大容量容器中燃料能够均匀分布和有效利用。
燃料和氧化剂比例:在双组元液态推进剂系统中,燃料和氧化剂按一定比例混合燃烧产生推力。确保这两种组分的均匀混合和供应对于大推力火箭至关重要。
涡轮泵效率:大部分火箭采用涡轮泵来吸取和输送燃料。涡轮泵的效率直接影响到燃料的供应速度和稳定性。
应用范围与实例
-
圆轨道卫星发射:对于发射圆轨道卫星的任务,大推力沉底技术能够有效提升火箭近地点点火和轨道注入的准确性,从而提高卫星进入预定轨道的成功率。
-
重型运载火箭研制:在重型运载火箭的研制中,大推力沉底技术的应用能够保障火箭在多阶段飞行过程中的稳定性和可靠性,尤其是在进行重大工程任务时。
技术挑战与对策
技术挑战:大推力沉底技术在实施过程中需要解决推力控制精度、推进剂管理装置的设计优化等问题。
对策建议:加强推进剂管理装置的研发,利用数字化、智能化技术提高推力控制的精确度,同时加强对推进剂流动特性的研究,优化推进剂管理系统的整体设计。
未来展望
技术趋势:随着航天技术的不断进步,大推力沉底技术将更加广泛应用于未来的航天发射任务中,尤其是对于深空探测和载人航天等领域。
发展方向:未来的研究将更加注重提升推进剂管理的效率和可靠性,探索更加经济、环保的推进剂管理方案,以适应日益复杂的航天任务需求。
总之,大推力沉底技术作为火箭发射领域的一项重要技术,其发展和应用对于提升火箭发射的成功率和可靠性具有重要意义。通过对该技术的深入研究和不断创新,可以为我国乃至全球的航天发射任务提供更加坚实的技术支持,推动人类探索宇宙的步伐不断向前。
运动学与动力学
运动学(Kinematics)
是从几何的角度(指不涉及物体本身的物理性质和加在物体上的力) 描述和研究物体位置随时间的变化规律的力学分支。以研究质点和刚体这两个简化模型的运动为基础,并进一步研究变形体(弹性体、流体等) 的运动。
点的运动学研究点的运动方程、轨迹、位移、速度、加速度等运动特征,这些都随所选参考系的不同而异。刚体运动按运动的特性又可分为平动、绕定轴转动、平面平行运动、绕定点转动和一般运动。
运动学为动力学、机械学提供理论基础,也是自然科学和工程技术必需的基础知识。运动学是理论力学的一个分支学科,它是运用几何学的方法来研究物体的运动。
简单的讲,运动学研究的是位移、速度和加速度(质点),角度、角速度和角加速度(刚体)之间的关系。
动力学(Dynamics)
是理论力学的一个分支学科,它主要研究作用于物体的力与物体运动的关系。动力学的研究对象是运动速度远小于光速的宏观物体。
质点动力学有两类基本问题:一是已知质点的运动,求作用于质点上的力。二是已知作用于质点上的力,求质点的运动。
求解第一类问题时只要对质点的运动方程取二阶导数,得到质点的加速度,代入牛顿第二定律,即可求得力;求解第二类问题时需要求解质点运动微分方程或求积分。所谓质点运动微分方程就是把运动第二定律写为包含质点的坐标对时间的导数的方程。
简单的讲,动力学研究的是力/力矩与运动的关系。两者通过“牛顿第二定理”(f=ma)联系起来。
原文链接:https://blog.csdn.net/weixin_41235419/article/details/113760075
火箭参数相关知识
1 坐标系右手定则:
伸开手掌,大拇指指向X轴,四指指向Y轴,四指弯曲90°后所指向的方向为Z轴。X 、Y、Z并没有约定产生的顺序,所以实际应用你也可能知道X 轴、Z轴来确定Y轴方向。
2 火箭转序:
使用的321转序,即箭体坐标系的Z->Y->X也就是俯仰、偏航、滚动转序
3 太阳同步轨道:
通俗点就是太阳光线和卫星轨道面的夹角始终为固定角度的轨道,运算上就是使卫星由于地球非圆形导致的卫星轨道面自转的角速度等于地球绕太阳公转的角速度,从而使得太阳光线和卫星轨道面的夹角始终保持一致。可见个人文档《太阳同步轨道学习笔记》。
4 火箭发射相关的坐标系:
3.1 发射系(发射坐标系):
O点为发射点,Y轴为发射点铅垂线(重力方向)的反方向为正Y,X轴为发射瞄准方向(是发射的目标方向所在面且与Y轴垂直的方向),Z轴与X Y遵循右手定则。其中,X轴与正北向的夹角叫做方位角(方位角是以发射时刻判定的未考虑地球自转的方位)。(由于地球不是正圆,所以Y轴的铅垂线方向并不指向地心)。
火箭垂直发射,发射系的X轴和箭体的X轴(箭体坐标系)相差90°,并不重合。
起飞前。
3.2 发惯系(发射惯性系):
以火箭发射点为原点,在起飞瞬间与发射坐标系各轴重合,起飞后,惯性坐标系的各轴方向在惯性空间保持不变。(注意:发惯系只有在起飞的时刻才建立,起飞之前的箭体姿态信息都是相对于发射系的,所以会看到射前针对发射系做的比如综测项目和飞控起飞前惯组陀螺输出数据要刨除地速,而起飞后由于惯组自身为惯性器件,不在地球上不存在地速(相对发惯系),姿态相对发惯系而言的,如果姿态角保持不变,理论上惯组输出角速度应该为0)。
起飞后。
3.3 惯组测量坐标系:
惯组自身输出的测量数据对应的坐标系,我们在惯组安装时,一般把惯组和箭体系方向保持一致(惯组测量坐标系和箭体坐标系位置保持一致,其也是非惯性坐标系,所以实际各轴输出是转换后的),这样就少一个坐标系的转换,但是惯组测量坐标系的原点是安装位置,而箭体系原点是质心。这样我们姿控控制时就以惯组测量坐标系来进行实际的控制(实际来说应该是箭体系)。
3.4 箭体系(箭体坐标系,又称本体坐标系):
我们飞控使用的象限轴、和姿态控制的俯仰、偏航、滚动控制都是针对箭体系的,姿控的控制也都是在箭体系下来控制的。(火箭说的象限实际上是象限轴,而不是数学学的一个90°区域)。
象限线:是指箭体系OYZ平面内,Y轴正向为III象限轴(-Y为I象限轴),Z轴正向为IV象限(-Z为II象限轴)。
箭体惯组安装位置为惯组测量坐标系的原点(诸元中高程说的是惯组安装位置的高度),X轴为火箭外壳对称轴,指向箭体的头部,Y轴是与X轴对称且在发射瞬间与发射系xoy平面内的轴(如果地面绝对水平),Z轴由右手坐标系确定。
(注意:书本定义箭体坐标系坐标原点是火箭的质心,我们火箭实际使用时并不是以质心为坐标原点,而是以惯组所在安装位置为坐标原点,质心在运动飞行过程中会伴随质量和各级分离逐渐变化,而质心的变化在发射前已经估算出来了并且在飞行过程中对数据进行了对应比例积分补偿,也就是说我们实际用的箭体坐标系和书本定义的箭体坐标系原点是有差异的)。
3.5 地固系(又称地球固联坐标系):
坐标系的原点Oe在地球质心,OeZe指向地球自转角速度矢量方向(即北极),垂直于赤道平面;OeXe在赤道平面内指向格林尼治子午线;OeYe轴和OeZe、OeXe轴构成右手坐标系。根据参考历元与椭球模型不同,应用不同标准给定的数据,如WGS84,CGCS2000等。我们的GNSS数据数据就是以地固系进行的数据输出。
3.6惯性坐标系:
判断伺服各方向分力?注意力是空间三个轴方向分力
5 加速度计原理-视加速度:
加速度计的敏感原理是外部作用力使得加速度计中的敏感器件产生形变对应输出数据,所以这里的重点是注意敏感的受外力。加速度计测得的数据并不包含重力加速度,比如空中自由落体的物体,加速度计输出为0,因为没有受到外力。而在桌面放着测试加速度计输出实际是外力(支持力)的作用值。
故加速度计输出的加速度值称为视加速度(所谓视加速度就是不包含重力加速度以外的加速度)。加速度计是用来测量视加速度的工具。
既然加速度计得到的是视加速度,所以火箭真正飞行的加速度就需要加速度计的视加速度加上所在位置的等效重力加速度得到实际的加速度值。
制导是针对质点运行的控制,关心的是速度和位置(加速度计),质心运动的控制是靠改变火箭俯仰、偏航、滚动姿态角实现的。
姿控针对的是姿态俯仰偏航滚动的控制,关心的是角速度(速率陀螺为姿态敏感型器件)。
姿控对姿态的控制为超前控制(但是是在矫正网络中实现,综测不涉及)。
制导的程序角、姿态角的参考坐标系是发惯系(起飞前没有建立发惯系也可能是发射系),具体而言:程序角表示的是发惯系下目标位置相对坐标原点的角度偏差量,姿态角表示的是发惯系下当前位置相对坐标原点的角度偏差量。
姿控控制使用的是箭体系下的姿态角偏差,具体而言,姿态角偏差表示的是在箭体系下当前位置和目标位置之间的角度偏差。
6 姿态角偏差:
火箭的姿态角随着飞行弹道的变化是实现设计好的,称作程序角。然而,飞行过程中的一些随机因素,比如风干扰、结构干扰等会使得姿态角偏离预定值,将实际的飞行姿态角与程序角(理论的姿态角)相减得到的值即称为姿态角偏差,但是这里的姿态角偏差还是发惯系下的姿态角偏差,而姿控控制是在箭体系下,所以需要转换到箭体系下得到箭体系下的姿态角偏差,这就是所谓的姿态偏差解耦。
7 脱插脱拔:
脱插插头和脱拔插头都是箭上使用地供电源供电时的连接插头,脱拔插头是安装在火箭尾部与地面发射控制系统连接的插头,该插头靠火箭起飞时拔动其芯杆而脱落,所以称为脱拔插头。
脱落插头是通过电控断开。
8 初始对准和光瞄(光学瞄准)的关系:
从功能上讲,初始对准和光学瞄准都是用来测量惯性测量坐标系(因为惯性测量坐标系和箭体坐标系一般认为是一致的,所以也可以认为是箭体坐标系)和发射系(就是选取参考系,也可能是地固系)的坐标系夹角转换关系,两者功能是一样的,使得惯性测量坐标系与发射坐标系重合。
从精度上讲,光瞄的精度更高,因为选用了更高精度的陀螺来标定,而初始对准使用的是火箭自身的惯组用来标定(初始对准不借助外部设备,使用惯组数据测量,光瞄:使用激光进行瞄准)。从流程上讲,软件总检查都会有初始对准的测量,而光瞄只是在真正火箭(真正起竖)发射前做一次。从型号上讲,Y1、Y2做初始对准数据但是实际并没有使用对应的结果,因为有光瞄,而Y3取消了光瞄,因此使用初始对准数据作为输入。
光瞄从工作流程上讲大致:报货标定4、粗瞄、精瞄三步。
9 姿控系统极性检查:
(姿控系统极性检查属于射前项目,发惯系未建立,所以姿控的控制是相对于发射系而言的,这就是为什么要刨除地球自转角速度分量的原因)
9.1 初始化四元数、姿态角、程序角
依据任务书要求配置初始四元数、姿态角、程序角(程序角初值为0,即不存在角偏差);(软件其实没必要四元数由姿态转换矩阵进行反推,直接给初值就行)
扩展:由四元数计算出的姿态转换矩阵是通用公式,是唯一的,而由欧拉角不同的转序(3次转动)算出的与姿态角的关系是不同的,不同的转序对应姿态角不同。比如321转序下某个俯仰角90°,而312转序俯仰角可能是0°。
9.2 地球自转角速度与陀螺实际有效输出分量计算
由于陀螺在箭体系下的输出是包含地球自转角速度的,因此先计算出陀螺在箭体系下的各轴地球自转角速度分量。地球自转角速度先分解到发射系下比较容易,所以先将地球自转角速度在发射系下的各轴分量进行分解。其分解到三个轴(X Y Z)的方向余弦矩阵如下:其中 代表射向(发射方位角), 代表发射点纬度。
由上述方向余弦矩阵乘以地球自转角速度得到发射系下地球各轴自转分量。
接下来,发射系下地球自转角速度分量乘以发射系到箭体系的姿态转换矩阵 ,即得到箭体系下的地球自转角速度分量。
9.3 进入周期性运算
下属1)-6)属于导航制导解算,7)-9)属于姿控控制
1、角度增量和视速度增量
周期性采集惯组(或陀螺数据),获得当前周期的陀螺输出的各轴角度增量和视速度增量(箭体系下)。
当前周期箭体系下火箭的角度增量按照下属公式获得,其中T1为控制周期。
2、计算角速度
由于角增量/周期并不是准确的代表本周期起始时刻的角速度,这里计算角速度公式用的是(3.0Cur-Lst)/(2.0T1),其中Cur为当前周期的角增量,Lst为上一周期的角增量,T1为控制周期。(这部分任务书也没有体现,属于没有出处),具体机理如下:认为角增量属于线性曲线,如下图。
当周期收到的惯组数据解算后得到的角增量实际是上一个5ms的增量,Cur/T得到速度均值(也就是上一个周期中间时刻的角速度),Lst/T得到速度均值(也就是上上一个周期中间时刻的角速度),由线性比例得到点3也就是当前运行周期起始点的速度值:
Cur/T +( (Cur/T- Lst/T)/T)(T/2) = (3.0Cur-Lst)/(2.0*T1)。
3、四元数
有角增量(在发射系下)得到对应的四元数。
4、姿态转换矩阵
由四元数得到对应的姿态转换矩阵
5、发射系下的姿态角
由姿态转换矩阵得到发射系的姿态角(当前姿态相对于发射系原点)
6、箭体系下的姿态角偏差
见前面关于姿态角偏差的说明,首先得到的是发射系系下姿态角和程序角的姿态角偏差。然后通过解耦矩阵得到姿控要使用的箭体系下的姿态角偏差(箭体系下前后的偏差量)
其中:
分别为制导给出的俯仰、偏航、滚动程序角;
为解耦后箭体坐标系下的姿态角偏差。
7、伺服控制:
分别为摆动喷管比例、微分增益系数;Dtest为进行转台滤波综测专门加的滤波系数。(实际的微分就是求导)。得到姿态控制摆角指令
sat为矢量限幅,得到安全的限幅输出。 为总摆角限幅值;
分配到伺服A B作动器上为:
8、俯仰偏航RCS控制:
分别为末修RCS比例、微分增益系数;
分别为俯仰、偏航通道RCS控制反馈;
RCS控制借助斯密特触发器进行解算具体结果,得到 分别为俯仰、偏航通道RCS控制指令。
译码算法key=( +1)*9+( +1)*3+( +1)*1,得到键值。然后由键值得到对应的译码表控制指令。
9、滚控控制:
一级滚控和RCS姿控喷管滚控使用的算法相同
为滚动通道RCS控制反馈, 分别为滚动控制比例、微分增益系数
滚控均借助斯密特触发器进行解算具体结果,得到 为滚动通道RCS控制指令, 分别为滚动控制开、关门限。
根据滚动RCS控制指令 ,查表给出滚控装置各个电磁阀的动作指令。
原文链接:https://blog.csdn.net/u011116085/article/details/130067393
轨道相关概念
GEO(Geosynchronous Eearth Orbit):地球静止轨道卫星
IGSO(Inclined Geosynchronous Satellite Orbit):倾斜轨道同步卫星
MEO(Medium Earth Orbit):中高轨卫星
LEO(Low Earth Orbit):低轨卫星
卫星轨道分类,常用轨道特点
根据运行高度:
低轨(高度小于1000公里)、
中高轨(高度介于1000-20000公里)、
高轨(高度大于20000公里);
根据运行轨迹偏心率:
圆轨(偏心率为0)、
近圆轨(偏心率小于0.1)、
椭圆轨(偏心率介于0.1-1);
根据倾角大小:
赤道轨道(倾角为0,轨道平面始终与赤道平面重合)、
极地轨道(倾角为90,轨道平面与赤道平面垂直,观察地球最好)、
倾斜轨道(顺行:倾角0-90,自西向东顺着地球自转、逆行:倾角90-180,自东向西逆着地球自转);
其他常用轨道:
地球同步轨道:周期与地球自转周期相同,运行方向与自转方向一致。
太阳同步轨道:运行方向与地球公转方向一致,角速度等于公转角速度。
回归轨道:星下点轨迹周期性出现重叠现象。
原文链接:https://blog.csdn.net/weixin_43192020/article/details/132476364
SAR卫星
合成孔径雷达卫星。它的成像机理与传统光学遥感不同:它们通过对目标物发射穿透性较强的电磁波,并快
同构、异构
同构与异构的基本理解
异构:
多个不同类型的物体参与完成某一件事情,异构系统的各个组成部分具有自身的自治性,实现数据共享的前提下,仍保留有自己的应用特性,完整特性,安全特性。
同构:
多个相同类型的物体参与完成某一件事情。
数据源中的同构与异构
同构数据源:
如果你需要讨论一群鸟类或者一批飞机,那么这样的数据是同构的,比如包含鸟类的数组 [Bird] 和包含飞机的数组[Airplane]。
异构数据源:
有时候你想探讨的是这些空中家伙的共性 “飞翔”,因此你的数据源可能同时包含 Bird和 Airplane,这样的数据源叫做异构数据。广义上讲是指数据结构、存取方式、形式不一样的多个数据源。如:在一个系统中,同时包含由关系型数据库Oracle/SQL SERVER/MYSQL、EXCEL文件或txt文本数据、XML数据等不同的数据源的一个整体,就是一个异构的数据源。在信息化建设过程中,由于各种系统建设的阶段性、技术性以及经济、人为因素的影响,导致用户积累了大量不同存储方式的数据,从简单的文件数据到复杂的网络数据库,它们构成了异构数据源。
分布式数据库中的同构和异构
同构分布式数据库:
所有站点都使用共同的数据库管理系统软件,它们彼此了解,合作处理用户的需求。本地的站点放弃了作为其自治权一部分的更改模式或者数据库管理系统软件的权利。
异构分布式数据库:
不同的站点具有不同的模式和不同的数据库管理系统软件。站点之间并不了解,在事务处理过程中,它们仅仅为合作提供有限的功能。模式的差别经常是查询处理中的主要问题,软件的差别成为访问多站点事务处理的障碍。
原文链接:https://blog.csdn.net/qq_41018861/article/details/117984800
多源数据融合
是指从不同来源获取的多种数据进行整合和分析的过程。这些数据可以来自传感器、社交媒体、互联网、开放数据等多个渠道。通过将这些数据进行融合,可以获得更全面、准确的信息,为人工智能系统提供更丰富的输入。
它可以将来自不同数据源的信息进行整合和利用,从而提高数据分析和决策的准确性和效率。
多源数据融合的方法
(1)特征级融合:将不同数据源的特征进行整合,构建更具代表性的特征集。例如,在图像识别任务中,可以将来自不同传感器的图像特征进行融合,提高分类准确率。
(2)决策级融合:将不同数据源的决策结果进行整合,得出最终的决策结果。例如,在医学诊断中,可以将来自不同医疗设备的诊断结果进行融合,提高准确性和可靠性。
(3)模型级融合:将不同数据源训练得到的模型进行整合,构建更强大的综合模型。例如,在自然语言处理任务中,可以将基于语法规则的模型和基于统计的模型进行融合,提高语义理解的能力。
平均融合:将多个模型的预测结果进行平均,得到一个平均预测结果。例如,可以将多个神经网络模型的输出进行平均,用于图像识别任务。
投票融合:将多个模型的预测结果进行投票,得到一个最终预测结果。例如,可以将多个分类器的输出进行投票,用于文本分类任务。
集成学习:通过训练多个模型,并将它们进行集成,得到一个更强大的模型。常见的集成学习方法包括Bagging、Boosting和Stacking等。
实践案例:多源数据融合的方法与实践在许多领域都有广泛的应用。例如,在金融领域,我们可以将来自不同金融市场的数据进行融合,以预测股票价格的走势。在医疗领域,我们可以将来自不同医疗设备的数据进行融合,以辅助医生进行疾病诊断和治疗。在智能交通领域,我们可以将来自不同传感器的数据进行融合,以实现更精确的交通流量预测和路况监测。
原文链接:https://blog.csdn.net/xiehewe/article/details/134436249
多源通讯融合
是一种将不同来源的通讯信号或数据合并在一起的技术手段,以提高通信系统的性能和效率。这种融合技术可以应用于多个领域,例如移动通信、智能交通、地下工程、数字孪生等。
在移动通信领域,多源通讯融合可以通过结合多种定位技术(如GPS、GLONASS、Galileo等)和传感器数据(如加速度计、陀螺仪、视觉摄像头等),为用户提供更加精确和可靠的定位服务。例如,在中国,北斗卫星导航系统已与地面传感器和其他定位技术相融合,成功地应用于地铁隧道工程和盾构机导航中,大幅提高了地下工程的精确度和效率。
在智能交通系统中,多源通讯融合技术可以整合来自车辆、交通信号、路侧单元等多种数据源的信息,为自动驾驶车辆和智能交通管理系统提供全面、实时的交通信息。这不仅可以提高交通安全,还能优化交通流量,减少拥堵。
数字孪生技术也广泛应用多源通讯融合。通过整合来自不同传感器和系统的数据,数字孪生可以创建一个实时更新的虚拟副本,模拟真实世界的设备和系统。这为企业和组织提供了更好的决策支持和预测分析能力。
总的来说,多源通讯融合技术正在推动各种领域的创新和进步,为人们的生活带来更多便利和效率。
多源通讯融合
是指在通信系统中,将来自不同源头、不同类型、不同格式的通信数据和信息进行集成、处理和分析,以获得更全面、准确和及时的信息感知能力的过程。这一技术在多个领域具有广泛的应用,特别是在军事侦察、智能监控、物联网(IoT)、灾害应急响应、商业智能分析等领域。以下是多源通讯融合的关键要素和优势:
关键要素:
-
数据采集:从多个传感器、通信网络、卫星、社交媒体等多种渠道收集数据,这些数据可以是图像、视频、文本、音频或传感器读数等形式。
-
数据预处理:包括数据清洗、格式转换、标准化和数据质量评估,确保不同来源的数据可以兼容并进行有效整合。
-
信息融合:采用算法和模型对多源数据进行融合处理,包括低层数据融合(如像素级、特征级融合)、中层数据关联(如时空关联、上下文关联)和高层语义融合(如决策级融合),以提取更有价值的信息。
-
智能分析:运用机器学习、人工智能算法对融合后的数据进行深入分析,识别模式、预测趋势、发现异常等。
-
决策支持:将分析结果转化为直观易懂的形式,如图表、报告或预警,为决策者提供及时准确的情报支持。
优势:
-
提高准确性:通过综合不同来源的信息,减少单一数据源的误差和不确定性,提高信息的可靠性和准确性。
-
增强态势感知:为用户提供全方位、多维度的视角,更全面地理解复杂动态环境,如战场环境、市场动态、社会事件等。
-
加快反应速度:实时融合处理数据,缩短从数据采集到决策制定的周期,提升应对突发事件的快速响应能力。
-
资源优化:通过整合多源信息,避免重复采集和处理数据,提高系统资源利用效率。
-
适应复杂环境:在信号弱、环境多变的情况下,多源融合能有效提升信息获取的鲁棒性和抗干扰能力。
综上所述,多源通讯融合是现代信息处理和决策支持系统中的关键技术,它通过集成和优化不同来源的信息,为用户提供更为强大、灵活和智能的信息服务。
事件触发
事件触发(Event-Triggered)是一种编程和系统设计模式,其中动作或任务的执行不是基于预设的时间表或循环,而是由特定事件的发生来驱动。这种模式广泛应用于各种软件开发、自动化控制、互联网服务以及物联网(IoT)系统中。其核心思想是提高系统的响应性和效率,减少不必要的资源消耗。以下是事件触发机制的一些关键特点和应用场景:
关键特点:
-
反应式编程:事件触发机制是反应式编程范式的核心组成部分,系统对环境变化(即事件)作出响应,而非主动轮询或定期检查状态。
-
高效资源利用:只有当特定事件发生时才执行相应的处理逻辑,减少了空闲等待和无用计算,提升了系统效率和性能。
-
松耦合:事件发布者和订阅者之间通过事件总线或消息队列等机制解耦,使得系统各部分可以独立开发和扩展,增强了系统的灵活性和可维护性。
-
异步处理:事件触发通常伴随着异步处理机制,允许系统在处理一个事件的同时,可以继续监听和响应其他事件,提高了系统的并发处理能力。
应用场景:
-
Web应用和用户界面:按钮点击、页面加载、表单提交等用户交互事件触发相应的后台处理逻辑或前端动态展示更新。
-
物联网系统:传感器检测到温度超过阈值、设备状态改变等事件,触发报警通知、自动控制或其他响应动作。
-
消息队列和事件驱动架构:如Apache Kafka、RabbitMQ等,用于解耦系统组件,通过消息事件在不同服务间传递数据和触发处理流程。
-
云服务和微服务:如AWS Lambda、Azure Functions等无服务器计算平台,根据事件(如文件上传、数据库更改)自动执行函数或服务。
-
自动化运维和监控系统:系统监控到CPU负载过高、服务故障等事件时,自动执行扩容、重启服务或发送警报。
通过事件触发机制,系统能够更加灵活和高效地响应外部变化和内部状态变动,是现代软件系统设计中不可或缺的一部分。
通用定时任务调度量
统管,定时中断整个系统的节拍,调度、触发不同周期的任务。注册定时、周期时间、一次运行的,定时+中断,定时到了发送信号量或者回调函数。
天基
航天中的“天基”概念指的是将设备、系统或武器部署在地球大气层以外的太空环境中,特别是指安装在卫星、空间站或其他航天器上的设施。这些天基系统利用其在太空中的独特位置,执行诸如地球观测、通信中继、导航辅助、环境监测、军事侦察与作战等多种任务。与地面(陆基)和海洋(海基)系统相比,天基系统的优势在于覆盖范围广、受地理限制小、能够实现全球性的即时服务等。
天基终端
指的是部署在太空中的卫星或其他航天器上的专用设备,它们作为天基系统的一部分,负责在太空与地面站、其他航天器或用户终端之间进行信息交换和通信(天基通信终端:用于卫星通信系统,提供语音、数据和视频传输服务,支持远程区域的互联网接入、海事通信、航空通信等。这些终端可以是转发器,负责接收和转发地面信号,或者是直接为用户提供服务的用户终端设备)(为卫星接入天基网络而设计的,能够实现卫星与地面或其他卫星之间的通信)。这些终端设计用于极端的太空环境,具备高度可靠性和适应性,支持多种应用。
并发、并发、串行、同步、异步
并发
表示多个任务在同一时间段内处理,微观上不是同时发生,而宏观上是同时发生。在单核下,可以利用时间片轮转来模拟并发(不是真正意义上同时执行多项任务),cpu给不同的任务分配时间片,cpu在时间片内的时间里处理任务,结束后再处理下一个任务。
并行
多个任务在同一时间点上处理,在微观和宏观上都是同时发生,它关注的是执行效率和性能。一定需要硬件层面的支持,只有多核才能实现并行。
串行
任务按线性顺序执行,上一任务完成才能执行下一个。
同步
任务调用后必须等待调用返回后,才能继续执行之后的内容。可以通过锁、条件变量、信号量等来实现,以限制对共享资源的访问和确保任务的顺序性。进程之间的关系不是相互排斥临界资源的关系,而是相互依赖的关系。进一步的说明:就是前一个进程的输出作为后一个进程的输入,当第一个进程没有输出时第二个进程必须等待。具有同步关系的一组并发进程相互发送的信息称为消息或事件。
异步
可以不用等待调用返回,直接执行之后的内容。在不同的语言中有不同的方式,js中可以用promise、事件监听实现异步,java中可以用thread,golang可以用goroutine。
是一个进程发送一个请求的时候,可以在没有收到回复之前做其他事情。异步除了用多线程实现外,也可以将一些耗时的操作交给其他进程来处理。
异步和同步是相对的。
同步就是顺序执行,执行完一个再执行下一个,需要等待、协调运行。
异步就是彼此独立,在等待某事件的过程中继续做自己的事,不需要等待这一事件完成后再工作。
线程就是实现异步的一个方式。异步是让调用方法的主线程不需要同步等待另一线程的完成,从而可以让主线程干其它的事情。异步是最终目的,而多线程是实现异步的一种方法。
并发/并行是任务执行的描述。
关注任务整体上的处理和资源利用。
同步/异步是编程模型,关注任务调度的方式、任务之间的交互。
个人认为,并发并行是更广泛的概念,涵盖了同步异步,我们也常看到有文章讲述如何用同步异步解决并发编程中的问题。
CPU、DSP、MPU、MCU、SOC、FPGA、ARM等概念
1、CPU(Central Processing Unit)中央处理器
是计算机的核心,其中可以执行指令,可以进行算数和逻辑运算。CPU的种类很多,很多,不同半导体公司有不同的CPU,Intel设计和制造的是一种CPU,英国ARM公司设计的是另一种CPU。设计重点在运算速度追求快,指令效率高。
冯.诺依曼提出的计算机结构是:
计算机=CPU+M+IO+程序。M是存储器,IO是各种输入输出接口。
2、DSP(Digital Signal Process)数字信号处理器
DSP是TI德克萨斯仪器公司设计的一种CPU,其机器指令对数字信号中的卷积、傅里叶变换、乘法、除法等运算很快,最早使用跳转预测,很适合数字信号方面的运算,所以叫数字信号处理器,实际上,它是一种特殊的CPU。
3、MPU (Micro Processor Unit)微处理器(不是微控制器)
常代表一个功能强大的CPU(暂且理解为增强版的CPU吧),但不是为任何已有的特定计算目的而设计的芯片。这种芯片往往是个人计算机和高端工作站的核心CPU。Intel X86,ARM的一些Cortex-A芯片如飞思卡尔i.MX6、全志A20、TI AM335X等都属于MPU。
4、MCU (Micro Control Unit)单片机,微控制器
是指随着大规模集成电路的出现及其发展,将计算机的CPU、RAM、ROM、定时计数器和多种I/O接口集成在一片芯片上,形成芯片级的芯片。即MCU=CPU+M+IO(其中的M可以在片外扩展,IO也可以在片外扩展)。比如51,AVR、STM32这些芯片,内部除了CPU外还有RAM、ROM,可以直接加简单的外围器件(电阻,电容)就可以运行代码了。而如x86、ARM这些MPU就不能直接运行代码了,它只不过是增强版的CPU,所以得添加RAM,ROM。
这里解释一下STM32和ARM公司Cortex-M内核之间的关系:
Cortex-M3处理器内核是单片机的中央处理单元(CPU)。完整的基于CM3的MCU还需要很多其它组件。在芯片制造商得到CM3处理器内核的使用授权后,**它们就可以把CM3内核用在自己的硅片设计中,添加存储器,外设,I/O以及其它功能块。**不同厂家设计出的单片机会有不同的配置,包括存储器容量、类型、外设等都各具特色。如果想要了解某个具体型号的处理器,还需查阅相关厂家提供的文档。STM32就是意法半导体厂商采用采用CM3内核设计的MCU芯片。
5、SOC(System on Chip)片上系统
MCU只是芯片级的芯片,而SOC是系统级的芯片,它既MCU(51,avr)那样有内置RAM、ROM同时又像MPU那样强大,不单单是放简单的代码,可以放系统级的代码,也就是说可以运行操作系统(将就认为是MCU集成化与MPU强处理力各优点二合一)。
6、FPGA(Field-programmable gate array)场可编程门阵列
还有一种CPLD叫复杂可编程逻辑器件,你想象其中有很多,很多零散的与,或,非门电路块,你可以通过编程(或画电路图)把它们连接起来,可以连接组成很复杂的组合逻辑,也可以连接组成很复杂的时序逻辑,以至于可以内部放一个CPU,MCU的硬件。硬件实现逻辑,一定很快。
7、ARM(Advanced RISC Machine,一家公司)CPU的IP核(知识产权核)
ARM一般指英国ARM公司设计的CPU的IP核(知识产权核),很多芯片厂家基于ARM的CPU的IP核,设计了自己家的MCU、MPU、SOC等(某些ARM芯片中也嵌入了数字信号处理功能)。
ARM内核分为三个版本A,R,M:
1,A系列:顶级主控,在人机互动要求较高的场合,比如pda,手机,平板电脑, GPS等。a系列类似于cpu,与arm9和arm11相对应,都是可以跑操作系统的。linux等。
2,R系列:实时高性能处理器,主要应用在对实时性要求高的场合, 硬盘控制器,车载控制产品。
3,M系列:通用低端,工业,消费电子领域微控制器, 不能跑操作系统(只能跑ucos2),偏向于控制方面,说白了就是一个高级的单片机。
ARM、MCU、DSP、FPGA、SOC各是什么?有什么区别?
1、ARM
ARM处理器是Acorn计算机有限公司面向低预算市场设计的第一款RISC微处理器。更早称作AcornRISCMachine。ARM处理器本身是32位设计,但也配备16位指令集,一般来讲比等价32位代码节省达35%,却能保留32位系统的所有优势。
ARM历史发展:
1978年12月5日,物理学家赫尔曼·豪泽(HermannHauser)和工程师ChrisCurry,在英国剑桥创办了CPU公司(CambridgeProcessingUnit),主要业务是为当地市场供应电子设备。1979年,CPU公司改名为Acorn计算机公司。
起初,Acorn公司打算使用摩托罗拉公司的16位芯片,但是发现这种芯片太慢也太贵。"一台售价500英镑的机器,不可能使用价格100英镑的CPU!"他们转而向Intel公司索要80286芯片的设计资料,但是遭到拒绝,于是被迫自行研发。
1985年,RogerWilson和SteveFurber设计了他们自己的第一代32位、6MHz的处理器,RogerWilson和SteveFurber用它做出了一台RISC指令集的计算机,简称ARM(AcornRISCMachine)。这就是ARM这个名字的由来。
RISC的全称是"精简指令集计算机"(reducedinstructionsetcomputer),它支持的指令比较简单,所以功耗小、价格便宜,特别合适移动设备。早期使用ARM芯片的典型设备,就是苹果公司的牛顿PDA。
20世纪80年代后期,ARM很快开发成Acorn的台式机产品,形成英国的计算机教育基础。
1990年11月27日,Acorn公司正式改组为ARM计算机公司。苹果公司出资150万英镑,芯片厂商VLSI出资25万英镑,Acorn本身则以150万英镑的知识产权和12名工程师入股。公司的办公地点非常简陋,就是一个谷仓。20世纪90年代,ARM32位嵌入式RISC(Reduced lnstruction Set Computer)处理器扩展到世界范围,占据了低功耗、低成本和高性能的嵌入式系统应用领域的领先地位。ARM公司既不生产芯片也不销售芯片,它只出售芯片技术授权。
2、MCU 单片机
MCU本质为一片单片机,指将计算机的CPU、RAM、ROM、定时计数器和多种I/O接口集成在一片芯片上,形成的芯片级的计算机。
MCU做得好的厂商:瑞萨(Renesas)、恩智浦(NXP)、新唐、微芯(Microchip)、意法半导体(ST)、爱特梅尔(Atmel)、英飞凌(Infineon)、德州仪器(TI)、东芝(Toshiba)、三星(Samsung)、赛普拉斯(Cypress)、亚德诺半导体(ADI)、高通(Qualcomm)、富士通(Fujitsu)、超威半导体(AMD)、盛群/合泰半导体(Holtek)、中颖电子、炬力、华润微、沛城、义隆、宏晶、松翰、凌阳、华邦电子、爱思科微、十速科技、佑华微、应广、欧比特、贝岭、东软载波微、君正、中微、兆易、晟矽微、芯海、联华、希格玛、汇春、建荣科技、华芯微、神州龙芯、紫光微、时代民芯、国芯科技、中天微等等。
3、DSP
DSP(DigitalSignalProcessing),数字信号处理,简称DSP。DSP是用数值计算的方式对信号进行加工的理论和技术。另外DSP也是DigitalSignalProcessor的简称,即数字信号处理器,它是集成专用计算机的一种芯片,只有一枚硬币那么大。
4、FPGA
FPGA(Field-Programmable Gate Array),即现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。
FPGA做得好的厂商:Altera((阿尔特拉)被Intel收购)、Xilinx(赛灵思)、Actel、Lattice(莱迪思)、Atmel、京微雅格、QuickLogic、Microsemi、Cypress、TI、上海复旦微、广东高云、同方国芯、西安智多晶、中国电子、成都华微、深圳国微、遨格芯等等。
5、SOC
SoC的定义多种多样,由于其内涵丰富、应用范围广,很难给出准确定义。一般说来,SoC称为系统级芯片,也有称片上系统,意指它是一个产品,是一个有专用目标的集成电路,其中包含完整系统并有嵌入软件的全部内容。同时它又是一种技术,用以实现从确定系统功能开始,到软/硬件划分,并完成设计的整个过程。
ARM、MCU、DSP、FPGA、SOC的比较
1、采用架构
ARM:架构采用32位精简指令集(RISC)处理器架构,从ARM9开始ARM都采用了哈佛体系结构,这是一种将指令与数据分开存放在各自独立的存储器结构,独立的程序存储器与数据存储器使处理器的处理能力得到较大的提高。ARM多采用流水线技术,此技术通过多个功率部件并行工作来缩短程序执行时间,使指令能在多条流水线上流动,从而提高处理器的效率和吞吐率。
现今ARM7采用了典型的三级流水线,ARM9采用五级流水线技术,而ARM11使用了7级流水线,ARMCortex-A9更是使用了可变流水线结构(支持8-11级流水线)。在多核心的支持上ARMCortex-A9最多可支持4个核心,这是ARM系列处理器中首次支持多核心技术。
MCU:大都在结构上是基于冯·诺伊曼结构的,这种结构清楚地定义了嵌入式系统所必需的四个基本部分:一个中央处理器核心,程序存储器(只读存储器或者闪存)、数据存储器(随机存储器)、一个或者更多的定时/计数器,还有用来与外围设备以及扩展资源进行通信的输入/输出端口——所有这些都被集成在单个集成电路芯片上。指令集上早期的MCU是采用CISC的,后面被RISC取代。在总线位数上,MCU覆盖了4位、8位、16位、32位,应用十分广泛。
DSP:又名数字信号处理器,它是一种专用于实时的数字信号处理的微处理器。结构上它采用哈佛结构,同样采用流水线技术。此外,DSP被用于宿主环境时可作为直接内存存取设备运作,还支持从模拟数字转换器(ADC)获得数据,最终输出的是由数字模拟转换器(DAC)转换为模拟信号的数据,支持一定的并行处理。
FPGA:FPGA是英文Field Programmable Gate Array(现场可编程门阵列)的缩写,它是在PAL、GAL、PLD等可编程器件的基础上进一步发展的产物,是专用集成电路(ASIC)中集成度最高的一种。FPGA采用了逻辑单元阵列LCA(LogicCellArray)这样一个新概念,内部包括可配置逻辑模块CLB(ConfigurableLogicBlock)、输出输入模块IOB(InputOutputBlock)和内部连线(Interconnect)三个部分。用户可对FPGA内部的逻辑模块和I/O模块重新配置,以实现用户的逻辑。它还具有静态可重复编程和动态在系统重构的特性,使得硬件的功能可以像软件一样通过编程来修改。FPGA有别于DSP、ARM、MCU的地方主要在于它的并行处理能力,它的强大并行性使复杂的运算得到极大的速度比提升。
SOC:系统芯片是一个将计算机或其他电子系统集成单一芯片的集成电路。系统芯片可以处理数字信号、模拟信号、混合信号甚至更高频率的信号。系统芯片常常应用在嵌入式系统中。系统芯片的集成规模很大,一般达到几百万门到几千万门。SOC相对比较灵活,它可以将ARM架构的处理器与一些专用的外围芯片集成到一起,组成一个系统。其实现有的ARM处理器如Hisi-3507、hisi3516等处理器都是一个SOC系统,尤其是应用处理器它集成了许多外围的器件,为执行更复杂的任务、更复杂的应用提供了强大的支持。
2、功耗
ARM:可以说ARM之所以在移动市场上得到极大的成功,其中最主要的原因便是它的低功耗。众所周知的是在移动市场上的电子产品对处理器的功耗是十分敏感的,在过去PC平台上处理器的功耗在几十W到上百W不等,这样的功耗放在移动平台上是不可想像的,ARM在主频1G的情况下功耗才几百mW,强劲的低功耗使它能适应移动电子产品。
DSP:DSP相对于FPGA的一个优势是它的功耗相对较低,DSP生产厂商通过提高处理器的主频、努力降低功耗来保证它的市场占有率,因为在高性能的数字处理市场上FPGA似乎更占有优势。如果单纯从DSP领域上来看,DSP在功耗上、性能上做得最好的要数TI公司,TI公司的DSP处理器相对其它的DSP厂商生产的处理器成本更低、功耗更低,所以TI的DSP芯片更在竞争力。
MCU:MCU面世时间最长,各种厂商都有它们自己的架构与指令集,如果从低功耗方面来看,TI的MSP430型MCU做得相对较好。
FPGA:FPGA由于它的内部结构原因造成它的功耗相对较高、芯片发热量大,这也是它的一个缺点。但这也是不可避免的,在支持高性能的并发计算数字电路,且内部的逻辑门大都采用标准的宽长比,最终生成的数字电路必然会在功耗上无法与ASIC等专用处理器比较。
SOC:由于SOC自身的灵活性,它将多个器件集成到一个极小的芯片上从而组成一个系统,SOC系统相对于MCU等处理器组成的系统来说,它在功耗上具有优势。并且,SOC芯片可在版图层面上结合工艺、电路设计等因素对系统的功耗进行系统的优化,这样比由现今外围的PCB版搭建出来的系统功耗更低,占用面积更小。
3、速度
ARM随着市场应用的需求提高,ARM厂商纷纷通过优化来提高它的主频,提升它的性能。从开始的100Mhz到惊人的2.3Ghz,ARM主频以惊人的速度向前发展。
DSP现今最快的主频能达到1.2Ghz。当然不能单纯从主频判断它的性能会比ARM差,DSP具有单时钟周期内完成一次乘法和一次加法的能力,一般的ARM不具备这样的能力,DSP在计算领域优势尤其明显,所以TI结合了ARM和DSP两者的优势,生产出达芬奇异构芯片,当然这是属于SOC的范畴了。
MCU作为低端的应用处理器,它的主频从数M到几十Mhz不等。
FPGA主频时钟最高可达几Ghz甚至上10Ghz,当然它的成本也不菲。如果将FPGA与ARM、DSP等作为比较,从主频上进行比较是没有多大意义的,毕竟并行计算的能力要远远超出一般通用的处理器采用的串行计算几十倍。如同样的一个滤波算法在主频为100Mhz的FPGA上实现要比在主频为1Ghz的ARM上实现仍要快。
4、应用与市场
ARM处理器现在主要是三个系列分别为A系列、R系列、M系列。
A系列主攻消费电子应用,应用十分广泛。
计算:上网本、智能本、输入板、电子书阅读器、瘦客户端
手机:智能手机、特色手机
数字家电:机顶盒、数字电视、蓝光播放器、游戏控制台
汽车:信息娱乐、导航
企业:激光打印机、路由器、无线基站、VOIP电话和设备
无线基础结构:Web2.0、无线基站、交换机、服务器
R系列处理器主要针对一些对实时性要求较高的应用,如航空航天、汽车电子等场合,它具备高可靠性、高可用性、高容错能力、实时响应等优点。
M系列处理器主要针对较低端的应用,它的最初目标是替换现有的市面上的MCU。
ARMCortex-M0
ARMCortex-M0+
ARMCortex-M3
ARMCortex-M4
“8/16位”应用
“8/16位”应用
“16/32位”应用
“32位/DSC”应用
低成本和简单性
低成本,最佳能效
高性能,通用
有效的数字信号控制
DSP主要针对一些计算能力要求较高的应用,如视频图像处理、智能机器人、数字无线、宽带访问、数字音频、高分辨率成像和数字电机控制等。
MCU应用最为广泛,主要利益于它的成本控制上,使它能在许多对计算能力要求不那么高的应用立足。相信在未来几年里,MCU市场关键增长驱动力将来自于绿色能源,智能电子设备,智能电网以及电子产品的升级换代比如汽车电子。
SOC应用也十分广泛,主要是因为现有主流ARM芯片采用的架构便是SOC架构的一种,SOC是一个比较广泛的概念,现阶段许多ARM、DSP都开始采用SOC的方式来将多个器件加到处理器上组成复杂的系统。
5、开发成本
ARM主要是搭载LINUX、ANDROID、WINCE等操作系统,在开发难度上看,相对MCU、DSP较难入门,它需要开发人员对操作系统有较深的了解;从成本来看,ARM的单芯片成本较MCU要高,主要还是应用于一些较为复杂的系统上。
MCU入门最容易,上手也快,开发难度较小,并且它的成本低,在低端市场应用最为广泛。
DSP入门较容易,但单芯片成本较高,主要还是应用于对计算能力要求高的应用。当然DSP也可以搭载操作系统,搭载操作系统后可适用于多任务的应用上。
FPGA的开发难度较大并且开发周期也相对较长,此外它的单芯片成本很高。
例子:SOBEL算子(水平边沿)
正常来说要进行一次这样的算子需要9次乘法8次加法,这样的计算在FPGA、DSP上显得十分轻松,但对于ARM、MCU来说,它们的并行能力不强,当要处理的图像较大时,如1280P时,它们便会显得比较吃力了。
然而,这样的算子是十分容易对其进行优化的。如1与-1这两个位置的像素点可以直接进行一次加法完成,同理最后一行也是如此,中间一行的2与-2对应的像素点也可进行一次加法后再进行一次移位操作便完成这样的一次算子运算。计算从原来的9次乘法8次加法转换成三次加法与一次移位(移位操作在大多处理器上都可以在单个周期时钟内完成)。
嵌入式中的MCU、ARM、DSP、FPGA
MCU(Microcontroller Unit)
定义:MCU是一种包含处理器核心、内存、输入/输出接口和其他外设的单一芯片解决方案。
角色:主要用于控制应用,例如通过读取传感器数据、执行控制算法、管理通信等来控制嵌入式系统。
ARM(Advanced RISC Machine)
定义:ARM是一种基于精简指令集计算机(RISC)架构的处理器。
角色:ARM本身是一种处理器架构,而不是单一的芯片。它广泛用于各种嵌入式系统,包括MCUs,但也可以在其他类型的处理器上使用,例如应用处理器、图形处理器等。
DSP(Digital Signal Processor)
定义:DSP是专门设计用于数字信号处理任务的处理器类型,通常用于音频处理、图像处理和通信系统等应用。
角色:在嵌入式系统中,DSP通常用于处理需要高性能数字信号处理的任务,例如音频编解码、滤波等。
FPGA(Field-Programmable Gate Array)
定义:FPGA是一种可编程逻辑器件,可以通过编程来实现各种数字电路功能。
角色:在嵌入式系统中,FPGA常用于需要定制硬件逻辑的应用。与固定功能的硬件不同,FPGA可以通过重新编程实现不同的硬件功能,使其适应不同的应用场景。
MCU
MCU代表微控制器单元(Microcontroller Unit)。它是一种集成了中央处理器(CPU)、内存(RAM和/或闪存)、输入/输出接口以及其他必要外设的微型计算机系统。MCU通常被设计用于在嵌入式系统中执行特定的控制任务。
1. 中央处理器(CPU):执行程序和控制任务的核心计算单元。
2. 内存:包括RAM(随机存储器)用于临时数据存储和存取,以及闪存(或EEPROM)用于长期存储程序代码和数据。
3. 输入/输出接口:连接外部设备(例如传感器、执行器、通信接口等)的接口,使MCU能够与外部世界进行交互。
4. 时钟和定时器:用于同步和计时操作,对于很多嵌入式应用来说,时间敏感性是非常重要的。
5. 通信接口:支持与其他设备或系统进行通信,例如串口、SPI(Serial Peripheral Interface)、I2C(Inter-Integrated Circuit)等。
6. 低功耗特性:嵌入式系统通常要求低功耗,因此MCU通常被设计成能够在功耗较低的情况下执行任务。
MCU广泛应用于各种嵌入式系统,例如家电控制、汽车电子、医疗设备、工业自动化、物联网(IoT)设备等。由于其集成度高、功耗低、成本相对较低等优势,MCU在嵌入式领域中扮演着重要的角色。不同的MCU可以基于不同的体系结构,例如基于ARM Cortex-M系列的MCU是目前非常流行的选择之一。
ARM
ARM,全名为Advanced RISC Machine(高级精简指令集计算机),是一种精简指令集(RISC)架构的处理器设计。ARM架构最初由英国的ARM Holdings公司开发,现在已经成为一种广泛应用于各种计算设备的处理器架构。
特点
1. 精简指令集(RISC):ARM架构采用精简指令集设计,这意味着它的指令集相对较小且更简单,执行效率更高。这有助于提高处理器的性能和降低功耗。
2. 多种版本:ARM架构有多个版本,包括ARMv6、ARMv7和ARMv8等。每个版本都引入了新的特性和改进,以适应不同的应用需求,从嵌入式系统到高性能计算。
3. 可扩展性:ARM架构是高度可扩展的,从简单的嵌入式系统到复杂的服务器级处理器都有相应的设计。这种可扩展性使得ARM处理器适用于各种不同的设备和场景。
4. 广泛应用:ARM处理器广泛应用于移动设备、嵌入式系统、物联网(IoT)设备、消费电子、汽车电子、服务器和超级计算机等各种领域。
5. 许可模式:ARM不生产自己的芯片,而是通过许可的方式将其架构授权给其他公司。这意味着许多公司可以设计和制造符合ARM标准的处理器核心,从而促使了ARM生态系统的发展。
在嵌入式系统中,ARM处理器通常被用作主处理器单元,例如在嵌入式系统-on-chip(SoC)中。ARM Cortex-M系列是专门设计用于低功耗、实时嵌入式系统的一系列处理器。在高性能计算领域,ARM Cortex-A系列处理器被广泛应用于移动设备和服务器。
DSP
DSP代表数字信号处理器(Digital Signal Processor)。它是一种专门设计用于执行数字信号处理任务的处理器类型。数字信号处理涉及对数字信号(通常是来自传感器、音频、视频等的信号)进行处理和分析的过程。
特点
1. 高性能信号处理:DSP专注于数字信号的处理,这使得它在处理需要高度精确和实时性的信号时表现出色。典型的应用包括音频处理、图像处理、通信系统、雷达系统等。
2. 并行处理:DSP通常具有并行处理能力,可以同时执行多个数学运算,这对于信号处理任务来说是非常重要的。
3. 专用指令集:DSP通常具有专门的指令集,针对数字信号处理任务进行了优化。这些指令集可以包括各种滤波、傅里叶变换等数字信号处理算法的指令。
4. 低功耗设计:许多DSP设计针对低功耗应用,例如移动设备、无线通信设备等。
5. 实时性要求:DSP通常被用于需要实时处理的应用,例如实时音频和视频处理,其中延迟是不可接受的。
DSP提供了一种有效的方式来处理和分析数字信号,使其在许多领域中成为不可或缺的技术。
FPGA
FPGA代表现场可编程门阵列(Field-Programmable Gate Array)。它是一种硬件设备,具有高度的可编程性,允许工程师根据需要重新配置其内部电路,从而实现特定的数字电路功能。相对于固定的集成电路(ASICs),FPGA具有更大的灵活性,因为它们可以通过重新编程实现不同的电路功能,而无需更换硬件。
特点
1. 可编程性:FPGA是可编程的,允许工程师使用硬件描述语言(如Verilog或VHDL)来定义所需的数字电路功能。这种可编程性使得FPGA适用于各种不同的应用和任务。
2. 并行性:FPGA通常拥有大量可并行执行的逻辑资源,这使得它们在需要高度并行处理的应用中表现出色。
3. 灵活性:相对于专门设计的集成电路,FPGA在设计后仍然保持了灵活性。工程师可以通过重新编程来适应变化的需求或修复设计中的错误。
4. 低成本:相对于一些需要量产的应用,FPGA通常具有较低的开发成本,因为它们无需制造定制的集成电路。
5. 快速原型设计:FPGA可用于快速原型设计,因为它们允许工程师迅速验证其设计概念,而无需等待制造和交付定制硬件。
6. 高性能:FPGA在某些应用中可以提供很高的性能,尤其是对于需要大量并行计算的任务。
FPGA在需要灵活性和可编程性的数字电路方面发挥着关键的作用,为工程师提供了一种在硬件层面上实现定制功能的强大工具。
应用
MCU(Microcontroller Unit)
场景:适用于控制导向的应用,其中需要执行简单的控制任务,例如传感器数据的采集、执行简单的逻辑控制等。
例子:家用电器、嵌入式传感器、小型嵌入式系统。
ARM:
场景:广泛应用于各种应用领域,从低功耗嵌入式系统到高性能服务器。
ARM Cortex-M系列:用于低功耗、实时嵌入式系统,如物联网设备。
ARM Cortex-A系列:用于高性能计算,例如移动设备、嵌入式计算平台、服务器。
DSP(Digital Signal Processor)
场景:适用于需要高度并行和实时数字信号处理的应用,例如音频处理、图像处理、通信系统等。
例子:音频处理器、通信设备、图像处理器、雷达系统。
FPGA(Field-Programmable Gate Array)
场景:适用于需要灵活性、可编程性和高度并行性的应用,可以通过重新编程来实现不同的硬件功能。
加速器:在需要高性能计算的应用中,例如科学计算、深度学习加速等。
通信:用于协议处理、数据包过滤等网络设备。
快速原型设计:用于快速验证和原型设计,加速产品开发。
综合使用场景,有时这些技术也会在同一系统中协同工作,以充分利用各自的优势。例如,一个系统可能使用ARM作为主处理器,搭配MCU来执行实时控制任务,使用DSP来处理数字信号,而FPGA则用于加速特定的硬件任务或提供灵活性。选择合适的技术取决于系统的需求,包括性能、功耗、成本和灵活性等因素。
API 应用程序编程接口
是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。
“‘电脑操作系统(Operating system)’或‘程序库’提供给应用程序调用使用的代码。”其主要目的是让应用程序开发人员得以调用一组例程功能,而无须考虑其底层的源代码为何、或理解其内部工作机制的细节。API本身是抽象的,它仅定义了一个接口,而不涉及应用程序在实际实现过程中的具体操作。
近年来软件的规模日益庞大,常常需要把复杂的系统划分成小的组成部分,编程接口的设计十分重要。程序设计的实践中,编程接口的设计首先要使软件系统的职责得到合理划分。良好的接口设计可以降低系统各部分的相互依赖,提高组成单元的内聚性,降低组成单元间的耦合程度,从而提高系统的维护性和扩展性。
处理器
包含一个或多个核的复杂集成电路,负责执行计算机程序中的指令,而核是处理器内部执行这些指令的基本计算单元。处理器是一个更综合的概念,核是构成处理器的基本构建块。
核:在计算机领域中,“核”通常指的是中央处理器(CPU)中的物理处理器核心(Processor Core)。每个核心都是一个独立的计算单元,能够执行指令集并进行数据处理。简单来说,核是CPU内部能够并行处理任务的关键组件。
现代计算机处理器往往包含一个或多个这样的核心,允许同时处理多项任务或者同一任务的不同部分,从而显著提高了计算机的处理能力和效率。例如,双核处理器意味着拥有两个核心,四核处理器则有四个核心,依此类推。多核处理器在执行多线程应用程序时尤其有效,因为多个线程可以被分配到不同的核心上并行运行。
总结来说,“核”就是CPU内部执行计算任务的基本单位,是现代处理器实现高性能并发处理的基础。
Cortex A9 双核
“Cortex” 是 ARM 公司的一系列处理器架构的名称。这些架构是基于 RISC(Reduced Instruction Set Computing,精简指令集计算)原则设计的,广泛应用于移动设备、嵌入式系统和消费电子产品中。Cortex 架构的处理器具有高性能、低功耗的特点,是现代电子设备中非常流行的选择。
Cortex 架构分为几个不同的系列,每个系列针对不同的应用需求和性能水平。以下是一些主要的 Cortex 系列:
Cortex-A 系列:这是面向高性能应用的系列,如智能手机和平板电脑。Cortex-A 系列包括多个核心,如 Cortex-A5、Cortex-A7、Cortex-A8、Cortex-A9、Cortex-A12、Cortex-A15、Cortex-A17 和最新的 Cortex-A76 等。
Cortex-R 系列:这是为实时应用设计的系列,如汽车电子和工业控制。Cortex-R 系列包括 Cortex-R4、Cortex-R5、Cortex-R7 等。
Cortex-M 系列:这是为微控制器应用设计的系列,如物联网设备和简单的消费电子产品。Cortex-M 系列包括 Cortex-M0、Cortex-M0+、Cortex-M1、Cortex-M3、Cortex-M4、Cortex-M7 和 Cortex-M23 等。
Cortex 架构的处理器通常由第三方半导体公司根据 ARM 的授权生产,这些公司包括高通、三星、联发科、意法半导体等。这些处理器被广泛应用于各种设备中,包括智能手机、平板电脑、可穿戴设备、车载信息娱乐系统、工业自动化设备、网络设备等。
Cortex 架构的成功在于其灵活性、高性能和低功耗特性,使其成为全球最受欢迎的处理器架构之一。随着技术的不断进步,ARM 不断推出更新的 Cortex 架构版本,以满足不断变化的市场需求和技术标准。
S32G
NXP Semiconductors(恩智浦半导体)的一款汽车级处理器,它基于 ARM Cortex-A72 和 Cortex-A53 核心。这款处理器旨在满足高性能、高安全性和低功耗的需求,特别适用于汽车信息娱乐系统、高级驾驶辅助系统(ADAS)和自动驾驶车辆。
S32G 处理器的特点包括:
多核 ARM 架构:集成了多个 ARM Cortex-A72 和 Cortex-A53 核心,提供了平衡的性能和效率。
高安全性:支持安全岛(Secure Island)架构,提供隔离的安全运行环境,适用于车联网(V2X)通信和汽车安全应用。
图形处理能力:内置强大的图形处理单元(GPU),支持高分辨率显示屏和复杂的图形渲染。
汽车级特性:符合汽车行业的高温、高湿、振动和电磁干扰等严苛条件。
丰富的外设接口:提供多种接口,如 PCIe、USB、HDMI、MIPI CSI 等,以支持各种外设连接。
低功耗设计:适用于需要长时间运行且功耗受限的汽车应用。
支持多种操作系统:可以运行 Linux、QNX、Android 等操作系统。
S32G 处理器家族包括多个成员,如 S32G274A、S32G295A 等,每个成员都针对不同的应用和性能需求进行了优化。这些处理器广泛应用于汽车行业,帮助汽车制造商实现更智能、更安全的车辆。
S32G399A
是一款由NXP Semiconductors(恩智浦半导体)设计的高性能汽车网络处理器,专为汽车应用中的复杂网络和高性能计算需求而打造。这款芯片结合了多个强大的处理器核心,旨在支持下一代车辆的高级驾驶辅助系统(ADAS)、车载网络、网关、域控制器和高性能ECU(电子控制单元)应用。以下是S32G399A的一些关键特性:
-
多核架构:S32G399A集成了4个Cortex-M7内核和8个Cortex-A53内核,这种混合架构允许它高效处理实时任务和复杂运算任务。Cortex-M7内核适合低功耗、快速响应的控制任务,而Cortex-A53内核则提供更高的处理能力,适合运行复杂的操作系统和应用程序。
-
内存与外设:芯片配备有20MB的内置存储,支持多种汽车网络通信协议,包括CAN FD(Flexible Data-Rate Controller Area Network)、FlexRay、LIN、SPI、PCI Express(PCIe)、千兆以太网(GbE)等,以及LLCE*、PFE*、HSE-H*、XRDC*等专用模块,这些都强化了其在汽车网络中的连接性和数据处理能力。
-
安全性:S32G399A符合ASIL D级别的功能安全要求,这是汽车安全完整性等级中的最高等级,表明它适用于最严格的安全关键应用。
-
封装与兼容性:采用FBGA525(Fine-Pitch Ball Grid Array)封装,适合汽车级的耐用性和热管理要求。此封装形式提供了高密度引脚排列,适用于紧凑型设计。
-
开发支持:支持使用NXP提供的SDK BSP35进行开发,便于开发人员进行管理程序的开发和其他应用编程。
-
应用领域:广泛应用于智能电动汽车的电子电气架构中,负责系统逻辑计算、功能安全和高效的数据处理,支持车辆内部多个系统的高效协同工作。
总之,S32G399A是一款高度集成、高性能、高安全性的汽车处理器,旨在满足现代汽车对于数据处理、连接性和安全性日益增长的需求。
S32G399A
是NXP Semiconductors(恩智浦半导体)推出的一款汽车网络处理器,该处理器结合了多核Arm®Cortex®-A53应用处理器和可选配的集群锁步支持,以及双核锁步Cortex-M7实时微控制器。以下是关于S32G399A的详细信息:
-
内核配置:
-
该处理器拥有4个Cortex-M7核心和8个Cortex-A53核心,总共12个核心。
-
Cortex-M7核心用于实时控制任务,而Cortex-A53核心则用于应用处理。
-
-
性能参数:
-
最大时钟频率达到1.3 GHz。
-
L1缓存指令存储器和数据存储器均为32 kB。
-
数据RAM大小为20 MB。
-
-
安全特性:
-
结合了ISO 26262标准的ASIL D级安全性。
-
配备了硬件HSE加密模块,用于信息安全。
-
-
网络功能:
-
支持20x CAN FD(控制器局域网灵活数据速率)接口。
-
支持4x GbE(千兆以太网)接口。
-
还包括PCIe(高速串行计算机扩展总线标准)、I2C、SPI、UART等其他接口类型。
-
-
环境适应性:
-
可在-40°C至+105°C的温度范围内工作。
-
符合AEC-Q100资格,确保在汽车环境中的可靠性。
-
-
封装与安装:
-
封装类型为FC-PBGA-525。
-
安装风格为SMD/SMT(表面贴装技术)。
-
-
应用领域:
-
主要用于汽车域控制器、网关和安全处理器等应用。
-
支持软件定义汽车(SDV)应用,包括高级驾驶辅助系统(ADAS)和其他智能互联汽车功能。
-
S32G399A处理器通过其高性能、多核配置和丰富的网络功能,为现代汽车应用提供了强大的处理能力,同时确保了功能安全和信息安全。它是NXP Semiconductors S32G系列汽车网络处理器中的一款高端产品,旨在满足汽车行业中日益增长的软件定义汽车应用需求。
S32G399A
是一款由NXP(恩智浦)公司推出的车载网络处理器,其详细信息和特点可以归纳如下:
-
基本参数:
-
型号:S32G399A
-
品牌:NXP
-
封装:525-FCPBGA
-
年份:最新产品,年份为23+(代表2023年及以后)
-
-
技术规格:
-
核心:
-
多达8个Arm® Cortex®-A53内核,这些内核采用Arm Neon™技术,并被组织在两个由四个内核组成的群组中,可选择群组锁步。
-
多达4个Arm Cortex-M7双核锁步(DCLS)复合体,专为实时应用设计。
-
-
内存:高达20MB的片上系统SRAM。
-
网络加速:
-
低延时通信引擎(LLCE),用于汽车网络加速。
-
包转发引擎(PFE),有三个支持2.5Gbps的端口,用于以太网加速。
-
-
安全:硬件安全引擎(HSE)用于安全启动和加速安全服务。
-
-
特点:
-
扩展性和兼容性:与S32G2处理器的软件和引脚兼容,扩展了S32G系列的功能。
-
高性能:通过提升频率至1.3GHz和增加系统RAM,以及增加隔离域数量至16个,满足了对更高性能和更多处理能力的需求。
-
多应用支持:支持涉及面向服务的网关、车载计算机、域控制器、分区处理器和安全处理器的车辆架构的需求。
-
安全标准:符合AEC-Q100 2级设备标准,可在-40℃至105℃的温度范围内工作。
-
-
应用范围:
-
汽车接入点
-
汽车数据记录器
-
汽车区域控制器
-
域控制器
-
空气中的固件(FOTA)
-
网关
-
车载网络
-
安全处理器
-
面向服务的网关
-
车辆计算
-
分区网关
-
-
接口和连接性:
-
支持CAN、LIN、FlexRay和以太网等多种汽车网络协议。
-
提供I2C、SPI、UART等接口,用于与其他设备或系统连接。
-
S32G399A作为NXP S32G系列的一部分,旨在通过其高性能、丰富的功能和强大的网络处理能力,为现代汽车和交通系统提供可靠和高效的解决方案。
PS: 处理系统 (Processing System)
就是与FPGA无关的ARM的SOC的部分。
PL:可编程逻辑 (Progarmmable Logic), 就是FPGA部分。
之所以叫PL,而不是叫FPGA,原因可能是考虑到让搞软件不要看了以后望而生畏。
Zynq基础信息
一、简介
Zynq-7000 All Programmable SOC,是Xilinx推出的全可编程系统,他将处理器(PS部分)的软件可编程性和FPGA(PL部分)的硬件可编程性集成到了同一芯片上,提供了极大的系统性能、灵活性和可扩展性。Zynq系列旨在为视频监视、汽车驾驶员辅助以及工厂自动化等高端嵌入式应用提供所需的处理与计算性能水平。
PS(Processing System)和PL(Programmable Logic)是zynq的两个核心组件,它们之间通过AXI总线进行连接。
PS(Processing System)是整个zynq平台的核心,负责处理、运算和决策等任务。PS基于ARM架构,由一颗或多颗处理器核构成,并包括了各种外设接口和存储器等组件。PS能够运行Linux等高级操作系统,也支持多种应用程序和算法的运行。
PL(Programmable Logic)是Zynq平台中的可编程逻辑部分,它基于Xilinx的FPGA技术。通过使用Vivado等开发工具,用户可以根据应用需求对PL进行编程和定制,实现各种数字逻辑功能。
PL和PS之间通过AXI(Advanced eXtensible Interface)总线进行通信和数据传输。PS端和PL端都可以作为AXI的主设备和从设备。主设备负责启动数据传输,并控制数据的流向和速率;从设备则负责接收数据,并响应主设备的控制信号。通过使用AXI接口,可以实现高性能、高速度的数据传输,并且可以根据应用需求灵活地配置AXI接口的参数。
在Zynq平台中,PS和PL的分工协作可以实现更高效、更灵活和更低功耗的计算与处理能力。
二、架构框图
Zynq-7000 SoC的框图如下所示,其整体分为上下两个矩形框图,上面的矩形框图为PS部分,下面的矩形框图为PL部分。
Zynq将arm处理器为主的PS系统作为为核心,而PL部分只是其一个外设,通过AXI总线进行通信。从框图中容易看出,Zynq PS系统里并非只有 ARM 处理器,还有一组相关的处理资源,形成了一个应用处理器单元(Application Processing Unit, APU),另外还有扩展外设接口、 cache 存储器、存储器接口、互联接口和时钟发生电路等模块。
Zynq PL 部分等价于 Xilinx 7 系列 FPGA,其资源主要由可编程输入/输出单元、可编程逻辑单元、嵌入式块RAM、布线资源、底层嵌入功能单元和内嵌专用硬核等组成。PL部分的架构如下图所示。
PS 和 PL 之间有9个根据AXI4总线协议进行通信的端口,将其分为三类:
1、 通用 AXI(General Purpose AXI):一条 32 位数据总线,适合 PL 和 PS 之间的中低速通信。接口是透传的不带缓冲。总共有四个通用接口:两个 PS 做主机,另两个 PL 做主机。
2、 加速器一致性端口(Accelerator Coherency Port):在 PL 和 APU 内的 SCU 之间的单个异步连接,总线宽度为 64 位。这个端口用来实现 APU cache 和 PL 的单元之间的一致性。 PL 是做主机的。
3、 高性能端口(High Performance Ports):四个高性能 AXI 接口,带有 FIFO 缓冲来提供“批量”读写操作,并支持 PL 和 PS 中的存储器单元的高速率通信。数据宽度是 32 或 64 位,在所有四个接口中PL 都是做主机的。
值得指出的是,虽然zynq 中集成的了硬核arm处理器,但依然可以用FPGA 来搭建嵌入式处理器,即在PL部分实现 MicroBlaze 处理器,其优势在于数量以及实现方式的灵活性。zynq中的硬件处理器和软核处理器并不冲突,可以使用 PL 的逻辑资源搭建一个 Microblaze 软核处理器,来和 ARM 硬核处理器协同工作。
三、zynq SoC系列
Zynq SoC系列是Xilinx FPGA+ARM硬核架构的系列产品,其分类为:
Zynq-7000系列:Zynq 7000 SoC 系列集成 ARM® 处理器的软件可编程性与 FPGA 的硬件可编程性,不仅可实现重要分析与硬件加速,同时还在单个器件上高度集成 CPU、DSP、ASSP 以及混合信号功能。Zynq 7000 系列包括单核 Zynq7000S 器件和双核 Zynq-7000 器件,是具有出色单位功耗性价比的全面可扩展的 SoC 平台,可充分满足应用需求。Zynq7000S 器件采用与 28nm Artix™ 7 可编程逻辑配对的单核 ARM Cortex®-A9 处理器,是可扩展 Zynq-7000 平台的最低成本入门级产品。Zynq-7000S 和 6.25Gb/s 收发器一起提供,配备有通用固化外设,所实现的成本优化系统集成是电机控制与嵌入式视觉等工业物联网应用的理想选择。Zynq 7000 器件配备双核 ARM Cortex-A9 处理器,该处理器与基于 28nm Artix7 或 Kintex 7 的可编程逻辑集成,可实现优异的性能功耗比和最大的设计灵活性。Zynq 7000 器件具有高达 6.25M 的逻辑单元以及从 6.6Gb/s 到 12.5Gb/s 的收发器,可为多摄像头驾驶员辅助系统和 4K2K 超高清电视等大量嵌入式应用实现高度差异化的设计。
Zynq 7000s框图
Zynq7000 框图
Zynq UltraScale+ MPSoC系列:Zynq UltraScale+ MPSoC 器件不仅提供 64 位处理器可扩展性,同时还将实时控制与软硬件引擎相结合,支持图形、视频、波形与数据包处理。置于包含通用实时处理器和可编程逻辑的平台上,三个不同变体包括双核应用处理器 (CG) 器件、四核应用处理器和 GPU (EG) 器件、以及视频编解码器 (EV) 器件, 为 5G 无线、下一代 ADAS 和工业物联网创造了无限可能性。三者均为16nm FinFET+可编程逻辑结构。
Zynq UltraScale+ MPSoC CG器件框图
Zynq UltraScale+ MPSoC EG器件框图
原文链接:https://blog.csdn.net/weixin_43593478/article/details/132796334
XC7Z020
XC7Z020是Xilinx公司Zynq-7000系列SoC(System on Chip,片上系统)中的一款产品。与传统的FPGA不同,Zynq-7000系列集成了一个基于ARM的处理系统(PS)与可编程逻辑(PL),即FPGA结构,形成了一个高度灵活且集成度高的解决方案。具体到XC7Z020,它结合了双核ARM Cortex-A9处理器与Artix-7系列的FPGA架构,适用于需要高性能处理能力和可重配置逻辑的复杂嵌入式应用。
关键特性:
-
ARM Cortex-A9 MPCore处理器:XC7Z020集成了双核ARM Cortex-A9处理器,支持对称多处理(SMP)和非对称多处理(AMP)模式,提供强大的处理能力,适合运行操作系统(如Linux、RTOS)及复杂软件算法。
-
可编程逻辑(PL)部分:包含Artix-7系列FPGA的逻辑资源,包括大量的逻辑单元、DSP切片、BRAM以及丰富的I/O资源,可实现定制化的硬件加速、接口桥接和专用逻辑功能。
-
高速接口:支持多种高速接口标准,如千兆以太网(Gigabit Ethernet)、PCI Express(PCIe)、SATA、USB等,便于与外部设备高速通信。
-
低功耗设计:采用低功耗工艺和技术,支持动态电源管理,有助于在保持高性能的同时降低系统功耗。
-
安全性增强:提供加密引擎和安全启动等特性,增强系统的安全性和可靠性。
-
封装选择:XC7Z020提供了多种封装形式,如FFG676、FFG900等,以适应不同应用场景的空间和引脚需求。
-
开发工具:支持使用Xilinx的Vivado Design Suite进行系统级设计、硬件描述语言(HDL)编程、软件开发以及系统集成,简化了SoC级别的设计流程。
由于其独特的SoC架构,XC7Z020广泛应用于需要高性能计算与灵活可编程逻辑相结合的领域,比如工业自动化、汽车电子、通信基础设施、医疗成像、航空航天以及国防系统等。
XC7Z020
-
XC7Z020 是一款由 Xilinx(现在属于 AMD)生产的 FPGA(现场可编程门阵列)器件。FPGA 是一种半导体器件,可以在制造后通过软件编程来配置其硬件功能。XC7Z020 属于 Xilinx 的第七代产品系列,也就是 Virtex 7 系列,这个系列提供了高性能和高级功能,适合用于复杂的设计和应用。
XC7Z020 具体的特点包括:
-
逻辑资源:这个器件具有大量的逻辑单元(LE),可以用来实现用户设计的逻辑功能。
-
存储资源:包括块 RAM 和分布式 RAM,用于存储数据和配置。
-
DSP 资源:数字信号处理资源,用于执行信号处理算法。
-
端口:提供多种类型的 I/O 端口,用于连接外部设备。
-
时钟管理:内置时钟管理单元,用于生成和分配时钟信号。
-
互连:提供了高效的逻辑单元互连,允许用户设计复杂的逻辑结构。
Virtex 7 系列器件支持 45 纳米工艺技术,具有很高的性能和密度,适用于高端计算、高速数据处理和复杂的逻辑控制应用。XC7Z020 作为这个系列的一员,也被设计用于满足这些要求,尤其是在需要大量逻辑资源和高速 I/O 性能的应用中。
XC7Z020
是Xilinx公司ZYNQ-7000系列的一款高性能全可编程SoC(系统级芯片)。以下是对XC7Z020的详细信息和特点的归纳:
-
芯片概述:
-
型号:XC7Z020
-
系列:ZYNQ-7000
-
主要特点:高性能、全可编程SoC,包含处理系统(PS)和可编程逻辑(PL)两部分。
-
-
处理系统(PS)部分:
-
处理器:集成了两个Cortex-A9处理器,提供强大的处理能力。
-
内存支持:支持DDR3、DDR3L、DDR2、LPDDR2等外部存储器接口。
-
外设接口:包括USB2.0、Gigabit Ethernet、SD/SDIO等关键外设接口。
-
-
可编程逻辑(PL)部分:
-
逻辑资源:拥有85K个逻辑单元、4.9Mbits的嵌入式存储资源、220个DSP单元。
-
时钟管理:包含4个时钟管理单元(CMT)和16个全局时钟网络。
-
I/O资源:提供6个用户I/O BANK和最大253个用户I/O引脚。
-
-
封装和速度等级:
-
封装:BGA400封装,引脚间距为0.8mm。
-
速度等级:-2,工业级。
-
-
应用领域:
-
由于其高度可编程性、高性能处理器、大容量逻辑单元、丰富的外设接口和低功耗设计,XC7Z020被广泛应用于通信系统、多摄像头驾驶员辅助系统、4K2K超高清电视等嵌入式应用中。
-
-
扩展和接口:
-
在高性能开发套件中,如ICETEK-XC7Z020-AL,XC7Z020扩展了视频、音频、千兆网络、TF、HDMI、UART、LCD等多种外设接口以及数据接口,方便用户进行使用和开发。
-
-
性能和参数:
-
最大频率:处理器核高达866MHz。
-
板载存储器:SPI FLASH 64Mb,DDR3 4Gbit x 2片。
-
数字视频接口:支持连接130万像素数字摄像头,实现数字视频信号的输入。
-
其他接口:包括VGA接口、千兆网络接口、RS-232接口、UART接口、USB接口、TF CARD接口、HDMI接口等。
-
综上所述,XC7Z020作为一款高性能全可编程SoC,凭借其丰富的逻辑资源、强大的处理能力、灵活的接口配置和广泛的应用领域,成为嵌入式系统设计中的优选方案。
ZYNQ-7000 XC7Z020 多网口 FPGA开发板
01、产品概述
此款开发板使用的是Xilinx公司的Zynq 7000系列的芯片,型号为XC7Z020-2CLG484I,5 路千兆以太网接口,支持多网口高速数据交换数据处理存储,视频传输处理以及工业控制等。内核 CPU搭载双核 ARM CORTEX-A9;在FPGA芯片的HP端口上连接了2 片 512MB DDR3共1GB,32bit 总线,数据速率 1066Mbps;1 片 256Mbit QSPI FLASH用来静态存储FPGA芯片的配置文件或者其它用户数据, 外围扩展了丰富的外设接口供用户使用;HDMI 输出最高支持 1080P@60Hz 输出。
02、产品参数
主要参数:
核心板:AC7021
FPGA型号:XC7Z020-2CLG4841
内核: 双核 ARM Cortex-A9,主频767MHZ
内存:DDR3 1GB,数据速率1066Mbps
芯片级别:工业级,工作温度 -40°C~85°C
逻辑单元数量:85K
查找表:53.2
触发器:106.4
乘法器:220
Block RAM:4.9Mb
EMMC FLASH:8GB
QSPI FLASH:256MBit
MIO(ARM 端):39 个
PL(FPGA端):198 个
LVDS 差分对:48个
电压可调 1O:100 个
功能和接口:
DDR3:2片512MB DDR3共1GB,32bit总线,数据速率1066Mbps
QSPl Flash:1片 256Mbit QSPI FLASH,可用作 FPGA 用户数据的存储
eMMC Flash:8GB,在ZYNQ 系统使用中,可以作为系统大容量的存储设备
以太网接口:5 路千兆以太网 RJ-45 接口,进行以太网数据交换
JTAG 口:板载 USB CABLE 接口,在线下载和调试 Zynq 系统
HDMI输出:HDMI 视频输出接口1路,最高支持1080P@60Hz输出支持3D 输出
USB 2.0接口:4路 USB 2.0 接口,可连接鼠标、键盘等 USB 外设
USB 转串口:1路 USB Uart 接口,用于和电脑通信,方便用户调试
晶振:1 个 33.33Mhz 有源晶振,给 PS 系统提供稳定时钟源1 个 50Mhz 有源晶振,为 PL逻辑提供额外的时钟
TF 卡座:1路 TF 卡座,用于存储操作系统镜像和文件系统
LED:2个LED灯,1个PS控制,4个PL控制
按键:2 个按键和1个复位按键,1个 PS 控制按键,1个PL控制按键
40 针扩展口:预留 2个40 针 2.54mm 间距的扩展口,可以外接黑金的各种模块(双目摄像头,TFT LCD 屏,高速 AD 模块等等)
电源参数:
输入电压:+12V 电压输入
供电:12V / 3A 供电
输入电流:3A 最大电流
包装清单:
FPGA开发板:1 块
Mini USB 线:1 个
TF卡:1 个
透明保护板:1块
12V电源:1 个
读卡器:1个
结构尺寸:
尺寸大小:核心板 60mm x 60mm,扩展板 188mm x 106mm
叠层数量:核心板 10 层 PCB 板设计,扩展板采用 4 层 PCB 板设计
03、结构尺寸图
04、功能接口图
核心板
开发板
05、应用领域
● 数据处理存储
● 视频传输处理
● 智能识别
● 医疗安防
● 车载数码
● 工业控制
● 智能电网
原文链接:https://blog.csdn.net/dpwkj/article/details/137083280
FPGA开发板 Artix-7 XC7A100T-2FGG484I
01开发板介绍
此款开发板采用核心板+扩展板的模式,方便用户对核心板的二次开发利用。FPGA使用的是Xilinx公司的ARTIX-7系列的芯片,型号为XC7A100T-2FGG484I。在核心板使用了2片MICRON公司的MT41J256M16HA-125 DDR3芯片,组合成32bit的数据总线宽度。1个128Mb的QSPI FLASH用来静态存储FPGA芯片的配置文件或者其它用户数据。底板为核心板扩展了丰富的外围接口,其中包含PCIe、千兆以太网、HDMI输入输出接口等等。
02主要参数
核心板
FPGA:Xilinx ARTIX-7系列FPGA芯片XC7A100T-2FGG484I,速度等级为2,温度等级为工业级。
DDR3:2片大容量的512MByte(共1GB)高速DDR3 SDRAM,时钟速度可达400MHz(数据速率800Mbps),可作为FPGA的数据存储,图像分析缓存,数据处理。
QSPI FLASH:一片128Mbit的QSPI FLASH存储芯片,用作FPGA芯片配置文件和用户数据的存储。
时钟:两个高精度Sitime公司的LVDS差分晶振,一个是200MHz,另一个是125MHz,为FPGA系统和GTP模块提供稳定的时钟输入。
扩展板
PCIe x4接口:1路支持PCI Express 2.0标准,提供PCIe x4高速数据传输接口,单通道通信速率可高达5GBaud。
10/100M/1000M以太网RJ-45接口:2路千兆以太网接口芯片采用Micrel公司的KSZ9031RNX以太网PHY芯片为用户提供网络通信服务。KSZ9031RNX 芯片支持10/100/1000 Mbps网络传输速率; 全双工和自适应。
HDMI输出:1路HDMI输出接口,选用Silion Image公司的SIL9134 HDMI编码芯片,最高支持1080P@60Hz输出,支持3D输出。
HDMI输入:1路HDMI输入接口,选用Silion Image公司的SIL9013 HDMI解码芯片,最高支持1080P@60Hz输入,支持不同格式的数据输出。
USB Uart接口:1路Uart转USB接口,用于和电脑通信,方便用户调试。串口芯片采用Silicon Labs CP2102GM的USB-UAR芯片, USB接口采用MINI USB接口。
Micro SD卡座:1路Micro SD卡座,支持SD模式和SPI模式。
EEPROM:板载一片IIC接口的EEPROM 24LC04;
40针扩展口:预留2个40针2.54mm间距的扩展口,可以外接黑金的各种模块(双目摄像头,TFT LCD屏,高速AD模块等等)。扩展口包含5V电源1路,3.3V电源2路,地3路,IO口34路。
JTAG口:10针2.54mm标准的JTAG口,用于FPGA程序的下载和调试;
按键:2个用户按键,1个复位按键(在核心板);
04发货清单
FPGA开发板一块
Mini USB线一根
12V电源一个
USB下载器一个
散热风扇一个
05结构尺寸
06应用场景
人工智能
机器视觉
图像处理
自动驾驶
高速通信
工业控制
仪器仪表
机器人
原文链接:https://blog.csdn.net/dpwkj/article/details/136645186
XC7A100T
是一款由Xilinx公司推出的高性能可编程逻辑器件(FPGA),属于Artix-7系列。以下是关于XC7A100T的详细信息和特点:
-
基本参数:
-
芯片型号:XC7A100T
-
系列:Artix-7
-
封装类型:根据具体型号有所不同,如FGG484、CSG324等
-
温度范围:-40°C 至 100°C(工业级)
-
-
性能特点:
-
高性能:具有快速的时钟速度和高吞吐量,能够处理复杂的计算任务和数据流。
-
低功耗:采用低功耗设计,能够有效降低能耗,提高系统的效率。
-
配置灵活:支持多种配置模式,可以根据不同的应用需求进行定制化配置,提供最佳的性能和功耗平衡。
-
高可靠性:采用可靠的设计和制造工艺,具有优秀的抗干扰能力和稳定性,保证系统的稳定运行。
-
-
内存与接口:
-
通常与DDR3 SDRAM结合使用,提供高速数据存储和图像处理缓存。
-
配备QSPI-FLASH用于静态存储FPGA芯片的配置文件或其他用户数据。
-
提供丰富的外设接口和通信接口,如USB to UART、千兆以太网接口、JTAG下载接口等。
-
-
应用领域:
-
通信系统:用于实现高速数据传输、信号处理、协议转换等功能。
-
视频处理:用于实现高清视频采集、图像处理、视频编解码等功能。
-
工业自动化:用于实现控制、监测、数据采集等功能。
-
医疗设备:用于实现医疗图像处理、信号处理、数据采集等功能。
-
汽车电子:在先进的驾驶辅助系统(ADAS)、车载娱乐系统等汽车电子领域中,用于处理图像、声音和数据。
-
军事和航空航天:在卫星通讯、雷达系统、导航设备等领域,由于其高可靠性和适应恶劣环境的能力而被广泛使用。
-
-
扩展性:
-
核心板体积小巧,适合二次开发,提供大量的IO接口,如GTX高速差分信号接口等。
-
可通过扩展板实现更多功能,如PCIe、HDMI输入输出接口等。
-
综上所述,XC7A100T是一款功能强大、性能优越的FPGA芯片,广泛应用于各种需要高性能、低功耗和灵活配置的领域。
XC7A100T
XC7A100T是Xilinx公司生产的Artix-7系列FPGA(Field-Programmable Gate Array,现场可编程门阵列)中的一款型号。FPGA是一种集成电路,其内部结构可以通过编程来重新配置,以实现用户自定义的数字逻辑电路功能。XC7A100T特别适用于那些需要高性能、低功耗以及成本效益的设计场景,特别是在通信、工业控制、汽车电子、医疗设备以及消费电子等领域。
关键特性:
-
逻辑资源:XC7A100T提供了丰富的逻辑资源,包括大量的可配置逻辑单元(CLBs)、数字信号处理(DSP)切片、以及大量的输入/输出(I/O)引脚。具体到XC7A100T,它包含约100,000个逻辑单元,具体数目可能因具体封装和速度等级有所不同。
-
布线资源和层次:具备先进的布线资源,支持高速信号传输,以及高效的层次化布线结构,保证了设计的灵活性和性能。
-
DSP能力:拥有数百个DSP切片,每个切片可以实现乘法累加(MAC)运算等复杂数学运算,适合于需要大量数学运算的高性能计算应用,如数字信号处理、图像处理等。
-
内存资源:集成有Block RAM(BRAM),用于存储数据或实现特定的存储逻辑,这对于缓存、帧缓冲等应用至关重要。
-
低功耗设计:Artix-7系列,包括XC7A100T,采用了先进的低功耗技术,包括可选的电源域和优化的睡眠模式,非常适合电池供电或对功耗有严格要求的应用。
-
封装选项:XC7A100T提供了多种封装选择,从较小的FFG1156到较大的FTG1156,以适应不同设计的空间和散热需求。
-
开发支持:Xilinx提供全面的开发工具链,包括Vivado Design Suite,支持高级综合、仿真、布局布线以及比特流生成,帮助工程师高效完成设计、验证和实现过程。
综上,XC7A100T FPGA以其丰富的资源、高性能、低功耗和灵活性,成为了众多高性能嵌入式系统设计的理想选择。
XC7A100T
XC7A100T 是 Xilinx 公司 Artix-7 系列的一款 FPGA(现场可编程门阵列)芯片。Artix-7 系列 FPGA 提供了高逻辑密度、低功耗、高级串行连接功能和卓越的性能,非常适合广泛的应用,包括工业自动化、数字信号处理、嵌入式视觉、医疗电子和航空航天/国防等。Artix-7 FPGA 提供了多种配置选项,以满足不同的性能和容量需求。
Xilinx 是知名的 FPGA 和可编程系统单片机(PSoC)制造商,其产品广泛应用于工业、通信、航空航天和国防等领域。
以下是 XC7A100T 的一些主要特性和规格:
-
逻辑资源:
-
大约 100K 的逻辑单元(Logic Cells)
-
丰富的内存资源,包括 Block RAM(BRAM)和其他存储选项
-
数字信号处理(DSP)单元,用于高效执行复杂数学运算
-
-
I/O 和封装:
-
提供多种 I/O 标准和速度等级
-
通常以 BGA 封装形式提供,以适应不同的板级设计需求
-
-
串行连接:
-
高速串行接口,如 PCIe、千兆以太网(Gigabit Ethernet)等
-
支持多种串行通信协议,如 SPI、I2C、UART 等
-
-
时钟和电源管理:
-
灵活的时钟管理单元(CMTs),支持多个独立时钟域
-
优化的低功耗设计,包括动态功耗管理和睡眠模式
-
-
配置和启动:
-
支持多种配置模式,包括主 SPI、从 SPI、JTAG 等
-
可以通过外部存储器(如 QSPI Flash)进行非易失性配置存储
-
-
开发工具和支持:
-
使用 Xilinx 的 Vivado Design Suite 进行设计和编程
-
提供丰富的 IP 核、库和参考设计,加速开发过程
-
-
温度和可靠性:
-
工业级温度范围,适合各种环境应用
-
可靠性高,适合长时间稳定运行
-
XC7A100T 的具体特性和规格可能因具体的产品版本和封装选项而有所不同。因此,在设计和实现基于 XC7A100T 的系统时,建议参考 Xilinx 的官方文档和指南,以确保满足项目的具体需求。
AXI总线
是一种总线协议,该协议是ARM公司提出的AMBA3.0中最重要的部分,是一种面向高性能、高带宽、低延迟的片内总线。AMBA4.0将其修改升级为AXI4.0。
AMBA4.0 包括AXI4.0、AXI4.0-lite、ACE4.0、AXI4.0-stream。
AXI4.0-lite是AXI的简化版本,ACE4.0 是AXI缓存一致性扩展接口,AXI4.0-stream是ARM公司和Xilinx公司一起提出,主要用在FPGA进行以数据为主导的大量数据的传输应用。
https://blog.csdn.net/bleauchat/article/details/96891619
ARM公司定义的一种高性能、可扩展的系统级总线,主要用于片上系统(SoC)中不同组件间的数据传输。AXI总线支持并行和串行数据传输,具有较高的传输带宽,能够满足高速数据传输的需求。
AXI总线具有以下特点:
-
高性能:AXI总线采用点对点的连接方式,能够提供较高的数据传输速率和带宽。
-
可扩展性:AXI总线支持多通道和虚拟通道,可以灵活地适应不同的系统需求。
-
兼容性:AXI总线遵循ARM公司定义的标准,因此具有较好的兼容性和互操作性。
-
灵活性:AXI总线支持多种数据传输模式,包括单次传输、流水线传输和 burst 传输等。
AXI总线在SoC设计中广泛应用于处理器、内存、外设等各种组件之间的数据交互。在我国的芯片设计和开发中,AXI总线也是一个重要的技术和工具。遵循ARM架构的SoC设计,可以充分利用AXI总线的优势,提高系统的性能和效率。
AXI总线设计用于连接SoC内部的各种组件,如CPU、DSP、GPU、内存控制器、外设等,以高效地传输数据和控制信息。
AXI总线的关键特性:
-
分离的读写通道:AXI定义了独立的读地址(AR)、读数据(R)、写地址(AW)、写数据(W)和写响应(B)通道,这使得读写操作可以并行进行,显著提高了总线的带宽和效率。
-
突发传输:支持一次性传输多个数据 beat(数据段),只需一个地址事务,减少了地址总线的占用,提高了数据传输效率。
-
流水线传输:允许在不同阶段(如地址阶段、数据阶段)的事务重叠进行,进一步提高了总线的吞吐量。
-
灵活的数据宽度:AXI总线支持可配置的数据总线宽度,可以根据不同的应用场景选择最合适的数据宽度,平衡性能与资源消耗。
-
支持cache和非cache一致性:AXI协议考虑到与CPU cache的交互,提供了一套机制来管理数据的一致性,包括内存屏障等指令。
-
可扩展性:AXI总线架构设计为高度模块化和可扩展,可以通过添加更多特性或通道来满足不同系统的需求,比如AXI-Lite用于低带宽的控制寄存器访问,AXI-Stream则专注于高效的数据流传输。
-
服务质量(QoS):高级版本的AXI协议(如AXI4)引入了服务质量的概念,允许设置传输优先级,优化系统性能和实时性。
AXI总线因其高效、灵活和可扩展的特性,在现代高性能嵌入式系统和多核处理器设计中扮演着至关重要的角色。
存储器
RAM(random access memory):
随机存取存储器。可读可写,并且速度很快。
是与CPU直接交换数据的内部存储器,也叫主存(内存)。它可以随时读写,而且速度很快,通常作为操作系统或其他正在运行中的程序的临时数据存储媒介。
电源关闭时RAM不能保留数据。
发展:SDRAM、DRAM、DDR。
静态随机存储器、动态随机存储器和同步动态随机存储器。
SRAM(Static Random Access Memory,静态随机存储器)
它是一种具有静止存取功能的内存,不需要刷新电路即能保存它内部存储的数据。
优点是速度快,不必配合内存刷新电路,可提高整体的工作效率。
缺点是集成度低,功耗较大,相同的容量体积较大,而且价格较高,少量用于关键性系统以提高效率。
DRAM(Dynamic Random Access Memory,动态随机存储器)
DRAM只能将数据保持很短的时间。为了保持数据,DRAM使用电容存储,所以必须隔一段时间刷新(refresh)一次,如果存储单元没有被刷新,存储的信息就会丢失。
必须刷新,后面衍生出DDR,DDR2,DDR3,DDR4。
SDRAM
其实就是同步DRAM的意思,“同步”是指内存工作需要同步时钟,内部命令的发送与数据的传输都以它为基准。内存频率与CPU外频同步,这大幅提升了数据传输效率,再加上64bit的数据位宽与当时CPU的总线一致,只需要一根内存就能让电脑正常工作了,这降低了采购内存的成本。
SDRAM从发展到现在已经经历了四代,分别是:第一代SDR SDRAM,第二代DDR SDRAM,第三代DDR2 SDRAM,第四代DDR3 SDRAM,现在已经发展到DDR5 SDRAM。
集成在soc上的基本为SDRAM。HI3516EV300是集成DDR3。
DDR SDRAM双数据率同步动态随机存储器
Double Data Rate Synchronous Dynamic Random Access Memory(双数据率同步动态随机存储器)的简称,是由VIA等公司为了与RDRAM相抗衡而提出的内存标准,为第二代SDRAM标准。其常见标准有DDR 266、DDR 333和DDR 400。其对于SDRAM,主要它允许在时钟脉冲的上升沿和下降沿传输数据,这样不需要提高时钟的频率就能实现双倍的SDRAM速度,例如DDR266内存与PC133 SDRAM内存相比,工作频率同样是133MHz,但在内存带宽上前者比后者高一倍。这种做法相当于把单车道更换为双车道,内存的数据传输性能自然可以翻倍。
DDR2(Double Data Rate 2)SDRAM
是由JEDEC(电子设备工程联合委员会)开发的第三代SDRAM内存技术标准,1.8v工作电压,240线接口,提供了相较于DDR SDRAM更高的运行效能与更低的电压,同样采用在时钟的上升/下降延同时进行数据传输的基本方式,但拥有两倍于上一代DDR内存预读取能力(即4bit数据读预取能力),其常见的频率规范有DDR2 400\533\667\800\1066\1333等,总线频率553MHz的DDR2内存只需133MHz的工作频率。
从而其传输速度更快(可达 667MHZ ),耗电量更低,散热性能更优良。
DDR3 SDRAM
DDR3是目前最常见的内存类型之一。
相比起DDR2具备更低的工作电压(1.5v),240线接口,支持8bit预读,只需133MHz的工作频率便可实现1066MHz的总线频率。其频率从800MHz起跳,常见频率有DDR3 800\1066\1333\1600\1866\2133等。DDR3是当前流行的内存标准,Intel酷睿i系列(如LGA1156处理器平台)、AMD AM3主板及处理器的平台都是其“支持者”。
特点:
速度和带宽提升:DDR3相对于DDR2在速度和带宽方面有了显著的提升。DDR3的内部时钟速度更高,数据传输速度更快,带宽更大,因此可以提供更高的数据传输性能。
低功耗:DDR3的工作电压较DDR2更低,通常为1.5V,这有助于减少电能消耗和热量产生。低功耗也使得DDR3在移动设备和笔记本电脑等对电池寿命和散热要求较高的场景中更具优势。
高容量支持:DDR3支持更大的内存容量,可以提供更多的存储空间。这对于需要处理大量数据的应用程序和任务来说非常重要,如图形处理、视频编辑和虚拟化等。
高频率和时序:DDR3内存的频率范围通常从800MHz到2133MHz,可以根据需求选择不同的频率。此外,DDR3还引入了更严格的时序要求,以确保数据的稳定和可靠传输。
向后兼容性:DDR3内存插槽通常是不兼容DDR2或DDR的,但DDR3内存模块可以在DDR3兼容的主板上与较早的DDR2或DDR插槽一起使用。然而,需要注意的是,内存模块将以较低的速度和时序运行,以适应较低的标准。
DDR3与DDR2的比较
DDR3与DDR2几个主要的不同之处 :
1.突发长度(Burst Length,BL)
由于DDR3的预取为8bit,所以突发传输周期(Burst Length,BL)也固定为8,而对于DDR2和早期的DDR架构系统,BL=4也是常用的,DDR3为此增加了一个4bit Burst Chop(突发突变)模式,即由一个BL=4的读取操作加上一个BL=4的写入操作来合成一个BL=8的数据突发传输,届时可通过A12地址线来控制这一突发模式。而且需要指出的是,任何突发中断操作都将在DDR3内存中予以禁止,且不予支持,取而代之的是更灵活的突发传输控制(如4bit顺序突发)。
2.寻址时序(Timing)
就像DDR2从DDR转变而来后延迟周期数增加一样,DDR3的CL周期也将比DDR2有所提高。DDR2的CL范围一般在2~5之间,而DDR3则在5~11之间,且附加延迟(AL)的设计也有所变化。DDR2时AL的范围是0~4,而DDR3时AL有三种选项,分别是0、CL-1和CL-2。另外,DDR3还新增加了一个时序参数——写入延迟(CWD),这一参数将根据具体的工作频率而定。
其中DDR2 的频率对照表如下图所示。
3.DDR3新增的重置(Reset)功能
重置是DDR3新增的一项重要功能,并为此专门准备了一个引脚。DRAM业界很早以前就要求增加这一功能,如今终于在DDR3上实现了。这一引脚将使DDR3的初始化处理变得简单。当Reset命令有效时,DDR3内存将停止所有操作,并切换至最少量活动状态,以节约电力。
在Reset期间,DDR3内存将关闭内在的大部分功能,所有数据接收与发送器都将关闭,所有内部的程序装置将复位,DLL(延迟锁相环路)与时钟电路将停止工作,而且不理睬数据总线上的任何动静。这样一来,将使DDR3达到最节省电力的目的。
4.DDR3新增ZQ校准功能
ZQ也是一个新增的脚,在这个引脚上接有一个240欧姆的低公差参考电阻。这个引脚通过一个命令集,通过片上校准引擎(On-Die Calibration Engine,ODCE)来自动校验数据输出驱动器导通电阻与ODT的终结电阻值。当系统发出这一指令后,将用相应的时钟周期(在加电与初始化之后用512个时钟周期,在退出自刷新操作后用256个时钟周期、在其他情况下用64个时钟周期)对导通电阻和ODT电阻进行重新校准。
参考电压分成两个
在DDR3系统中,对于内存系统工作非常重要的参考电压信号VREF将分为两个信号,即为命令与地址信号服务的VREFCA和为数据总线服务的VREFDQ,这将有效地提高系统数据总线的信噪等级。
点对点连接(Point-to-Point,P2P)
这是为了提高系统性能而进行的重要改动,也是DDR3与DDR2的一个关键区别。在DDR3系统中,一个内存控制器只与一个内存通道打交道,而且这个内存通道只能有一个插槽,因此,内存控制器与DDR3内存模组之间是点对点(P2P)的关系(单物理Bank的模组),或者是点对双点(Point-to-two-Point,P22P)的关系(双物理Bank的模组),从而大大地减轻了地址/命令/控制与数据总线的负载。而在内存模组方面,与DDR2的类别相类似,也有标准DIMM(台式PC)、SO-DIMM/Micro-DIMM(笔记本电脑)、FB-DIMM2(服务器)之分,其中第二代FB-DIMM将采用规格更高的AMB2(高级内存缓冲器)。
面向64位构架的DDR3显然在频率和速度上拥有更多的优势,此外,由于DDR3所采用的根据温度自动自刷新、局部自刷新等其它一些功能,在功耗方面DDR3也要出色得多,因此,它可能首先受到移动设备的欢迎,就像最先迎接DDR2内存的不是台式机而是服务器一样。在CPU外频提升最迅速的PC台式机领域,DDR3未来也是一片光明。Intel预计在第二季所推出的新芯片-熊湖(Bear Lake),其将支持DDR3规格,而AMD也预计同时在K9平台上支持DDR2及DDR3两种规格。
DDR4内存
DDR4相对于DDR3提高了传输速率和带宽,最高可达3200 MHz,同时还可以实现更低的电压和更低的功耗。
主要特点
更高的速度和带宽:DDR4相对于DDR3有更高的内部时钟速度和数据传输速率,从而提供更高的带宽。DDR4的传输速率通常从2133MHz开始,可以达到3200MHz以上,甚至更高。16bit预取机制(DDR3为8bit),同样内核频率下理论速度是DDR3的两倍。
低功耗:DDR4相对于DDR3具有更低的工作电压,通常为1.2V,相比DDR3的1.5V,功耗降低了一些。低功耗的特点有助于减少能源消耗,并且产生较少的热量。
高密度和容量支持:DDR4内存相对于DDR3可以支持更大的内存容量。DDR4内存模块的单个芯片密度更高,同时支持多通道和多插槽配置,可以提供更大的存储空间。
更严格的时序要求:DDR4引入了更严格的时序要求,以确保数据的稳定和可靠传输。通过更精细的时序控制,DDR4可以提供更高的性能和更好的信号完整性。
向后兼容性:DDR4内存模块通常不兼容DDR3的内存插槽,也就是说DDR4内存模块不能在DDR3兼容的主板上使用。然而,一些主板支持同时插槽DDR3和DDR4内存,但内存模块将以较低的速度和时序运行。
DDR5内存
DDR5是最新的内存类型,可以提供更高的传输速率和更高的带宽,可以达到8400 MHz的传输速率,同时还支持更高的容量、更高的带宽和更高的数据完整性。
主要特点
更高的速度和带宽:DDR5内存相对于DDR4有更高的内部时钟速度和数据传输速率,从而提供更高的带宽。DDR5的传输速率可以达到6400MT/s以上,比DDR4的最高传输速率提高了一倍以上。
更高的密度和容量支持:DDR5内存相对于DDR4可以支持更大的内存容量和更高的密度。DDR5内存模块的单个芯片容量更大,同时支持更多的通道和更多的插槽配置,可以提供更大的存储空间。
更低的功耗:DDR5内存相对于DDR4具有更低的工作电压和更高的能效。DDR5的工作电压通常为1.1V,比DDR4的1.2V低一些。低功耗的特点有助于减少能源消耗,并且产生较少的热量。
更严格的时序控制:DDR5引入了更严格的时序控制,以确保数据的稳定和可靠传输。通过更精细的时序控制,DDR5可以提供更高的性能和更好的信号完整性。
改进的错误修复和可靠性:DDR5引入了新的错误修复和可靠性功能,包括行级错误修复(RAS)和列级错误修复(CAS)。这些功能可以提供更好的数据完整性和可靠性,减少因内存错误导致的系统崩溃和数据损坏的风险。
总结
DDR4和DDR5相对于DDR3都提供了更高的性能和效率。然而,它们需要配备相应的主板和处理器才能正常运行,并且价格相对较高。选择哪种内存类型取决于您的具体需求和预算。如果您的计算机用途较为简单,DDR3内存已经足够满足您的需求,但如果您需要更高的性能和更多的扩展空间,可以选择DDR4或DDR5内存。比较重要的是,DDR3、DDR4和DDR5的内存都是不能混用的。
https://programmerblog.xyz/
原文链接:https://blog.csdn.net/xishining/article/details/133924632
内存双通道编辑
很多人经常将DDR/DDR2/DDR3和内存的双通道、三通道技术相混淆,事实上这是两组毫无关系的概念,DDR/X是一种内存的设计技术,而多通道内存技术是一种在主板上实现的并行内存访问技术,与使用的内存类型没有关系。两个通道甚至可以使用不同速率或访问时序的内存。
ROM:只读存储器
ROM所存数据,一般是装入整机前事先写好的,整机工作过程中只能读出,而不像随机存储器那样能快速地、方便地加以改写。
ROM所存数据稳定,断电后所存数据也不会改变。
发展:flash、HDD、SSD。
原文链接:https://blog.csdn.net/wd12306/article/details/130122365
频标
在无线电通信和电子工程中,通常指的是一个精确已知且稳定的频率信号源,用于校准、测试接收机或发射机的频率准确性,或者作为参考频率使用。例如,频标信号发生器可以产生不同频率的纯正弦波信号,用于设备调试、频率计数器的校准等。
频率标准通常指的是精确的频率源,如原子钟,它们用于设定和保持无线电通信系统、全球定位系统(GPS)、时间同步系统等的频率基准。在电子工程中,频率标准也用于测试和校准电路的频率响应。
重构
就是通过调整程序代码改善软件的质量、性能,使其程序的设计模式和架构更趋合理,提高软件的扩展性和维护性。但是这个解释缺少了一个前提,完整的说法应该是:在不改变软件可观察行为的前提下,通过调整程序代码改善软件的质量、性能,使其程序的设计模式和架构更趋合理,提高软件的扩展性和维护性。
指对软件系统进行根本性的重新设计,以便提高其可用性、可维护性和可扩展性,同时也可能为了降低成本、提升性能或满足新的业务需求。重构通常涉及对现有系统的深入理解,以及识别出可以改进的地方。
重构不同于“重写”(Rewriting),后者通常意味着用不同的编程语言或技术栈彻底重新开发一个系统。重构更注重在保留系统核心功能和结构的基础上进行内部结构的优化和升级。
重构的步骤通常包括:
-
需求分析:明确重构的目标和原因,确定需要解决的问题。
-
系统评估:对现有系统进行全面的评估,包括代码质量、架构设计、性能等。
-
设计新架构:根据评估结果设计新的系统架构,确定关键的改进点。
-
计划实施:制定详细的重构计划,包括时间表、资源分配、风险管理等。
-
逐步实施:按照计划逐步进行重构,可能包括代码重构、架构调整、功能升级等。
-
测试与验证:在重构过程中进行充分的测试,确保重构后的系统满足预期需求。
-
文档更新:更新系统的文档,包括技术文档和用户手册。
-
用户培训:如果重构影响了用户界面或使用方式,需要对用户进行重新培训。
重构是软件工程中的一个重要活动,可以帮助企业延长软件产品的生命周期,提高其市场竞争力。然而,重构也是一个复杂的过程,需要仔细规划和执行,以避免引入新的问题和风险。
重构的目的:
-
提高代码质量:通过消除代码冗余、复杂度和不良设计模式,使代码更加清晰和简洁。
-
增强可读性:使得代码更容易被理解和维护,降低新成员加入团队的学习成本。
-
提升可维护性:良好的代码结构便于未来的修改和扩展,减少维护成本。
-
促进代码复用:通过抽象和模块化,增加代码的复用性,减少重复代码。
-
提升性能:有时重构可以间接发现并解决性能瓶颈。
重构的最佳实践:
-
小步快跑:每次只重构一小块代码,频繁地编译和测试,确保每一步都未破坏原有功能。
-
使用自动化测试:重构前确保有充分的测试覆盖,重构后运行所有测试来验证行为未变。
-
理解现有代码:在重构之前彻底理解代码的功能和上下文,避免盲目修改。
-
遵循设计原则:如单一职责原则(SRP)、开闭原则(OCP)、里氏替换原则(LSP)等,这些原则指导你做出更好的设计决策。
-
适时重构:在添加新功能、修复错误或理解代码时发现不合理结构,都是重构的好时机。
-
代码审查:重构成果应该经过同事的代码审查,以确保改动合理且符合团队编码规范。
常见的重构手法:
-
提取函数(Extract Function):将一段代码封装成一个独立的函数,提高代码复用和阅读性。①拆分过长的函数。②提炼在多个函数中使用的相同代码。
-
内联函数(Inline Function)( 在C++中,以inline修饰的函数叫做内联函数,编译时C++编译器会调用内联函数的地方展开,没有函数压栈开销,内联函数提升程序运行的效率):将小而频繁调用的函数体直接嵌入调用处,减少函数调用开销。
-
提炼变量(Extract Variable):将复杂的表达式或魔法数字替换成有意义的变量名,增强代码的表达力。
-
搬移函数(Move Function):将函数移动到更适合的位置,通常是更相关的类或模块中。
-
重构继承关系(Replace Inheritance with Delegation/Composition):使用组合或委托代替继承,以减少耦合和提高灵活性。
重构是一个技术活,需要开发者具备良好的设计直觉、对代码的敏感度以及对软件设计原则的深刻理解。正确的重构不仅能改善现有代码,还能提升开发团队的整体技术水平和项目交付质量。
解耦
一、耦合
1、耦合是指两个或两个以上的体系或两种运动形式间通过相互作用而彼此影响以至联合起来的现象。
2、在软件工程中,对象之间的耦合度就是对象之间的依赖性。对象之间的耦合越高,维护成本越高,因此对象的设计应使类和构件之间的耦合最小。
3、分类:有软硬件之间的耦合,还有软件各模块之间的耦合。耦合性是程序结构中各个模块之间相互关联的度量。它取决于各个模块之间的接口的复杂程度、调用模块的方式以及哪些信息通过接口。
二、解耦
1、解耦,字面意思就是解除耦合关系。
2、在软件工程中,降低耦合度即可以理解为解耦,模块间有依赖关系必然存在耦合,理论上的绝对零耦合是做不到的,但可以通过一些现有的方法将耦合度降至最低。
3、设计的核心思想:尽可能减少代码耦合,如果发现代码耦合,就要采取解耦技术。让数据模型,业务逻辑和视图显示三层之间彼此降低耦合,把关联依赖降到最低,而不至于牵一发而动全身。原则就是A功能的代码不要写在B的功能代码中,如果两者之间需要交互,可以通过接口,通过消息,甚至可以引入框架,但总之就是不要直接交叉写。
4、观察者模式:观察者模式存在的意义就是「解耦」,它使观察者和被观察者的逻辑不再搅在一起,而是彼此独立、互不依赖。比如网易新闻的夜间模式,当用户切换成夜间模式之后,被观察者会通知所有的观察者「设置改变了,大家快蒙上遮罩吧」。QQ消息推送来了之后,既要在通知栏上弹个推送,又要在桌面上标个小红点,也是观察者与被观察者的巧妙配合。
三、如何解耦
1、反射解耦:我们可以利用Java的反射技术,通过类定名,来进行反射创建对象,这个时候我们可以成功的避免编译时异常,并且保证了项目在这个时候还能正常运行。
2、工厂模式解耦:在实际开发中我们可以把三层的对象都使用配置文件配置起来,当启动服务器应用加载的时候,让一个类中的方法通过读取配置文件,把这些对象创建出来并存起来。在接下来的使用的时候,直接拿过来用就好了。那么,这个读取配置文件,创建和获取三层对象的类就是工厂。
原文链接:https://blog.csdn.net/weixin_52536274/article/details/130334514
解耦(Decoupling)
是软件工程中的一项重要原则,指的是降低系统中各组件之间的相互依赖性,使得每个组件可以独立地开发、测试、部署和维护,而不会影响到其他部分。解耦的目标是提高系统的灵活性、可维护性和可扩展性。以下是实现解耦的一些策略和方法:
-
接口与抽象
-
定义清晰的接口:通过定义明确的接口(Interface)或抽象类,规定组件间的交互方式,隐藏具体实现细节。
-
依赖倒置原则(Dependency Inversion Principle, DIP):高层模块不应依赖于低层模块,两者都应该依赖于抽象。抽象不应该依赖于细节,细节应该依赖于抽象。
-
松耦合设计模式
-
工厂模式、抽象工厂模式:通过工厂类来创建对象,减少代码中对具体类的直接引用。
-
策略模式:定义一系列算法,将每个算法封装起来,并使它们可以相互替换,让算法的变化独立于使用算法的客户。
-
观察者模式:建立一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,当主题对象状态发生变化时,会通知所有观察者对象。
-
服务化与微服务架构
-
服务化:将大型应用拆分为一组小型服务,每个服务实现特定功能,并通过API进行通信。
-
微服务架构:这是一种更为彻底的服务化形式,每个服务都围绕着具体业务功能构建,拥有自己的数据库和独立运行的进程,服务之间通过轻量级通信机制(如HTTP RESTful API)交互。
-
模块化与组件化
-
模块化:将系统划分为多个模块,每个模块完成特定的功能,模块间通过明确定义的接口进行通信。
-
组件化:类似模块化,但更强调组件的可复用性和独立性,组件可以单独开发、测试和部署。
-
事件驱动与消息队列
-
事件驱动架构:系统中的组件通过发布和订阅事件来进行通信,而不是直接调用,从而减少直接耦合。
-
消息队列:利用消息中间件(如RabbitMQ、Kafka)异步处理请求,实现组件间的解耦。
-
配置与注入
-
依赖注入(Dependency Injection, DI):将依赖关系从代码中抽离出来,通过外部容器在运行时动态注入,降低组件间的耦合度。
-
配置文件:将配置信息从代码中分离出来,通过外部配置文件管理,使得系统更易于配置和修改。
通过以上方法,软件系统可以变得更加灵活、易于维护和扩展,同时提高开发效率和系统的整体健壮性
嵌入式与 bsp
嵌入式系统定义
IEEE(国际电气和电子工程师协会)对嵌入式系统的定义:“用于控制、监视或者辅助操作机器和设备的装置”。
国内普遍认同的嵌入式系统定义为:以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗等严格要求的专用计算机系统。可以这样认为,嵌入式系统是一种专用的计算机系统,作为装置或设备的一部分。
通常,嵌入式系统是一个控制程序存储在ROM中的嵌入式处理器控制板。事实上,所有带有数字接口的设备,如手表、微波炉、录像机、汽车等,都使用嵌入式系统,有些嵌入式系统还包含操作系统,但大多数嵌入式系统都是是由单个程序实现整个控制逻辑。
嵌入式系统的组成
一个嵌入式系统装置一般都由嵌入式计算机系统和执行装置组成,如图1-1所示,嵌入式计算机系统是整个嵌入式系统的核心,由硬件层、中间层、系统软件层和应用软件层组成。
执行装置也称为被控对象,它可以接受嵌入式计算机系统发出的控制命令,执行所规定的操作或任务。执行装置可以很简单,如手机上的一个微小型的电机,当手机处于震动接收状态时打开;也可以很复杂,如SONY 智能机器狗,上面集成了多个微小型控制电机和多种传感器,从而可以执行各种复杂的动作和感受各种状态信息。
下面对嵌入式计算机系统的组成进行介绍。
1)硬件层
硬件层中包含嵌入式微处理器、存储器(SDRAM、ROM、Flash等)、通用设备接口和 I/O接口(A/D、D/A、I/O等)备。在一片嵌入式处理器基础上添加电源电路、时钟电路和存储器电路,就构成了一个嵌入式核心控制模块。其中操作系统和应用程序都可以固化在ROM中。
(1)嵌入式微处理器
嵌入式系统硬件层的核心是嵌入式微处理器,嵌入式微处理器与通用CPU最大的不同在于:嵌入式微处理器大多工作在为特定用户群所专用设计的系统中,它将通用CPU许多由板卡完成的任务集成在芯片内部,从而有利于嵌入式系统在设计时趋于小型化,同时还具有很高的效率和可靠性。
嵌入式微处理器的体系结构可以采用冯·诺依曼体系或哈佛提醒哦结构;指令系统可以选用精简指令系统Reduced Instruction Set Computer,RISC)和复杂指令系统CISC(Complex Instruction Set Computer,CISC)。
CISC计算机在通道中只包含最有用的指令,确保数据通道快速执行每一条指令,从而提高了执行效率并使CPU硬件结构设计变得更为简单。
嵌入式微处理器有各种不同的体系,即使在同一体系中也可能具有不同的时钟频率和数据总线宽度,或集成了不同的外设和接口。据不完全统计,目前全世界嵌入式微处理器已经超过1000多种,体系结构有30多系列,其中主流的体系有ARM、MIPS、 PowerPC、X86和SH等。但与全球PC市场不同的是,没有一种嵌入式微处理器可以主导市场,仅以32位的产品而言,就有100种以上的嵌入式微处理器。嵌入式微处理器的选择是根据具体的应用而决定的。
(2)存储器
嵌入式系统需要存储器来存放和执行代码。包含Cache、主存和辅助存储器,其存储结构如图1-2所
嵌入式系统的存储结构示。
1>Cache
Cache是一种容量小、速度快的存储器阵列它位于主存和嵌入式微处理器内核之间,存放的是最近一段时间微处理器使用最多的程序代码和数据。在需要进行数据读取操作时,微处理器尽可能的从Cache中读取数据,而不是从主存中读取,这样就大大改善了系统的性能,提高了微处理器和主存之间的数据传输速率。
Cache的主要目标就是:减小存储器(如主存和辅助存储器)给微处理器内核造成的存储器访问瓶颈,使处理速度更快,实时性更强。
在嵌入式系统中Cache全部集成在嵌入式微处理器内,可分为数据Cache、指令Cache或混合Cache,Cache的大小依不同处理器而定。一般中高档的嵌入式微处理器才会把Cache集成进去。
2>主存
主存是嵌入式微处理器能直接访问的寄存器,用来存放系统和用户的程序及数据。它可以位于微处理器的内部或外部,其容量为256KB~1GB,根据具体的应用而定,一般片内存储器容量小,速度快,片外存储器容量大。
常用作主存的存储器有:
ROM类 NOR Flash、EPROM和PROM等。
RAM类 SRAM、DRAM和SDRAM等。
其中NOR Flash 凭借其可擦写次数多、存储速度快、存储容量大、价格便宜等优点,在嵌入式领域内得到了广泛应用。
3>辅助存储器
辅助存储器用来存放大数据量的程序代码或信息,它的容量大、但读取速度与主存相比就慢的很多,用来长期保存用户的信息。
嵌入式系统中常用的外存有:硬盘、NAND Flash、CF卡、MMC和SD卡等。
(3)通用设备接口和I/O接口
嵌入式系统和外界交互需要一定形式的通用设备接口,如A/D、D/A、I/O等,外设通过和片外其他设备的或传感器的连接来实现微处理器的输入/输出功能。每个外设通常都只有单一的功能,它可以在芯片外也可以内置芯片中。外设的种类很多,可从一个简单的串行通信设备到非常复杂的802.11无线设备。
目前嵌入式系统中常用的通用设备接口有A/D(模/数转换接口)、D/A(数/模转换接口),I/O接口有RS-232接口(串行通信接口)、Ethernet(以太网接口)、USB(通用串行总线接口)、音频接口、VGA视频输出接口、 I2C(现场总线)、SPI(串行外围设备接口)和IrDA(红外线接口)等。
2)中间层
硬件层与软件层之间为中间层,也称为硬件抽象层(Hardware Abstract Layer,HAL)或板级支持包(Board Support Package,BSP),它将系统上层软件与底层硬件分离开来,使系统的底层驱动程序与硬件无关,上层软件开发人员无需关心底层硬件的具体情况,根据 BSP 层提供的接口即可进行开发。该层一般包含相关底层硬件的初始化、数据的输入/输出操作和硬件设备的配置功能。
BSP具有以下两个特点:
硬件相关性:因为嵌入式实时系统的硬件环境具有应用相关性,而作为上层软 件与硬件平台之间的接口,BSP需要为操作系统提供操作和控制具体硬件的方法。
操作系统相关性:不同的操作系统具有各自的软件层次结构,因此,不同的操作系统具有特定的硬件接口形式。
实际上,BSP是一个介于操作系统和底层硬件之间的软件层次,包括了系统中大部分与硬件联系紧密的软件模块。
设计一个完整的BSP需要完成两部分工作:嵌入式系统的硬件初始化以及BSP功能,设计硬件相关的设备驱动。
(1)嵌入式系统硬件初始化
系统初始化过程可以分为3个主要环节,按照自底向上、从硬件到软件的次序依次为:片级初始化、板级初始化和系统级初始化。
片级初始化
完成嵌入式微处理器的初始化,包括设置嵌入式微处理器的核心寄存器和控制寄存器、嵌入式微处理器核心工作模式和嵌入式微处理器的局部总线模式等。片级初始化把嵌入式微处理器从上电时的默认状态逐步设置成系统所要求的工作状态。这是一个纯硬件的初始化过程。
板级初始化
完成嵌入式微处理器以外的其他硬件设备的初始化。另外,还需设置某些软件的数据结构和参数,为随后的系统级初始化和应用程序的运行建立硬件和软件环境。这是一个同时包含软硬件两部分在内的初始化过程。
系统初始化
该初始化过程以软件初始化为主,主要进行操作系统的初始化。BSP将对嵌入式微处理器的控制权转交给嵌入式操作系统,由操作系统完成余下的初始化操作,包含加载和初始化与硬件无关的设备驱动程序,建立系统内存区,加载并初始化其他系统软件模块,如网络系统、文件系统等。最后,操作系统创建应用程序环境,并将控制权交给应用程序的入口。
(2)硬件相关的设备驱动程序
BSP的另一个主要功能是硬件相关的设备驱动。硬件相关的设备驱动程序的初始化通常是一个从高到低的过程。尽管BSP中包含硬件相关的设备驱动程序,但是这些设备驱动程序通常不直接由BSP使用,而是在系统初始化过程中由BSP将他们与操作系统中通用的设备驱动程序关联起来,并在随后的应用中由通用的设备驱动程序调用,实现对硬件设备的操作。与硬件相关的驱动程序是BSP设计与开发中另一个非常关键的环节。
3)系统软件层
由实时多任务操作系统(Real-time Operation System,RTOS)、文件系统、图形用户接口(Graphic User Interface,GUI)、网络系统及通用组件模块组成。RTOS是嵌入式应用软件的基础和开发平台。
(1)嵌入式操作系统EOS
是一种用途广泛的系统软件,过去它主要应用与工业控制和国防系统领域。EOS负责嵌入系统的全部软、硬件资源的分配、任务调度,控制、协调并发活动。它必须体现其所在系统的特征,能够通过装卸某些模块来达到系统所要求的功能。目前,已推出一些应用比较成功的EOS产品系列。随着 Internet技术的发展、信息家电的普及应用及EOS的微型化和专业化,EOS开始从单一的弱功能向高专业化的强功能方向发展。嵌入式操作系统在系统实时高效性、硬件的相关依赖性、软件固化以及应用的专用性等方面具有较为突出的特点。EOS是相对于一般操作系统而言的,它除具有了一般操作系统最基本的功能,如任务调度、同步机制、中断处理、文件处理等外,还有以下
4)应用软件层
应用软件层是由基于实时系统开发的应用程序组成,用来实现对被控对象的控制功能。功能层是要面对被控对象和用户,为方面用户操作,往往需要提供一个友好的人机界面。
对于一些复杂的系统,在系统设计的初期阶段就要对系统的需求进行分析,确定系统的功能,然后将系统的功能映射到整个系统的硬件、软件和执行装置的设计过程中,称为系统的功能实现。
嵌入式设备的主控芯片
嵌入式应用的多样化主要体现在嵌入式设备主控芯片 和外围设备的多样化,目前,嵌入式设备的主控芯片类型包括四类:微控制器 、嵌入式处理器 、DSP 处理器和片上系统SOC。嵌入式外围设备种类繁多,而且不同的嵌入式应用有不同的外挂设备,为了支持这些不同的外挂设备就必须有这些不同设备的板级支持包BSP (board support package).
根据其现状,嵌入式处理器可以分成下面几类:
◆嵌入式微处理器(MICRO Processor Unit,MPU)
嵌入式微处理器是由通用计算机中的CPU 演 变而来的。它的特征是具有32位以上的处理器,具有较高的性能,当然其价格也相应较高。但与计算机处理器不同的是,在实际嵌入式应用中,只保留和嵌入式应 用紧密相关的功能硬件,去除其他的冗余功能部分,这样就以最低的功耗和资源实现嵌入式应用的特殊要求。和工业控制计算机相比,嵌入式微处理器具有体积小、 重量轻、成本低、可靠性高的优点。目前主要的嵌入式处理器类型有Am186/88、386EX、SC-400、POWER PC、68000 、MIPS、ARM/ StrongARM系列等。
其中Arm/StrongArm是专为手持设备开发的嵌入式微处理器,属于中档的价位。
◆嵌入式微控制器 (MICRO controller Unit, MCU)
嵌入式微控制器的典型代表是单片机,从70年代末单片机出现到今天,虽然已经经过了20多年的历史,但这种8位的电子 器件目前在嵌入式设备中仍然有着极其广泛的应用。单片机芯 片内部集成ROM/EPROM、RAM、总线 、总线逻辑、定时/计数器 、看门狗、I/O、串行口、脉宽调制输出、A/D、D/A、Flash RAM、EEPROM 等各种必要功能和外设。和嵌入式微处理器相比,微控制器的最大特点是单片化,体积大大减小,从而使功耗和成本下降、可靠性提高。微控制器是目前嵌入式系统工业的主流。微控制器的片上外设资源一般比较丰富,适合于控制,因此称微控制器。
由于MCU低廉的价格,优良的功能,所以拥有的品种和数量最多,比较有代表性的包括8051、MCS-251、 MCS-96/196/296、P51XA、C166/167、68K系列以及 MCU 8XC930/931、C540、C541,并且有支持I2C、CAN-Bus、LCD 及众多专用MCU和兼容系列。目前MCU占嵌入式系统约70%的市场份额。近来Atmel出产的Avr单片机由于其集成了FPGA等器件,所以具有很高的性价比,势必将推动单片机获得更高的发展。
◆嵌入式DSP处理器(Embedded Digital Signal Processor, EDSP)
DSP处理器是专门用于信号处理方面的处理器,其在系统结构和指令算法方面进行了特殊设计,具有很高的编译效率和指令的执行速度。在数字滤波、FFT、谱分析等各种仪器 上DSP获得了大规模的应用。
DSP的理论算法在70年代就已经出现,但是由于专门的DSP处理器还未出现,所以这种理论算法只能通过MPU等由分立元件实现。MPU较低的处理速度无法满足DSP的算法要求,其应用领域仅仅局限于一些尖端的高科技领域。随着大规模集成电路 技术发展,1982年世界上诞生了首枚DSP芯片 。 其运算速度比MPU快了几十倍,在语音合成和编码解码器中得到了广泛应用。至80年代中期,随着CMOS技术的进步与发展,第二代基于CMOS工艺的 DSP芯片应运而生,其存储容量和运算速度都得到成倍提高,成为语音处理、图像硬件处理技术的基础。到80年代后期,DSP的运算速度进一步提高,应用领 域也从上述范围扩大到了通信和计算机方面。90年代后,DSP发展到了第五代产品,集成度更高,使用范围也更加广阔。
目前最为广泛应用的是TI的TMS320C2000 /C5000系列,另外如Intel的MCS-296和Siemens的TriCore也有各自的应用范围。
◆嵌入式片上系统(System On Chip)
SoC追求产品系统最大包容的集成器件,是目前嵌入式应用领域的热门话题之一。
SOC最大的特点是成功实现了软硬件无缝结合,直接在处理器片内嵌入操作系统的代码模块。而且SOC具有极高的综合性,在一个硅片内部运用VHDL等硬件描述语言,实现一个复杂的系统。用户 不需要再像传统的系统设计一样,绘制庞大复杂的电路板, 一点点的连接焊制,只需要使用精确的语言,综合时序设计直接在器件库中调用各种通用处理器的标准,然后通过仿真之后就可以直接交付芯片厂商进行生产。由于 绝大部分系统构件都是在系统内部,整个系统就特别简洁,不仅减小了系统的体积和功耗,而且提高了系统的可靠性,提高了设计生产效率。
BSP(Board Support Package,板级支持包)
是指为特定硬件平台(如嵌入式系统、单板计算机等)提供的软件包,它包含了一系列驱动程序、配置文件、启动加载程序(Bootloader)、库文件以及必要的API,目的是为了支持操作系统(如Linux、RTOS等)在该硬件平台上顺利运行。BSP的主要作用和内容包括:
-
硬件初始化:提供硬件初始化代码,如CPU、内存控制器、外设控制器(如串口、网卡、GPIO、定时器等)的初始化,确保硬件处于可工作的状态。
-
Bootloader:一个小型的程序,负责加载操作系统内核到内存中并启动它。BSP通常包含或兼容特定的Bootloader,如U-Boot或RedBoot。
-
驱动程序:提供设备驱动程序,使得操作系统能够识别和控制硬件设备。这包括显卡、网络、存储、输入输出等设备的驱动。
-
中断处理:实现中断处理机制,确保操作系统能正确响应硬件产生的中断信号。
-
系统时钟和定时器配置:设置CPU和系统时钟频率,配置定时器,为操作系统提供时间基准和服务。
-
内存管理:配置内存布局,包括RAM、ROM、Flash等的分配和管理,确保操作系统和应用程序有足够的内存空间。
-
调试支持:提供调试接口和工具,帮助开发者在目标硬件上进行调试工作。
-
API和库:为应用程序提供访问硬件的接口和库函数,使得开发者能够在操作系统层面编写应用软件时,无需关心底层硬件细节。
-
文档和示例:详细的硬件说明、接口描述、配置指南和示例代码,帮助用户快速上手和集成操作系统。
BSP的开发和定制是嵌入式系统开发过程中的关键步骤,它是连接硬件平台和操作系统或应用程序的桥梁,极大地影响着系统的性能、稳定性和开发效率。不同的硬件平台需要专门定制的BSP,以满足特定的操作系统要求和应用场景。
BSP概念总结
BSP在嵌入式系统和Windows系统中的不同
在日常生活中使用的PC机上(windows或linux系统)也是有BSP的,只是PC机均采用的CPU架构为统一的x86体系架构。因此操作系统的BSP相对x86架构是单一确定的,不需要做任何修改就可以很容易支持操作系统在x86上正常运行,所以在PC机上谈论BSP这个概念没有什么意义了。
而嵌入式系统则完全不同,目前市场上存在多种架构的的嵌入式CPU(ARM,MIPS,RISC-V等),同时外围设备也会根据需求有不同的选择和定义。一个嵌入式操作系统针对不同的CPU,会有不同的BSP。即使同一种CPU,由于外设的差别,其BSP相应的部分也不一样。所以根据硬件设计编写和修改BSP,保证系统正常的运行是非常重要的。
BSP和PC机主板上的BIOS区别
BSP和PC机主板上的BIOS区别很大,BIOS主要是负责在电脑开启时检测、初始化系统设备(设置栈指针,中断分配,内存初始化等)、装入操作系统并调度操作系统向硬件发出的指令,它的Firmware代码是在芯片生产过程中固化的,一般来说用户是无法修改。其实是为下载运行操作系统做准备,把操作系统由硬盘加载到内存,并传递一些硬件接口设置给系统。
在OS正常运行后,BIOS的作用基本上也就完成了,这就是为什么更改BIOS一定要从新关机开机。PC机BIOS的作用更象嵌入式系统中的Bootloader(最底层的引导软件,初始化主板的基本设置,为接收外部程序做硬件上的准备)。与Bootloader不同的是BIOS在装载OS系统的同时,还传递一些参数设置(中断端口定义等),而Bootloader只是简单的装载系统。
BSP和操作系统绑在一起运行在主板上,尽管BSP的开始部分和BIOS所做的工作类似,可是大部分和BIOS不同,作用也完全不同。此外BSP还包含和系统有关的基本驱动(串口,网口等),此外程序员还可以编程修改BSP,在BSP中任意添加一些和系统无关的驱动或程序,甚至可以把上层开发的统统放到BSP中。而BIOS程序是用户不能更改,编译编程的,只能对参数进行修改设置。更不会包含一些基本的硬件驱动。
BSP与HAL(硬件抽象层)的关系
硬件的变动将会对BSP(板级支持层)进行大规模改动,无疑对BSP的维护是一种巨大的负担。引入了HAL(硬件抽象层)的概念,由HAL库对BSP库进一步的封装,形成统一的标准,而下次再改动硬件电路部分时,只需要改动BSP库的具体功能函数,而不需要对上层进行任何的修改。
原文链接:https://blog.csdn.net/leesan0802/article/details/124087630
操作系统
1.1操作系统的定义和目标
定义:操作系统是控制管理计算机系统的硬软件,分配调度资源的系统软件。对于普通终端用户来说是一个操作环境, 是执行各种操作的一个平台。
目标:方便性,有效性(提高系统资源的利用率、提高系统的吞吐量),可扩充性,开放性。
1.2 操作系统的基本功能
统一管理计算机资源:处理器资源,IO设备资源,存储器资源,文件资源;
实现了对计算机资源的抽象:IO设备管理软件提供读写接口,文件管理软件提供操作文件接;
提供了用户与计算机之间的接口:GUI(图形用户界面),命令形式,系统调用形式。
1.3 操作系统的特征
最基本的特征,互为存在条件:并发,共享;
(1)并行:指两个或多个事件可以在同一个时刻发生,多核CPU可以实现并行,一个cpu同一时刻只有一个程序在运行;
(2)并发:指两个或多个事件可以在同一个时间间隔发生,用户看起来是每个程序都在运行,实际上是每个程序都交替执行。
(3)共享性:操作系统的中资源可供多个并发的程序共同使用,这种形式称之为资源共享。
互斥共享:当资源被程序占用时,其它想使用的程序只能等待。
同时访问:某种资源并发的被多个程序访问。
虚拟和异步特性前提是具有并发性。
(4)虚拟性:表现为把一个物理实体转变为若干个逻辑实体。
时分复用技术:资源在时间上进行复用,不同程序并发使用,多道程序分时使用计算机的硬件资源,提高资源的利用率。
空分复用技术:用来实现虚拟磁盘(物理磁盘虚拟为逻辑磁盘,电脑上的C盘、D盘等)、虚拟内存(在逻辑上扩大程序的存储容量)等,提高资源的利用率,提高编程效率。
(5)异步性:在多道程序环境下,允许多个进程并发执行,但由于资源等因素的限制,使进程的执行以“停停走走”的方式运行,而且每个进程执行的情况(运行、暂停、速度、完成)也是未知的。
原文链接:https://blog.csdn.net/Royalic/article/details/119999404
五、操作系统的作用
1、作为用户和计算机硬件的接口
操作系统改造和扩充过的计算机不但功能更强,使用也更加方便,用户可以直接调用系统提供的各种功能,而无需了解软硬件本身的细节,为用户提供了一个与运行底层细节无关可管理的运行环境,对于用户来讲,操作系统便成为了他与计算机硬件之间的一个接口。
2、作为计算机系统的资源管理者
操作系统管理的计算机系统软硬件资源包括:处理机、存储器、设备、文件(程序和数据)
处理机:计算机系统中存储程序和数据,并按照程序规定的步骤执行指令的部件。包括:中央处理器(CPU)、主存储器、输入-输出接口(I/O接口)。处理器加上外围设备如鼠标、键盘等,就构成完整的计算机系统
中央处理器:CPU,一块超大规模的集成电路,是一台计算机的运算核心和控制核心。其功能主要为解释计算机指令和处理计算机软件中的数据。
内核:操作系统的构件(操作系统的基本单元)。
3、作为虚拟计算机(扩充机器)
虚拟计算机:操作系统是紧靠硬件的第一层软件,计算机上覆盖操作系统后,可以拓展基本功能,为用户提供一台功能显著增强,使用更加方便,安全可靠性好,效率明显提高的机器,称为虚拟计算机或者操作系统虚机器(Virtual Machine)。
六、操作系统的功能
1、处理机管理
处理机管理的主要任务是对处理机的分配和运行实施有效的管理,包括进程控制、进程同步、进程通信和调度。
进程控制:负责进程的创建、撤销及状态转换
进程同步:对并发执行的进程进行协调,有同步与互斥
进程通信:负责完成进程之间的信息交换
调度:分为作业调度(从后备作业队列中按照一定的原则,选择若干作业进入内存)和进程调度(决定哪个进程获得处理机)
2、存储器管理
存储器管理的主要任务是方便用户使用存储器,提高存储器的利用率,从逻辑上扩充内存。存储器管理包括内存分配、内存保护、内存扩充和地址映射。
3、设备管理
设备管理功能包括设备分配、缓冲管理、设备驱动和设备独立性。
设备分配:根据用户的I/O请求,为之分配所需的设备,设备使用完成后还应该回收。
缓冲管理:对各类设备的缓冲区进行有效的管理
设备驱动:主要完成设备启动、I/O操作及中断处理
设备独立性:如何确保应用程序独立于物理设备,如何虚拟化设备
4、文件管理
文件管理的主要任务是对文件进行管理,方便用户使用并保证文件的安全性。文件管理功能包括文件存储空间的管理、目录管理、文件操作管理和文件保护。
文件存储空间的管理:包括存储空间的分配与回收等功能
目录管理:管理文件的数据结构,提供按名存取的功能
文件操作管理:从外存读入数据或将数据写入外存
文件保护:防止未授权用户存取文件,防止授权用户以不正确方式存取文件
原文链接:https://blog.csdn.net/m0_62056106/article/details/129320510
实时操作系统(RTOS)
是一种专门为实时应用程序设计的操作系统。与通用操作系统不同,RTOS具有极低的延迟和可预测的响应时间,这对于需要快速响应输入和输出的应用程序非常重要。这些应用程序包括航空航天、工业自动化、医疗设备、通信设备、嵌入式系统等。
实时操作系统的主要特征包括:
实时性:RTOS能够在严格的时间限制内完成操作,能够及时地响应外部事件。
可靠性:RTOS能够保证系统的可靠性和稳定性,尽可能地避免系统崩溃和死锁。
多任务处理:RTOS能够同时处理多个任务,保证系统的高效性和灵活性。
低延迟:RTOS能够实现非常低的响应延迟,从而提高系统的实时性。
可裁剪性:RTOS可以根据具体的应用需求进行定制和裁剪
常见的嵌入式操作系统及其特点
FreeRTOS:一个基于实时内核的开源操作系统,适用于嵌入式设备和实时应用程序。
uC/OS:一个用于嵌入式系统的实时操作系统,支持多任务、消息传递、定时器、信号量、互斥量等功能。
Linux及其衍生系统:一个基于Linux内核的开源操作系统,适用于嵌入式设备和系统,具有良好的可移植性和可扩展性,支持多任务、多线程、进程管理、文件系统等功能。
VxWorks:一个实时操作系统,具有可靠性高、可定制性强、支持多任务、多线程等特点,广泛用于工业自动化、网络设备等领域。
Nucleus RTOS:一种实时操作系统,适用于高性能嵌入式系统,支持多任务、多线程、消息队列等功能,具有低延迟、低开销的特点。
ThreadX:一个实时嵌入式操作系统,具有低开销、可裁剪的特点,适用于内存受限的嵌入式设备。
embOS:一种实时嵌入式操作系统,支持多任务、多线程、定时器、信号量等功能,适用于对实时性要求高的应用。
QNX:一种实时操作系统,具有可靠性高、可定制性强、支持多任务、多线程等特点,广泛用于汽车、航空、医疗等领域。
这些嵌入式操作系统各有优点和特点,适用于不同的应用场景。在选择嵌入式操作系统时,需要考虑应用的实时性、资源需求、功能要求等多个因素。
原文链接:https://blog.csdn.net/qq_54140018/article/details/129845215
嵌入式操作系统
嵌入式操作系统:对整个智能芯片以及它所控制的各种部件模块等资源进行统一调度、指挥和控制的系统软件。
应用:嵌入式操作系统几乎包括了生活中的所有的电器设备,如平板、手机(Android、iOS等)、微波炉、数字相机、自动售货机等
延伸:嵌入式系统进一步延伸,目前有移动操作系统、手机操作系统、物联网系统、工业控制系统等。 原文链接:https://blog.csdn.net/m0_62056106/article/details/129320510
X86架构和ARM架构什么区别
X86架构和ARM架构是两种不同的处理器架构,它们在设计理念、指令集、应用领域和市场定位等方面存在显著差异。
-
设计理念:
-
X86架构:由英特尔公司最初开发,是一种复杂指令集计算机(CISC)架构。它的设计侧重于提供丰富的指令集,以支持复杂的操作,使得软件编写更加容易。
-
ARM架构:由英国ARM Holdings公司开发,是一种精简指令集计算机(RISC)架构。它的设计理念是简化指令集,每条指令尽可能简单,以提高执行速度和降低功耗。
-
-
指令集:
-
X86架构:拥有一个庞大的指令集,支持各种复杂的操作,包括浮点运算、多任务处理等。
-
ARM架构:指令集相对简单,主要包括基础的算术和逻辑操作,以及用于控制流程的指令。ARM架构通过组合简单的指令来执行复杂的操作。
-
-
应用领域:
-
X86架构:广泛应用于个人电脑(PC)、服务器和一些高端嵌入式系统中。英特尔的X86处理器是桌面和服务器市场的主导者。
-
ARM架构:最初主要用于移动设备,如智能手机和平板电脑,但由于其低功耗特性,逐渐被应用到嵌入式系统、物联网(IoT)、服务器和其他消费电子产品中。
-
-
市场定位:
-
X86架构:通常用于需要高性能和兼容性的场景,如传统的PC和服务器市场。
-
ARM架构:专注于低功耗和高性能的平衡,适合于电池供电的移动设备和对能效有要求的嵌入式系统。
-
-
能源效率:
-
X86架构:由于其复杂性和历史的设计,通常在同等性能下比ARM架构消耗更多的能源。
-
ARM架构:以其出色的能源效率而闻名,能够在低功耗下提供良好的性能。
-
-
兼容性和生态系统:
-
X86架构:拥有成熟的生态系统,包括大量的操作系统、驱动程序和应用程序。
-
ARM架构:虽然生态系统较X86架构年轻,但随着其在移动设备市场的成功,也发展出了包括安卓和iOS在内的广泛操作系统支持。
-
总的来说,X86架构和ARM架构各有特点,分别适用于不同的市场需求。X86架构在桌面和服务器市场占据主导地位,而ARM架构在移动设备和嵌入式系统市场中占据主导地位。随着技术的发展,两种架构在某些领域(如服务器和移动设备)之间的界限变得越来越模糊。
RISC指令集
RISC(Reduced Instruction Set Computing,精简指令集计算)是一种微处理器设计哲学,旨在通过简化计算机处理器中的指令集来提高运算效率。RISC设计原则起源于对CISC(Complex Instruction Set Computing,复杂指令集计算)体系的反思与改进,其核心理念包括:
-
指令简化:RISC架构专注于提供一组少量的、使用频率高的简单指令,这些指令通常具有固定长度,执行速度快。相比于CISC架构中包含的大量复杂指令,RISC减少了指令的种类和复杂性。
-
提高运行速度:通过减少每条指令的复杂度,RISC处理器能够更快地执行单个指令,同时,由于指令长度固定,也便于实现指令流水线技术,进一步提升处理速度。
-
通用寄存器增多:RISC架构通常配备更多的通用寄存器,减少对慢速内存的访问,因为数据更多地在寄存器之间直接传递,这有助于提升性能。
-
单一周期执行:很多RISC指令设计为能在单个时钟周期内完成,简化了处理器的设计并提高了执行效率。
-
编译器负担加重:由于指令集简化,一些复杂的操作需要通过多条简单指令组合来完成,这要求编译器更加智能,以生成高效的代码。
-
超标量与超流水线结构:RISC处理器常采用超标量技术和超流水线设计,允许多个指令同时执行,进一步提升了处理器的并行处理能力。
RISC架构的这些特点使其在很多领域,特别是那些对功耗敏感和需要高性能计算的场景(如移动设备、嵌入式系统、高性能计算服务器等)中得到广泛应用。著名的RISC架构处理器包括MIPS、ARM、PowerPC、SPARC等。
嵌入式操作系统的整体架构
1.嵌入式操作系统特点及分类
嵌入式操作系统(Embedded Operating System,EOS)是一种支持嵌入式系统应用的实时操作系统,是嵌入式系统极为重要的组成部分。
1.1嵌入式操作系统的特点
目前存在很多种嵌入式操作系统,如VxWorks、μC/OS、嵌入式Linux和WinCE等,这些操作系统功能日益完善,在嵌入式系统中能实现很多桌面通用操作系统具备的功能。嵌入式操作系统除了具有通用操作系统的基本特点之外,更有其特殊的部分,如高实时性、可裁剪性、高可靠性、接口统一、网络功能强大、体积小巧、固化代码、操作简单易学等特点,其中重要的包括高实时性、可裁剪性和高可靠性等。
1)高实时性
大多数嵌入式操作系统工作在对实时性要求很高的场合,如监测控制、数据采集和信息处理等。这些过程往往是一个连续的过程,一个过程必须在一个定长的时间内完成,否则若逻辑和时序出现偏差,将会引起严重后果。因此,嵌入式操作系统中实时性是其重要特征之一。
2)可裁剪性
由于嵌入式系统是面向单一设备的单一应用,其环境复杂多变,如硬件环境中除CPU之外,其他硬件并没有标准化,而系统的应用对功能、可靠性、成本、体积和功耗等有一定需求。因此,嵌入式操作系统必须是开放的、可伸缩的体系结构,其中的很多部件必须具有很强的可裁剪性,便于修改,从而能适应不同嵌入式系统的需求。
3)高可靠性
高可靠性是嵌入式系统的基本特征之一,嵌入式系统中,出于安全方面的考虑,要求系统不能崩溃,而且还要有自愈能力。因此,作为嵌入式系统的最基本软件的操作系统,需要尽可能减少安全漏洞和不可靠的隐患,通过系统监控进程监视各进程的运行状况,在遇到异常情况时采取措施对其进行修复,实施有利于系统稳定可靠的方法将问题解决,从而从嵌入式系统的底层增强可靠性。
4)统一的接口
嵌入式操作系统可提供各种设备的驱动接口。随着各类嵌入式操作系统的开发,考虑到为嵌入式应用软件的设计者提供统一的服务接口,就必须约定嵌入式系统提供的接口,从而为嵌入式应用软件的运行提供无关性平台。
5)网络功能强大
嵌入式操作系统必须不仅能支持TCP/IP协议,还能支持其他如UDP/PPP协议等,并为嵌入式系统提供统一的MAC访问层接口,从而为各种移动计算设备预留接口,提供对更多的嵌入式系统的支持。
1.2嵌入式操作系统的分类
当前,常用的嵌入式操作系统可分为商用系统、专用系统以及开放系统三大类。
1)商用嵌入式操作系统
商用嵌入式操作系统功能较强大,辅助工具较齐全,可应用的范围也较广,在许多领域都有应用,例如Microsoft的WindowsCE、WindRiver的VxWorks、EPSON的ROS33、CoreTek的 DeltaOS、pSOS+、3Com的PalmOS以及中科院的Hopen等。
2)专用嵌入式操作系统
专用嵌入式操作系统一般不对用户公开,它是一些专业的公司针对该公司产品所特制的嵌入式操作系统。专用嵌入式操作系统功能相对较弱,但具有较强的针对性,而且比普通的商用嵌入式操作系统更加安全可靠。
3)开放嵌入式操作系统
开放嵌入式操作系统是近年来迅速发展的一类操作系统。因为应用系统的开发者可免费得到这些系统的源代码,因此开发难度低。但开放嵌入式操作系统的功能简单,技术支持以及系统的稳定性也相对较差,因此对应用系统开发者提出了较高的要求。
2.嵌入式操作系统的总体架构
嵌入式操作系统通常包括与硬件相关的底层驱动软件、系统内核、设备驱动接口、通信协议、图形界面和标准化浏览器Browser等。随着嵌入式系统的发展,嵌入式操作系统的体系结构出现了单块结构、分层结构、微内核结构和构件化结构等多种。
1.单块结构
单块结构是最早出现的一种结构,该结构将整个嵌入式实时操作系统看成一个整块,内部分为若干个模块,模块之间直接相互调用,不分层次,形成网状调用模式,如图12.1所示。
由于单块结构本身具有强大功能的完整内核,能为嵌入式软件开发提供非常完整的平台,因此,其具有以下特点:
(1)可设置嵌入式芯片的通用接口。
(2)允许设备驱动器、网络服务器、防火墙等复用一些公共的代码或其他开源代码。
(3)根据功能进行系统的开发,避免实现多余功能以及额外的内存占用。
(4)用户运行的应用程序设计简洁、开发简单、易于调试、相对可靠。
(5)大多数嵌入式系统对实时性要求不高,单块结构可以实现快速响应。
(6)通过硬件的设计保证对请求的快速响应。
(7)对简单的小系统,单块结构有几乎最高的系统效率和实时性保障。
(8)通用RTOS系统的单位成本更低。
(9)对于复杂系统的应用,需大量硬件资源。
(10)内核的复杂性使系统的运行变得不可预测和不可靠。
(11)模块越多,模块之间的依赖越严重,在可裁剪性、可扩展性、可移植性和可维护性等方面存在明显缺陷,制约了该类结构RTOS 的应用。
单块结构常应用在WindowsCE和嵌入式系统中。
2.分层结构
分层结构是现今许多流行的嵌入式实时操作系统所采用的体系结构,在分层结构中,每一层对其上层好像一个虚拟计算机,下层为上层提供服务,上层使用下层提供的服务;在层与层之间定义良好的接口,上下层通过结构进行交互和通信;每一层中划分为一个或多个模块(组件),并可针对应用需求配置个性化RTOS。整个分层结构如图12.2所示。
分层结构的实时多任务内核部分是整个分层结构的核心,其基本工作是任务切换,其运行与队列密不可分;分层结构中的其他部分是对整个嵌入式操作系统的有力支撑,包括存储管理、I/O设备管理(包括逻辑I/O和设备驱动)、嵌入式文件系统、网络系统和命令解释器等。
分层结构常用于VxWorks、DeltaOS等嵌入式操作系统中。
3.微内核结构
微内核结构是目前的主流结构之一,又称为客户/服务器(C/S)结构,在这种体系结构中,微内核仅提供任务调度、任务间通信、底层网络通信、中断处理接口和实时时钟等几种基本服务,且内核非常小,任务在独立的地址空间运行,速度极快;而传统的操作系统提供的其他服务,如存储管理、文件管理、中断处理和网络通信协议等,在内核以上以协作任务的形式出现,每个协作任务可以看成一个功能服务器。微内核结构如图12.3所示。
由于微内核结构中将内核功能和其他服务功能分开,因此,微内核结构具有以下优点和不足:
(2)可以更方便地扩展功能,包括动态扩展。
(3)可以更容易地做到上层应用与下层系统的分离,便于系统移植。
(4)服务模块的可重用性高。
(5)在任务执行时,需要客户端与服务器端通信,会增加一定的开销,与整体系统相比性能将有一定的下降。
微内核结构常用于QNX等嵌入式操作系统中。
4.构件化结构
构件化结构是采用构件组装思想及技术而设计的体系结构,在构件化结构中,嵌入式操作系统的内核由一组独立的构件和一个构件管理器组成,构件管理器用于维护内核构件之间的协作关系。构件化结构如图12.4所示。
构件化结构具有以下特点:
(1)所有嵌入式操作系统抽象都由可加载的构件实现,配置灵活,裁剪方便。
(2)构件之间具有统一标准的交互式界面,便于用户掌握,方便应用程序开发。
(3)传统服务作为一个构件或由一些相互协作的构件构成,可为应用软件开发提供统一的编程接口。
(4)通过构件组装检验,可以确保生成的嵌入式操作系统满足设计约束。
(5)可以提供硬件无关性支持。
构件化结构应用在TinyOS等嵌入式操作系统中。
统服务作为一个构件或由一些相互协作的构件构成,可为应用软件开发提供统一的编程接口。
(4)通过构件组装检验,可以确保生成的嵌入式操作系统满足设计约束。
(5)可以提供硬件无关性支持。
构件化结构应用在TinyOS等嵌入式操作系统中。
总而言之,上述的体系结构都是目前较为流行的结构,从中充分体现了嵌入式操作系统的高实时性、高可靠性和可裁剪性等特点。
原文链接:https://blog.csdn.net/weixin_55953651/article/details/133746308
嵌入式操作系统选择原则和对比
嵌入式系统是以应用为中心,软硬件可裁减的,适用于对功能、可靠性、成本、体积、功耗等综合性严格要求的专用计算机系统。具有软件代码小、高度自动化、响应速度快等特点,特别适合于要求实时和多任务的体系。嵌入式系统主要由嵌入式处理器、相关支撑硬件、嵌入式操作系统及应用软件系统等组成,它是可独立工作的“器件”。
一、嵌入式操作系统的发展
作为嵌入式系统(包括硬、软件系统)极为重要的组成部分的嵌入式操作系统,通常包括与硬件相关的底层驱动软件、系统内核、设备驱动接口、通信协议、图形界面、标准化浏览器等。嵌入式操作系统具有通用操作系统的基本特点,如能够有效管理越来越复杂的系统资源;能够把硬件虚拟化,使得开发人员从繁忙的驱动程序移植和维护中解脱出来;能够提供库函数、驱动程序、工具集以及应用程序。与通用操作系统相比较,嵌入式操作系统在系统实时高效性、硬件的相关依赖性、软件固态化以及应用的专用性等方面具有较为突出的特点。
嵌入式操作系统伴随着嵌入式系统的发展经历了四个比较明显的阶段:
第一阶段:无操作系统的嵌入算法阶段。
以单芯片为核心的可编程控制器形式的系统,具有与监测、伺服、指示设备相配合的功能。应用于一些专业性极强的工业控制系统中,通过汇编语言编程对系统进行直接控制,运行结束后清除内存。系统结构和功能都相对单一,处理效率较低,存储容量较小,几乎没有用户接口。
第二阶段:以嵌人式CPU为基础、简单操作系统为核心的嵌入式系统。
CPU种类繁多,通用性比较差;系统开销小,效率高;一般配备系统仿真器,操作系统具有一定的兼容性和扩展性;应用软件较专业,用户界面不够友好;系统主要用来控制系统负载以及监控应用程序运行。
第三阶段:通用的嵌人式实时操作系统阶段,以嵌入式操作系统为核心的嵌入式系统。
能运行于各种类型的微处理器上,兼容性好;内核精小、效率高,具有高度的模块化和扩展性;具备文件和目录管理、设备支持、多任务、网络支持、图形窗口以及用户界面等功能;具有大量的应用程序接口(APl);嵌入式应用软件丰富。
第四阶段:以基于Internet为标志的嵌入式系统。
这是一个正在迅速发展的阶段。目前大多数嵌入式系统还孤立于Internet之外,但随着Internet的发展以及Internet技术与信息家电、工业控制技术等结合日益密切,嵌入式设备与Intemet的结合将代表着嵌入式技术的真正未来。
二、使用实时操作系统的必要性
嵌入式实时操作系统在目前的嵌入式应用中用得越来越广泛,尤其在功能复杂、系统庞大的应用中显得愈来愈重要。
1.嵌人式实时操作系统提高了系统的可靠性。
在控制系统中,出于安全方面的考虑,要求系统起码不能崩溃,而且还要有自愈能力。不仅要求在硬件设计方面提高系统的可靠性和抗干扰性,而且也应在软件设计方面提高系统的抗干扰性,尽可能地减少安全漏洞和不可靠的隐患。长期以来的前后台系统软件设计在遇到强干扰时,使得运行的程序产生异常、出错、跑飞,甚至死循环,造成了系统的崩溃。而实时操作系统管理的系统,这种干扰可能只是引起若干进程中的一个被破坏,可以通过系统运行的系统监控进程对其进行修复。通常情况下,这个系统监视进程用来监视各进程运行状况,遇到异常情况时采取一些利于系统稳定可靠的措施,如把有问题的任务清除掉。
2.提高了开发效率,缩短了开发周期。
在嵌入式实时操作系统环境下,开发一个复杂的应用程序,通常可以按照软件工程中的解耦原则将整个程序分解为多个任务模块。每个任务模块的调试、修改几乎不影响其他模块。商业软件一般都提供了良好的多任务调试环境。
3.嵌入式实时操作系统充分发挥了32位CPU的多任务潜力。
32位CPU比8、16位CPU快,另外它本来是为运行多用户、多任务操作系统而设计的,特别适于运行多任务实时系统。32位CPU采用利于提高系统可靠性和稳定性的设计,使其更容易做到不崩溃。
例如,CPU运行状态分为系统态和用户态。将系统堆栈和用户堆栈分开,以及实时地给出CPU的运行状态等,允许用户在系统设计中从硬件和软件两方面对实时内核的运行实施保护。如果还是采用以前的前后台方式,则无法发挥32位CPU的优势。从某种意义上说,没有操作系统的计算机(裸机)是没有用的。在嵌入式应用中,只有把CPU嵌入到系统中,同时又把操作系统嵌入进去,才是真正的计算机嵌入式应用。
三、嵌入式操作系统选型
当我们在设计信息电器、数字医疗设备等嵌入式产品时,嵌入式操作系统的选择至关重要。一般而言,在选择嵌入式操作系统时,可以遵循以下原则。总的来说,就是“做加法还是做减法”的问题。
(一)市场进入时间
制定产品时间表与选择操作系统有关系,实际产品和一般演示是不同的。目前是Windows程序员可能是人力资源最丰富的。现成资源最多的也就可能是 WinCE。使用WinCE能够很快进入市场。因为WinCE+X86做产品实际上是在做减法,去掉你不要的功能,能很快出产品,但伴随的可能是成本高,核心竞争力差。而某些高效的操作系统可能由于编程人员缺乏,或由于这方面的技术积累不够,影响开发进度。
(二)可移植性
操作系统相关性。当进行嵌入式软件开发时,可移植性是要重点考虑的问题。良好的软件移植性应该比较好,可以在不同平台、不同系统上运行,跟操作系统无关。软件的通用性和软件的性能通常是矛盾的。即通用以损失某些特定情况下的优化性能为代价。很难设想开发一个嵌入式浏览器而仅能在某一特定环境下应用。反过来说,当产品与平台和操作系统紧密结合时,往往你的产品的特色就蕴含其中。
(三)可利用资源
产品开发不同于学术课题研究,它是以快速、低成本、高质量的推出适合用户需求的产品为目的的。集中精力研发出产品的特色,其他功能尽量由操作系统附加或采用第三方产品,因此操作系统的可利用资源对于选型是一个重要参考条件。Linux和WinCE都有大量的资源可以利用,这是他们被看好的重要原因。其他有些实时操作系统由于比较封闭,开发时可以利用的资源比较少,因此多数功能需要自己独立开发。从而影响开发进度。近来的市场需求显示,越来越多的嵌入式系统,均要求提供全功能的Web浏览器。而这要求有一个高性能、高可靠的GUI的支持。
(四)系统定制能力
信息产品不同于传统PC的Wintel结构的单纯性,用户的需求是千差万别的,硬件平台也都不一样,所以对系统的定制能力提出了要求。要分析产品是否对系统底层有改动的需求,这种改动是否伴随着产品特色?Linux由于其源代码开放的天生魅力,在定制能力方面具有优势。随着WinCE3.0原码的开放,以及微软在嵌入式领域力度的加强,其定制能力会有所提升。
(五)成本
成本是所有产品不得不考虑的问题。操作系统的选择会对成本有什么影响呢?Linux免费,WinCE等商业系统需要支付许可证使用费,但这都不是问题的答案。成本是需要综合权衡以后进行考虑的——选择某一系统可能会对其他一系列的因素产生影响,如对硬件设备的选型、人员投入、以及公司管理和与其他合作伙伴的共同开发之间的沟通等许多方面的影响。
(六)中文内核支持
国内产品需要对中文的支持。由于操作系统多数是采用西文方式,是否支持双字节编码方式,是否遵循GBK,GBl8030等各种国家标准,是否支持中文输入与处理,是否提供第三方中文输入接口是针对国内用户的嵌入式产品的必需考虑的重要因素。
上面提到用WinCE+x86出产品是减法,这实际上就是所谓PC家电化;另外一种做法是加法,利用家电行业的硬件解决方案(绝大部分是非x86的)加以改进,加上嵌入式操作系统,再加上应用软件。这是所谓家电PC化的做法,这种加法的优势是成本低,特色突出,缺点是产品研发周期长,难度大(需要深入了解硬件和操作系统)。如果选择这种做法,Linux是一个好选择,它让你能够深入到系统底层,如果你愿意并且有能力。
四、几种代表性嵌入式操作系统比较
(一)VxWorks
VxWorks操作系统是美国WindRiver公司于1983年设计开发的一种嵌入式实时操作系统(RTOS),是Tornado嵌入式开发环境的关键组成部分。良好的持续发展能力、高性能的内核以及友好的用户开发环境,在嵌人式实时操作系统领域逐渐占据一席之地。
VxWorks具有可裁剪微内核结构;高效的任务管理;灵活的任务间通讯;微秒级的中断处理;支持POSIX 1003.1b实时扩展标准;支持多种物理介质及标准的、完整的TCP/IP网络协议等。
然而其价格昂贵。由于操作系统本身以及开发环境都是专有的,价格一般都比较高,通常需花费10万元人民币以上才能建起一个可用的开发环境,对每一个应用一般还要另外收取版税。一般不通供源代码,只提供二进制代码。由于它们都是专用操作系统,需要专门的技术人员掌握开发技术和维护,所以软件的开发和维护成本都非常高。支持的硬件数量有限。
(二)Windows CE
Windows CE与Windows系列有较好的兼容性,无疑是Windows CE推广的一大优势。其中WinCE3.0是一种针对小容量、移动式、智能化、32位、了解设备的模块化实时嵌人式操作系统。为建立针对掌上设备、无线设备的动态应用程序和服务提供了一种功能丰富的操作系统平台,它能在多种处理器体系结构上运行,并且通常适用于那些对内存占用空间具有一定限制的设备。它是从整体上为有限资源的平台设计的多线程、完整优先权、多任务的操作系统。它的模块化设计允许它对从掌上电脑到专用的工业控制器的用户电子设备进行定制。操作系统的基本内核需要至少200KB的ROM。由于嵌入式产品的体积、成本等方面有较严格的要求,所以处理器部分占用空间应尽可能的小。系统的可用内存和外存数量也要受限制,而嵌入式操作系统就运行在有限的内存(一般在ROM或快闪存储器)中,因此就对操作系统的规模、效率等提出了较高的要求。从技术角度上讲,Windows CE作为嵌入式操作系统有很多的缺陷:没有开放源代码,使应用开发人员很难实现产品的定制;在效率、功耗方面的表现并不出色,而且和Windows一样占用过的系统内存,运用程序庞大;版权许可费也是厂商不得不考虑的因素。
(三)嵌入式Linux
这是嵌入式操作系统的一个新成员,其最大的特点是源代码公开并且遵循GPL协议,在近一年多以来成为研究热点,据IDG预测嵌入式Linux将占未来两年的嵌入式操作系统份额的50%。
由于其源代码公开,人们可以任意修改,以满足自己的应用,并且查错也很容易。遵从GPL,无须为每例应用交纳许可证费。有大量的应用软件可用。其中大部分都遵从GPL,是开放源代码和免费的。可以稍加修改后应用于用户自己的系统。有大量的免费的优秀的开发工具,且都遵从GPL,是开放源代码的。有庞大的开发人员群体。无需专门的人才,只要懂Unix/Linux和C语言即可。随着 Linux在中国的普及,这类人才越来越多。所以软件的开发和维护成本很低。优秀的网络功能,这在Internet时代尤其重要。稳定——这是Linux 本身具备的一个很大优点。内核精悍,运行所需资源少,十分适合嵌入式应用。
支持的硬件数量庞大。嵌入式Linux和普通Linux并无本质区别,PC上用到的硬件嵌入式Linux几乎都支持。而且各种硬件的驱动程序源代码都可以得到,为用户编写自己专有硬件的驱动程序带来很大方便。
在嵌入式系统上运行Linux的一个缺点是Linux体系提供实时性能需要添加实时软件模块。而这些模块运行的内核空间正是操作系统实现调度策略、硬件中断异常和执行程序的部分。由于这些实时软件模块是在内核空间运行的,因此代码错误可能会破坏操作系统从而影响整个系统的可靠性,这对于实时应用将是一个非常严重的弱点。
(四)μC/OS一Ⅱ
μC/OS一Ⅱ是著名的源代码公开的实时内核,是专为嵌入式应用设计的,可用于8位,16位和32位单片机或数字信号处理器(DSP)。它是在原版本 μC/OS的基础上做了重大改进与升级,并有了近十年的使用实践,有许多成功应用该实时内核的实例。它的主要特点如下:
* 公开源代码,容易就能把操作系统移植到各个不同的硬件平台上;
* 可移植性,绝大部分源代码是用C语言写的,便于移植到其他微处理器上;
* 可固化;
* 可裁剪性,有选择的使用需要的系统服务,以减少斗所需的存储空间;
* 占先式,完全是占先式的实时内核,即总是运行就绪条件下优先级最高的任务;
* 多任务,可管理64个任务,任务的优先级必须是不同的,不支持时间片轮转调度法;
* 可确定性,函数调用与服务的执行时间具有其可确定性,不依赖于任务的多少;
* 实用性和可靠性,成功应用该实时内核的实例,是其实用性和可靠性的最好证据。
由于μC/OS一Ⅱ仅是一个实时内核,这就意味着它不像其他实时存在系统那样提供给用户的只是一些API函数接口,还有很多工作需要用户自己去完成。
五、结束语
在嵌入式应用中,使用实时操作系统(RTOS)是当前嵌入式应用的一个特点,一种趋势,也是单片机应用从低水平向高水平的一个进步。在实际的应用中,根据不同的要求和条件选择合适的操作系统,使开发工作更容易,设计出更完美的嵌入式系统。
原文链接:https://blog.csdn.net/xiaojianpitt/article/details/2428009
嵌入式系统、单片机、PLC、FPGA和DSP之间关系
它们都是电子和计算机工程领域中重要的组成部分,各自在特定的应用场景下发挥着关键作用。
嵌入式系统:
是一个更广泛的概念,它指的是以应用为中心,以计算机技术为基础,软件、硬件可裁剪的专用计算机系统。它通常被嵌入到各种设备或系统中,用于实现特定的功能或控制任务。
单片机
是嵌入式系统硬件中的一种,它将中央处理单元(CPU)、存储器、I/O接口电路等集成在一块半导体硅片上,形成一个微型计算机。单片机具有体积小、功耗低、性价比高等特点,在嵌入式系统设计中有着广泛的应用。
PLC(可编程控制器)
是一种专门为工业环境应用而设计的数字运算操作的电子系统。它采用可编程的存储器,用于存储程序、执行逻辑运算、顺序控制等任务。PLC通常与外围设备一起,用于控制各种机械或生产过程。在某些情况下,PLC的内部CPU芯片可能会采用DSP(数字信号处理器)来实现高速运算。
FPGA(现场可编程门阵列)
是一种可编程逻辑器件,由数百万个逻辑单元组成,具有并行处理能力,适用于需要高性能、实时性要求高的应用场景。FPGA可以根据不同的应用需求重新配置内部逻辑结构,实现不同的电路功能。
DSP(数字信号处理器)
是一种专门用于数字信号处理的芯片。它使用数字表示信号和进行计算处理,具有高精度、灵活性、可编程性和实时性等特点。DSP在音频、视频、通信等领域有着广泛的应用。
综上所述,嵌入式系统是一个更广泛的概念,单片机、PLC、FPGA和DSP都是嵌入式系统的重要组成部分。它们各自具有不同的特点和应用场景,但在实现嵌入式系统的各种功能时,它们之间可能相互协作、相互补充。例如,单片机可以作为嵌入式系统的核心处理器,FPGA可以实现高性能的并行处理,DSP可以处理复杂的数字信号,而PLC则可以在工业控制领域发挥重要作用。通过合理地选择和组合这些组件,可以构建出功能强大、性能优越的嵌入式系统。
原文链接:https://blog.csdn.net/D_ovis/article/details/137942039
实时操作系统Real-time operating system, RTOS
又称即时操作系统,它会按照排序运行、管理系统资源,并为开发应用程序提供一致的基础。
实时操作系统与一般的操作系统相比,最大的特色就是“实时性”,如果有一个任务需要执行,实时操作系统会马上(在较短时间内)执行该任务,不会有较长的延时。这种特性保证了各个任务的及时执行。
实时操作系统经常与嵌入式操作系统一起出现,实际上这是完全不同的两种东西。大多数实时操作系统都是嵌入式操作系统,但嵌入式操作系统并不全都是实时的。
实时运算(Real-time computing)是计算机科学中对受到“实时约束”的计算机硬件和计算机软件系统的研究,实时约束像是从事件发生到系统回应之间的最长时间限制。实时程序必须保证在严格的时间限制内响应。
实时操作系统中都要包含一个实时任务调度器,这个任务调度器与其它操作系统的最大不同是强调:严格按照优先级来分配CPU时间,并且时间片轮转不是实时调度器的一个必选项。
实时操作系统主要是为了解决两个问题:
1.早期的CPU任务切换的开销太大,实时调度器可以避免任务频繁切换导致CPU时间的浪费;
2.在一些特殊的应用场景中,必须要保证重要的任务优先被执行。
实时任务调度器是实时操作系统的一个必选项,但不代表只要设计出来一个实时调度器就足够了。事实上设计一个实时调度内核并不是一个多么复杂的任务,实时操作系统的特性是在整个操作系统的设计思路上都要时刻关注实时性。
实时操作系统特点
2.1 实时的消息、事件处理机制
常规的操作系统中,消息队列都是按照FIFO(先进先出)的方式进行调度,如果有多个接受者,那么接受者也是按照FIFO的原则接受消息(数据),但实时操作系统会提供基于优先级的处理方式:两个任务优先级是分别是10和20,同时等待一个信号量,如果按照优先级方式处理,则优先级为10的任务会优先收到信号量。
2.2 提供内核级的优先级翻转处理方式
实时操作系统调度器最经常遇到的问题就是优先级翻转,因此对于类似信号量一类的API,都能提供抑止优先级翻转的机制,防止操作系统死锁。
2.3 减少粗粒度的锁和长期关中断的使用
这里的锁主要是指自旋锁(spinlock)一类会影响中断的锁,也包括任何关中断的操作。在Windows和Linux的驱动中,为了同步的需要,可能会长期关闭中断,这里的长期可能是毫秒到百微秒级。但实时操作系统通常不允许长期关中断。
对于非实时操作系统来说,如果收到一个外部中断,那么操作系统在处理中断的整个过程中可能会一直关中断。但实时操作系统的通常做法是把中断作为一个事件通告给另外一个任务,interrupt handler在处理完关键数据以后,立即打开中断,驱动的中断处理程序以一个高优先级任务的方式继续执行。
2.4 系统级的服务也要保证实时性
对于一些系统级的服务,比如文件系统操作,非实时系统会缓存用户请求,并不直接把数据写入设备,或者建立一系列的线程池,分发文件系统请求。但实时系统中允许高优先级的任务优先写入数据,在文件系统提供服务的整个过程中,高优先级的请求被优先处理,这种高优先级策略直到操作完成。
这种设计实际上会牺牲性能,但实时系统强调的是整个系统层面的实时性,而不是某一个点(比如内核)的实时性,所以系统服务也要实时。
由于应用场景的差异,会出现有些用户需要实时性的驱动,有些用户需要高性能的驱动,因此实时操作系统实际上要提供多种形式的配置以满足不同实时性需求的用户。
2.5 避免提供实时性不确定的API
多数实时操作系统都不支持虚拟内存(page file/swap area),主要原因是缺页中断(page fault)会导致任务调度的不确定性增加。实时操作系统很多都支持分页,但很少会使用虚拟内存,因为一次缺页中断的开销十分巨大(通常都是毫秒级),波及的代码很多,导致用户程序执行的不确定性增加。
实时操作系统的确定性是一个很重要的指标,在某些极端场景下,甚至会禁用动态内存分配(malloc/free),来保证系统不受到动态的任务变化的干扰。
2.6 提供针对实时系统调度的专用API
ARINC 653标准中就针对任务调度等作出了一系列的规定,同时定义了特定的API接口和API行为.
2.7 降低系统抖动
由于关中断等原因,通常情况下,操作系统的调度器不会太精确的产生周期性的调度,比如x86早期的默认60的时钟周期(clock rate),抖动范围可能在15-17ms之间。但一个设计优秀的实时操作系统能把调度器的抖动降低到微秒甚至百纳秒一级,在像x86这种天生抖动就很大的架构上,降低系统抖动尤其重要。
2.8 针对实时性设计的SMP和虚拟化技术
SMP(多核)场景的实时调度是很困难的,这里还涉及到任务核间迁移的开销。针对SMP场景,多数实时操作系统的设计都不算十分优秀,但比起普通操作系统来说,其实时性已经好很多了。
同时实时操作系统的虚拟化能从hypervisor层面上提供虚拟机级别的实时调度,虚拟机上可以是另外一个实时系统,也可以是一个非实时系统。
非实时操作系统也可以很快,实时操作系统也可能很慢;
通常来说实时操作系统的吞吐量会大一些,但非实时系统也可以做到吞吐量更大;
实时操作系统一般都比非实时操作系统要小,但规模大的实时操作系统也是存在的。而且由于可能需要针对不同用户提供不同等级的实时服务,实时操作系统可能并不是那么精简的。
由于设备性能的发展,原来很多实时性要求高的场景,已经切换到普通的操作系统了。Linux在嵌入式设备上的推广,使用实时操作系统的很多设备已经改用Linux了,因为硬件性能的提升会让系统延迟降低到一个用户可以接受的程度。同时,由于实时操作系统的特性,它并不是一个应用场景广泛的系统,嵌入式系统和实时系统不是等完全相同的,嵌入式开发,不一定需要在实时操作系统下完成。
VxWorks
美国WindRiver公司于1983年设计开发的一种嵌入式实时操作系(RTOS),具有硬实时、确定性与稳定性,也具备航空与国防、工业、医疗、汽车、消费电子产品、网络及其他行业要求的可伸缩性与安全性。
主要功能:
支持可预测的任务同步机制
支持多任务间的通信
存储器优化管理
操作系统的(中断延迟、任务切换、驱动程序延迟等)行为是可知的和可预测的。
实时时钟服务+中断管理服务。
主要特点:
具有一个高性能的操作系统内核Wind(实时性好、可裁减)
友好的开发调试环境、较好的兼容性
支持多种开发和运行环境
μCLinux
μClinux是一种嵌入式Linux版本,其全称为micro-control Linux,从字面意思看是指微控制Linux。同标准的Linux相比,μClinux的内核非常小,但是它仍然继承了Linux操作系统的主要特性,包括良好的稳定性和移植性、强大的网络功能、出色的文件系统支持、标准丰富的API,以及TCP/IP网络协议等。因为没有MMU内存管理单元,所以其多任务的实现需要一定技巧。
μClinux在结构上继承了标准Linux的多任务实现方式,分为实时进程和普通进程,分别采用先来先服务和时间片轮转调度,仅针对中低档嵌入式CPU特点进行改良,且不支持内核抢占,实时性一般。
μClinux最大特点在于针对无MMU处理器设计。μClinux结构复杂,移植相对困难,内核也较大,系统移植需要至少512KB的RAM空间,1MB的ROM/FLASH空间。
原文链接:https://blog.csdn.net/qq_38342510/article/details/136219953
实时操作系统RTOS
是指当外界事件或数据产生时,能够接受并以足够快的速度予以处理,其处理的结果又能在规定的时间之内来控制生产过程或对处理系 统作出快速响应,并控制所有实时任务协调一致运行的操作系统。因而,提供及时响应和高可靠性是其主要特点。实时操作系统有硬实时和软实时之分,硬实时要求 在规定的时间内必须完成操作,这是在操作系统设计时保证的;软实时则只要按照任务的优先级,尽可能快地完成操作即可。我们通常使用的操作系统在经过一定改 变之后就可以变成实时操作系统。
实时操作系统是保证在一定时间限制内完成特定功能的操作系统。例如,可以为确保生产线上的机器人能获取某个物 体而设计一个操作系统。在“硬”实时操作系统中,如果不能在允许时间内完成使物体可达的计算,操作系统将因错误结束。在“软”实时操作系统中,生产线仍然 能继续工作,但产品的输出会因产品不能在允许时间内到达而减慢,这使机器人有短暂的不生产现象。一些实时操作系统是为特定的应用设计的,另一些是通用的。 一些通用目的的操作系统称自己为实时操作系统。但某种程度上,大部分通用目的的操作系统,如微软的Windows NT或IBM的OS/390有实时系统的特征。这就是说,即使一个操作系统不是严格的实时系统,它们也能解决一部分实时应用问题。
特点
多任务;
有线程优先级
多种中断级别
相关术语
代码临界段:指处理时不可分割的代码。一旦这部分代码开始执行则不允许中断打入;
资源:任何为任务所占用的实体;
共享资源:可以被一个以上任务使用的资源;
任务:也称作一个线程,是一个简单的程序。每个任务被赋予一定的优先级,有它自己的一套CPU寄存器和自己的栈空间。典型地,每个任务都是一个无限的循环,每个任务都处在以下五个状态下:休眠态,就绪态,运行态,挂起态,被中断态;
任务切换:将正在运行任务的当前状态(CPU寄存器中的全部内容)保存在任务自己的栈区,然后把下一个将要运行的任务的当前状态从该任务的栈中重新装入CPU的寄存器,并开始下一个任务的运行;
内核:负责管理各个任务,为每个任务分配CPU时间,并负责任务之间通讯。分为不可剥夺型内核于可剥夺型内核;
调度:内核的主要职责之一,决定轮到哪个任务运行。一般基于优先级调度法;
任务优先级:分为优先级不可改变的静态优先级和优先级可改变的动态优先级;
优先级反转:优先级反转问题是实时系统中出现最多的问题。共享资源的分配可导致优先级低的任务先运行,优先级高的任务后运行。解决的办法是使用“优先级继承”算法来临时改变任务优先级,以遏制优先级反转。
互斥:
虽然共享数据区简化了任务之间的信息交换,但是必须保证每个任务在处理共享共享数据时的排他性。使之满足互斥条件的一般方法有:关中断,使用测试并置位指令(TAS),禁止做任务切换,利用信号量。
因为采用实时操作系统的意义就在于能够及时处理各种突发的事件,即处理各种中断,因而衡量嵌入式实时操作系统的最主要、最具有代表性的性能指标参数无疑应该是中断响应时间了。中断响应时间通常被定义为:
中断响应时间=中断延迟时间+保存CPU状态的时间+该内核的ISR进入函数的执行时间[2]。
中断延迟时间=MAX(关中断的最长时间,最长指令时间) + 开始执行ISR的第一条指令的时间[2]。
分时操作系统
使一台计算机同时为几个、几十个甚至几百个用户服务的一种操作系统。把计算机与许多终端用户连接起来,分时操作系统将系统处理机时间与内存空 间按一定的时间间隔,轮流地切换给各终端用户的程序使用。由于时间间隔很短,每个用户的感觉就像他独占计算机一样。分时操作系统的特点是可有效增加资源的 使用率。例如UNIX系统就采用剥夺式动态优先的CPU调度,有力地支持分时操作。
产生分时系统是为了满足用户需求所形成的一种新型 OS 。它与多道批处理系统之间,有着截然不同的性能差别。用户的需求具体表现在以下几个方面: 人—机交互 共享主机 便于用户上机
特点
交互性:用户与系统进行人机对话。
多路性:多用户同时在各自终端上使用同一CPU。
独立性:用户可彼此独立操作,互不干扰,互不混淆。
及时性:用户在短时间内可得到系统的及时回答。
影响响应时间的因素:终端数目多少、时间片的大小、信息交换量、信息交换速度。
相关术语
时间片 :是把计算机的系统资源(尤其是 CPU时间)进行时间上的分割,每个时间段称为一个时间片,每个用户依次轮流使用时间片。
分时技术:把处理机的运行时间分为很短的时间片,按时间片轮流把处理机分给各联机作业使用。
分时操作系统:是一种联机的多用户交互式的操作系统。一般采用时间片轮转的方式使一台计算机为多个终端服务。对每个用户能保证足够快的响应时间,并提供交互会话能力。
设计目标: 对用户的请求及时响应,并在可能条件下尽量提高系统资源的利用率。
工作方式:
一台主机连接了若干个终端;每个终端有一个用户在使用;交互式地向系统提出命令请求;系统接受每个用户的命令;采用时间片轮转方式处理服务请求;并通过交互方式在终端上向用户显示结果;用户根据上步结果发出下道命令
分时系统实现中的关键问题:及时接收。及时处理。
原文链接:https://blog.csdn.net/JackSparrow_sjl/article/details/119279680
开源实时操作系统(RTOS)
在嵌入式系统和物联网(IoT)设备中扮演着重要的角色。它们提供了任务管理、内存管理、通信机制和文件系统等功能,使得开发者能够在一个可靠的环境中构建复杂的嵌入式应用。从 FreeRTOS 到 Zephyr,每个 RTOS 都有其独特的特点和优势,适用于不同的应用场景。
开发者选择 RTOS 时,需要考虑以下因素:
-
资源限制:嵌入式系统的内存和处理能力通常有限。因此,选择一个资源占用小的 RTOS 非常重要。
-
实时性要求:如果应用需要硬实时响应,那么选择一个支持硬实时任务的 RTOS 是必要的。
-
开发环境:开发者可能需要一个易用、有良好文档和社区支持的环境。
-
可扩展性:随着项目的发展,可能需要添加新的功能或支持新的硬件。因此,选择一个可扩展的 RTOS 是有益的。
-
生态系统:一些 RTOS 拥有丰富的第三方库和工具,这可以加速开发过程。
开源 RTOS 的优势在于它们通常由社区维护,这意味着开发者可以访问源代码,并根据自己的需要进行修改。此外,开源 RTOS 通常遵循 BSD 或其他宽松的许可证,允许商业使用。
在实际应用中,开发者可能会根据项目需求将多个 RTOS 集成到一个系统中,或者在一个 RTOS 中运行多个实例。例如,一个复杂的工业控制系统可能同时使用 FreeRTOS 和 Zephyr,前者用于控制低级的传感器和执行器,后者用于处理网络通信和数据采集。
原文链接:https://blog.csdn.net/u013558123/article/details/136735267
单核操作系统和微内核操作系统
1、简介
单核和多核的本质区别就是同一时刻可以运行几个线程,单核只能运行一个,多核可以运行多个。
单核操作系统(monolithic)
是指操作系统将所有的服务和功能都集成在内核中,包括文件系统、设备驱动程序、网络协议栈等。这种设计可以提高操作系统的性能,但是也会导致内核代码变得非常庞大和复杂,难以维护。在单处理器操作系统中,系统一次只能处理一个任务,多任务一般通过并发执行。类似于去超市买东西排队,一个个处理问题。
微内核
是内核的一种精简形式,将通常与内核集成在一起的系统服务层被分离出来,变成可以根据需求加入的选件,这样就可提供更好的可扩展性和更加有效的应用环境。使用微内核设计,对系统进行升级,只要用新模块替换旧模块,不需要改变整个操作系统,所有服务(包括设备驱动)在用户模式下运行,而处理这些服务同处理其他的任何一个程序一样。因为每个服务只是在自己的地址空间运行。所以,这些服务之间彼此之间都受到了保护。
微内核操作系统,将操作系统的基本服务和功能分离出来,只将最基本的服务放在内核中,其他服务则作为用户空间的进程运行。这种设计可以提高系统的可靠性和安全性,同时也可以使内核代码更加简洁和易于维护。
2、典型产品
单核操作系统典型厂家:Google
代表产品:Android
安卓(Android)是一种基于Linux内核(不包含GNU组件)的自由及开放源代码的移动操作系统。主要应用于移动设备,如智能手机和平板电脑。Android是一款开放源代码的操作系统,任何人都可以免费获取和使用它。这使得开发者可以基于Android系统进行开发和定制,从而满足不同用户的需求。Android系统也有庞大的开发者社区,使得开发者可以共享和交流各种开发经验和技术。
架构
Android 操作系统是一个软件组件的栈,在架构图中它大致可以分为五个部分和四个主要层。
内核。采用Linux内核,提供了基本的系统功能,比如进程管理,内存管理。
主要应用场景:智能手机和平板电脑、智能手表和智能穿戴设备、物联网
客户群体:企业
微内核操作系统典型厂家:Quantum Software Systems
代表产品:QNX
QNX是一种商用的遵从POSIX规范的类Unix实时操作系统,目标市场主要是面向嵌入式系统。采用独特的微内核实时平台,相比Windos、Linux等大型操作系统,QNX内核极小且运行速度极快。QNX构架是有一个微型内核,然后又包含许多相关进程。这样的好处是,即使有一个进程出错,也不会影响内核。
希望更深了解请点击漫谈QNX架构
主要应用场景:汽车车载软件平台、工业控制、医疗设备
客户群体:负责进行汽车制造、工业控制系统开发、医疗设备制造等领域的企业。
原文链接:https://blog.csdn.net/z1076233241/article/details/133999923
选择任务优先级-单调速率调度(Rate Monotonic Scheduling, RMS)
是一种常用的优先级分配技术。其根据任务周期性执行的速率来分配一个唯一的优先级。 具有最高周期执行频率的任务赋予高最优先级;具有最低周期执行频率的任务赋予最低优先级。这种优先级分配方式被证明了可以最大化整个应用程序的可调度性(schedulability),但是运行时间不定以及并非所有任务都具有周期性,会使得对这种方式的全面计算变得相当复杂。
原文链接:https://blog.csdn.net/JackSparrow_sjl/article/details/119279680
任务优先级-时间片tick-时钟滴答
调度器保证总是在所有可运行的任务中选择具有最高优先级的任务, 并使其进入运行态。如果被选中的优先级上具有不止一个任务,调度器会让这些任务轮流执行。这种行为方式在之前的例子中可以明显看出来。两个测试任务被创建在同一个优先级上,并且一直是可运行的。所以每个任务都执行一个时间片,任务在时间片起始时刻进入运行态, 在时间片结束时刻又退出运行态。
要能够选择下一个运行的任务,调度器需要在每个时间片的结束时刻运行自己本身。一个称为心跳(tick,有些地方被称为时钟滴答,本文中一律称为时钟心跳)中断的周期性中断用于此目的。时间片的长度通过心跳中断的频率进行设定,心跳中断频率由FreeRTOSConfig.h 中的编译时配置常量 configTICK_RATE_HZ进行配置。比如说,如果 configTICK_RATE_HZ 设为 100(HZ),则时间片长度为 10ms。
初始优先级运行后可以通过 vTaskPrioritySet() API 函数进行修改,优先级数目可以自定义,为常量configMAX_PRIORITIES的值。范围0~configMAX_PRIORITIES-1。如果一个任务持续运行,且优先级较高,其他任务将”饿死“。
原文链接:https://blog.csdn.net/JackSparrow_sjl/article/details/119279680
函数重入 Function Reentrancy
是计算机编程中的一个概念,特别是在多线程环境和系统编程中非常重要。简单来说,函数重入是指一个函数在同一个进程或者线程中被多次调用,而不会导致混乱或错误的行为。
在单线程环境下,函数重入通常不是问题,因为每次调用都会按顺序执行。但在多线程程序中,不同的线程可能会同时调用同一个函数,如果该函数使用了全局变量或者修改了共享资源,而不采取适当的同步措施,就可能导致数据竞争和不一致的状态,这就是非重入函数可能出现的问题。
为了实现函数重入,程序员需要确保:
-
函数在使用共享资源时是互斥的,比如使用互斥锁(mutex)来保护共享数据。
-
函数内部不使用静态变量,或者在使用静态变量时采取措施保证线程安全。
-
函数的调用和返回逻辑允许它被中断后再次执行,而不会造成不可预期的后果。
在某些高级编程语言中,语言本身会提供机制来支持函数重入,例如使用原子操作或者线程安全的存储类。
函数重入的正确实现对于确保程序的正确性和性能都是非常重要的。在不支持重入的上下文中错误地使用了重入,可能会导致难以调试的问题。因此,程序员在设计需要重入的函数时必须非常小心,并确保在所有可能的调用场景下都能保持函数的重入性质。
互斥Mutual Exclusion
是多线程编程中的一个关键概念,用于确保在任意时刻,只有一个线程可以访问共享资源。这是为了避免多个线程同时访问共享资源时可能出现的竞态条件(Race Condition),从而保证程序的正确性和一致性。
互斥通常通过互斥锁(Mutex)来实现。互斥锁是一种同步机制,它允许一个线程在获取锁之后独占对共享资源的访问,其他线程在尝试访问资源时必须等待,直到锁被释放。
互斥锁有以下几种状态:
-
锁定(Locked):表示锁已经被一个线程获取,其他线程不能访问共享资源。
-
解锁(Unlocked):表示锁未被任何线程获取,线程可以自由地访问共享资源。
在多线程环境中,互斥锁的使用通常遵循以下原则:
-
最小锁粒度:尽量减小锁的作用范围,只保护必要的代码块,而不是整个函数或程序。
-
避免死锁:确保锁的获取和释放顺序一致,避免因为循环等待而导致的死锁情况。
-
避免饥饿:确保线程在合理的时间内能够获取到锁,避免某些线程长时间得不到锁而无法执行。
互斥锁是一种基本的同步机制,但在某些情况下,可能会因为锁竞争导致性能瓶颈。为了优化性能,可以考虑使用其他同步机制,如读写锁(Read-Write Lock)、条件变量(Condition Variable)等。这些同步机制可以根据不同的使用场景和需求,提供更加灵活和高效的线程同步方案。
常见的互斥实现方式:
-
互斥锁(Mutex):是最常见的互斥实现方式。当一个线程获取了锁,其他试图获取同一锁的线程将会阻塞,直到锁被释放。互斥锁可以是递归锁,允许同一个线程多次获取而不死锁。
-
信号量(Semaphore):信号量可以视为一种更通用的锁,不仅可以实现互斥,还能控制对某种资源的访问数量。它维护一个计数器,当计数器大于0时,允许线程进入;线程进入时计数减1,退出时计数加1。二进制信号量常用于实现互斥。
-
自旋锁(Spinlock):当线程尝试获取锁失败时,不是立即阻塞而是不断循环检查(自旋),直到锁变为可用状态。这种方式适用于锁持有时间很短且CPU核心较多的情况,避免了线程上下文切换的开销,但若锁被长时间持有,会浪费CPU资源。
-
读写锁(Read-Write Lock):允许多个读取者同时访问资源,但写入者访问时会排除所有其他读取者和写入者。适合读多写少的场景,可以提高并发性能。
互斥的应用场景:
-
保护共享资源:如全局变量、共享内存区域、数据库连接等。
-
临界区保护:在需要原子操作的代码段前后加锁解锁,确保操作的完整性。
-
资源的独占访问:如文件操作、硬件设备控制等,确保同一时间只有一个任务在进行操作。
实现互斥时,开发者需要谨慎处理死锁、优先级反转等问题,并确保锁的正确获取和释放,避免造成系统不稳定或性能下降。
进程和线程的深入理解
下面是抽象类比:
单CPU:一台单核处理器计算机 = 一个车间;
多CPU:一台多核处理器计算机 = 一座工厂;
进程:一个车间 = 一个进程; (即一个运行的程序)
多进程:一座工厂可以同时运行多个车间;
CPU和进程:单CPU只能同时运行单个进程,多CPU可以同时运行多个进程。
线程:车间内一个工人 = 一个线程;
进程与线程:一个进程可以包括多个线程。
线程间内存共享:车间的空间是工人们共享的,比如许多房间是每个工人都可以进出的。
一个进程的内存空间是共享的,每个线程都可以使用这些共享内存。
内存安全:可是,每个车间容纳大小不同,有的最多只能容纳一个人。车间人满的时候,其他人就进不去了。
一个线程使用某些共享内存时,其他线程必须等它结束,才能使用这一块内存。
互斥锁:
一个防止他人进入的简单方法,就是门口加一把锁。先到的人锁上门,后到的人看到上锁,就在门口排队,等锁打开再进去。
这就叫"互斥锁"–Mutex,防止两个线程同时读写某一块内存区域。
信号量:
这时的解决方法,就是在门口挂n把钥匙。进去的人就取一把钥匙,出来时再把钥匙挂回原处。后到的人发现钥匙架空了,就知道必须在门口排队等着了。
这种做法叫做"信号量"(Semaphore),用来保证多个线程不会互相冲突。
锁和信号量:不难看出,互斥锁是信号量的一种特殊情况(n=1时)。也就是说,完全可以用后者替代前者。但是,因为mutex较为简单,且效率高,所以在必须保证资源独占的情况下,还是采用这种设计。
操作系统的资源分配与调度逻辑
以多进程形式,允许多个任务同时运行;
以多线程形式,允许单个任务分成不同的部分运行;
提供协调机制,一方面防止进程之间和线程之间产生冲突,另一方面允许进程之间和线程之间共享资源。
下面是严谨的解释:
进程
进程是程序的一次执行过程,是一个动态概念,是程序在执行过程中分配和管理资源的基本单位,每一个进程都有一个自己的地址空间,包括代码区、数据区和堆栈区,进程之间的地址空间是隔离的,互不影响。至少有 5 种基本状态,它们是:初始态,执行态,等待状态,就绪状态,终止状态。
进程是一个具有一定独立功能的程序在一个数据集合上依次动态执行的过程。进程是一个正在执行的程序的实例,包括程序计数器、寄存器和程序变量的当前值。
一个在内存中运行的应用程序。每个进程都有自己独立的一块内存空间,一个进程可以有多个线程,比如在Windows系统中,一个运行的xx.exe就是一个进程。
线程
线程是CPU调度和分派的基本单位,它可与同属一个进程的其他的线程共享进程所拥有的全部资源。
进程和线程的关系
线程是进程的一部分
一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。
线程被设计成进程的一个执行路径,同一个进程中的线程共享进程的资源。
进程和线程的区别
理解它们的差别,我从资源使用的角度出发。(所谓的资源就是计算机里的中央处理器,内存,文件,网络等等)
根本区别:进程是操作系统资源分配的基本单位,而线程是任务调度和执行的基本单位
开销方面:每个进程都有独立的代码和数据空间(程序上下文),进程之间切换开销大;线程可以看做轻量级的进程,同一类线程共享代码和数据空间,每个线程都有自己独立的运行栈和程序计数器(PC),线程之间切换的开销小
所处环境:在操作系统中能同时运行多个进程(程序);而在同一个进程(程序)中有多个线程同时执行(通过CPU调度,在每个时间片中只有一个线程执行)
内存分配:系统为每个进程分配不同的内存空间;而对线程而言,除了CPU外,系统不会为线程分配内存(线程所使用的资源来自其所属进程的资源),线程组之间只能共享资源
包含关系:线程是进程的一部分,所以线程也被称为轻权进程或者轻量级进程
原文链接:https://blog.csdn.net/luhao19980909/article/details/89403233
线程私有资源
线程上下文thread context。
线程运行的本质其实就是函数的执行,函数的执行总会有一个源头,这个源头就是所谓的入口函数,CPU从入口函数开始执行从而形成一个执行流,只不过我们人为的给执行流起一个名字,这个名字就叫线程。
既然线程运行的本质就是函数的执行,那么函数执行都有哪些信息呢?
在《函数运行时在内存中是什么样子?这篇文章中我们说过,函数运行时的信息保存在栈帧中,栈帧中保存了函数的返回值、调用其它函数的参数、该函数使用的局部变量以及该函数使用的寄存器信息,如图所示,假设函数A调用函数B:
此外,CPU执行指令的信息保存在一个叫做程序计数器的寄存器中,通过这个寄存器我们就知道接下来要执行哪一条指令。由于操作系统随时可以暂停线程的运行,因此我们保存以及恢复程序计数器中的值就能知道线程是从哪里暂停的以及该从哪里继续运行了。
由于线程运行的本质就是函数运行,函数运行时信息是保存在栈帧中的,因此每个线程都有自己独立的、私有的栈区。
同时函数运行时需要额外的寄存器来保存一些信息,像部分局部变量之类,这些寄存器也是线程私有的,一个线程不可能访问到另一个线程的这类寄存器信息。
从上面的讨论中我们知道,到目前为止,所属线程的栈区、程序计数器、栈指针以及函数运行使用的寄存器是线程私有的。
以上这些信息有一个统一的名字,就是线程上下文,thread context。
我们也说过操作系统调度线程需要随时中断线程的运行并且需要线程被暂停后可以继续运行,操作系统之所以能实现这一点,依靠的就是线程上下文信息。
现在你应该知道哪些是线程私有的了吧。
线程间共享资源
除此之外,剩下的都是线程间共享资源。
那么剩下的还有什么呢?还有图中的这些。
这其实就是进程地址空间的样子,也就是说线程共享进程地址空间中除线程上下文信息中的所有内容,意思就是说线程可以直接读取这些内容。
接下来我们分别来看一下这些区域。
代码区
进程地址空间中的代码区,这里保存的是什么呢?从名字中有的同学可能已经猜到了,没错,这里保存的就是我们写的代码,更准确的是编译后的可执行机器指令。
那么这些机器指令又是从哪里来的呢?答案是从可执行文件中加载到内存的,可执行程序中的代码区就是用来初始化进程地址空间中的代码区的。
线程之间共享代码区,这就意味着程序中的任何一个函数都可以放到线程中去执行,不存在某个函数只能被特定线程执行的情况。
堆区
堆区是程序员比较熟悉的,我们在C/C++中用malloc或者new出来的数据就存放在这个区域,很显然,只要知道变量的地址,也就是指针,任何一个线程都可以访问指针指向的数据,因此堆区也是线程共享的属于进程的资源。
栈区
唉,等等!刚不是说栈区是线程私有资源吗,怎么这会儿又说起栈区了?
确实,从线程这个抽象的概念上来说,栈区是线程私有的,然而从实际的实现上看,栈区属于线程私有这一规则并没有严格遵守,这句话是什么意思?
通常来说,注意这里的用词是通常,通常来说栈区是线程私有,既然有通常就有不通常的时候。
不通常是因为不像进程地址空间之间的严格隔离,线程的栈区没有严格的隔离机制来保护,因此如果一个线程能拿到来自另一个线程栈帧上的指针,那么该线程就可以改变另一个线程的栈区,也就是说这些线程可以任意修改本属于另一个线程栈区中的变量。
这从某种程度上给了程序员极大的便利,但同时,这也会导致极其难以排查到的bug。
试想一下你的程序运行的好好的,结果某个时刻突然出问题,定位到出问题代码行后根本就排查不到原因,你当然是排查不到问题原因的,因为你的程序本来就没有任何问题,是别人的问题导致你的函数栈帧数据被写坏从而产生bug,这样的问题通常很难排查到原因,需要对整体的项目代码非常熟悉,常用的一些debug工具这时可能已经没有多大作用了。
说了这么多,那么同学可能会问,一个线程是怎样修改本属于其它线程的数据呢?
接下来我们用一个代码示例讲解一下。
文件
最后,如果程序在运行过程中打开了一些文件,那么进程地址空间中还保存有打开的文件信息,进程打开的文件也可以被所有的线程使用,这也属于线程间的共享资源。关于文件IO操作,你可以参考《读取文件时,程序经历了什么?
One More Thing:TLS
本文就这些了吗?
实际上本篇开头关于线程私有数据还有一个项没有详细讲解,因为再讲下去本篇就撑爆了,实际上本篇讲解的已经足够用了,剩下的这一点仅仅作为补充。
线程局部存储,Thread Local Storage,TLS。
关于线程私有数据还有一项技术,那就是线程局部存储,Thread Local Storage,TLS。
这是什么意思呢?
其实从名字上也可以看出,所谓线程局部存储,是指存放在该区域中的变量有两个含义:
-
存放在该区域中的变量是全局变量,所有线程都可以访问
-
虽然看上去所有线程访问的都是同一个变量,但该全局变量独属于一个线程,一个线程对此变量的修改对其他线程不可见。
说了这么多还是没懂有没有?没关系,接下来看完这两段代码还不懂你来打我。
我们先来看第一段代码,不用担心,这段代码非常非常的简单:
int a = 1; // 全局变量 void print_a() { cout<<a<<endl; } void run() { ++a; print_a(); } void main() { thread t1(run); t1.join(); thread t2(run); t2.join(); }
怎么样,这段代码足够简单吧,上述代码是用C++11写的,我来讲解下这段代码是什么意思。
-
首先我们创建了一个全局变量a,初始值为1
-
其次我们创建了两个线程,每个线程对变量a加1
-
线程的join函数表示该线程运行完毕后才继续运行接下来的代码
那么这段代码的运行起来会打印什么呢?
全局变量a的初始值为1,第一个线程加1后a变为2,因此会打印2;第二个线程再次加1后a变为3,因此会打印3,让我们来看一下运行结果:
2 3
看来我们分析的没错,全局变量在两个线程分别加1后最终变为3。
接下来我们对变量a的定义稍作修改,其它代码不做改动:
__thread int a = 1; // 线程局部存储
我们看到全局变量a前面加了一个__thread关键词用来修饰,也就是说我们告诉编译器把变量a放在线程局部存储中,那这会对程序带来哪些改变呢?
简单运行一下就知道了:
2 2
和你想的一样吗,有的同学可能会大吃一惊,为什么我们明明对变量a加了两次,但第二次运行为什么还是打印2而不是3呢?
想一想这是为什么。
原来,这就是线程局部存储的作用所在,线程t1对变量a的修改不会影响到线程t2,线程t1在将变量a加到1后变为2,但对于线程t2来说此时变量a依然是1,因此加1后依然是2。
因此,线程局部存储可以让你使用一个独属于线程的全局变量。也就是说,虽然该变量可以被所有线程访问,但该变量在每个线程中都有一个副本,一个线程对改变量的修改不会影响到其它线程。
链接:https://www.zhihu.com/question/519893352/answer/2375191174
多线程间的同步与互斥
现代操作系统基本都是多任务操作系统,即同时有大量可调度实体在运行。在多任务操作系统中,同时运行的多个任务可能:
-
都需要访问/使用同一种资源;
-
多个任务之间有依赖关系,某个任务的运行依赖于另一个任务。
【同步】:
是指散步在不同任务之间的若干程序片断,它们的运行必须严格按照规定的某种先后次序来运行,这种先后次序依赖于要完成的特定的任务。最基本的场景就是:两个或两个以上的进程或线程在运行过程中协同步调,按预定的先后次序运行。比如 A 任务的运行依赖于 B 任务产生的数据。
【互斥】:
是指散步在不同任务之间的若干程序片断,当某个任务运行其中一个程序片段时,其它任务就不能运行它们之中的任一程序片段,只能等到该任务运行完这个程序片段后才可以运行。最基本的场景就是:一个公共资源同一时刻只能被一个进程或线程使用,多个进程或线程不能同时使用公共资源。
原文链接:https://blog.csdn.net/daaikuaichuan/article/details/82950711
也就是说互斥是两个任务之间不可以同时运行,他们会相互排斥,必须等待一个线程运行完毕,另一个才能运行,而同步也是不能同时运行,但他是必须要安照某种次序来运行相应的线程(也是一种互斥)!因此互斥具有唯一性和排它性,但互斥并不限制任务的运行顺序,即任务是无序的,而同步的任务之间则有顺序关系。
多线程与临界区
多线程想要访问临界区时,就要对临界区进行上锁,这与之前写到的进程互斥是一个道理,这也就是防止共享数据被并发访问的解决方法,这种上锁叫做互斥锁
互斥锁
互斥锁以排他的方式保护共享数据被并发访问。
因为在线程中,内存地址空间是共享的,就像一个大房子,在这个进程中的线程们都可以进来,当我们某一个线程想做一些事时,不想让其他线程打断,那我们就给门上加个锁,当一个进程进来后,把门锁上,当干完想干的事时,再解锁出去,让其他进程进来,这样就保证在做一件事时绝对不会被打断,当其它进程进来时,同样可以做自己想做的事情,可以是与之前进程一样的事情
互斥锁是一个二元信号量
互斥锁的基本操作
在线程里也有这么一把锁——互斥锁(mutex),互斥锁是一种简单的加锁的方法来控制对共享资源的访问,互斥锁只有两种状态,即上锁( lock )和解锁( unlock )。
【互斥锁的特点】:
-
原子性:把一个互斥量锁定为一个原子操作,这意味着操作系统(或pthread函数库)保证了如果一个线程锁定了一个互斥量,没有其他线程在同一时间可以成功锁定这个互斥量;
-
唯一性:如果一个线程锁定了一个互斥量,在它解除锁定之前,没有其他线程可以锁定这个互斥量;
-
非繁忙等待:如果一个线程已经锁定了一个互斥量,第二个线程又试图去锁定这个互斥量,则第二个线程将被挂起(不占用任何cpu资源),直到第一个线程解除对这个互斥量的锁定为止,第二个线程则被唤醒并继续执行,同时锁定这个互斥量。
【互斥锁的操作流程如下】:
-
在访问共享资源后临界区域前,对互斥锁进行加锁;
-
在访问完成后释放互斥锁导上的锁。在访问完成后释放互斥锁导上的锁;
-
对互斥锁进行加锁后,任何其他试图再次对互斥锁加锁的线程将会被阻塞,直到锁被释放。对互斥锁进行加锁后,任何其他试图再次对互斥锁加锁的线程将会被阻塞,直到锁被释放。
条件变量
条件变量是用来等待而不是用来上锁的。条件变量用来自动阻塞一个线程,直到某特殊情况发生为止。通常条件变量和互斥锁同时使用。
条件变量使我们可以睡眠等待某种条件出现。条件变量是利用线程间共享的全局变量进行同步 的一种机制,主要包括两个动作:
一个线程等待"条件变量的条件成立"而挂起;
另一个线程使 “条件成立”(给出条件成立信号)。
【原理】:
条件的检测是在互斥锁的保护下进行的。线程在改变条件状态之前必须首先锁住互斥量。如果一个条件为假,一个线程自动阻塞,并释放等待状态改变的互斥锁。如果另一个线程改变了条件,它发信号给关联的条件变量,唤醒一个或多个等待它的线程,重新获得互斥锁,重新评价条件。如果两进程共享可读写的内存,条件变量 可以被用来实现这两进程间的线程同步。
【条件变量的操作流程如下】:
-
初始化:init()或者pthread_cond_tcond=PTHREAD_COND_INITIALIER;属性置为NULL;
-
等待条件成立:pthread_wait,pthread_timewait.wait()释放锁,并阻塞等待条件变量为真 timewait()设置等待时间,仍未signal,返回ETIMEOUT(加锁保证只有一个线程wait);
-
激活条件变量:pthread_cond_signal,pthread_cond_broadcast(激活所有等待线程)
-
清除条件变量:destroy;无线程等待,否则返回EBUSY清除条件变量:destroy;无线程等待,否则返回EBUSY
原文链接:https://blog.csdn.net/daaikuaichuan/article/details/82950711
条件变量基本原理:
互斥锁能够解决资源的互斥访问,但有些情况,互斥并不能解决。
例如下面这种情况,系统有全局变量 i 和 j,线程A和B都要访问,线程A需要互斥的执行i++;j–操作;线程B需要互斥的在 i 等于 j是执行do_something()函数。
如果只使用互斥锁,可能导致do_something()永远不会执行,因为当i=j=5时,线程B不一定能抢占到资源
所以,需要某个机制来解决此问题,更重要的是,线程B仅仅只有一种情况需要执行do_something()函数,但不停的申请释放互斥锁将造成资源的浪费。
在使用互斥锁时结合条件变量解决这一问题。
这里要注意的是,条件变量不能单独使用,必须配合互斥锁一起实现对资源的互斥访问。
条件变量的基本操作
初始化和销毁没有什么好说的,man一下,全清楚
那就说说signal和wait,
wait是在等一个它要等的人(条件),这个人就是signal,signal会发一个信号,当signal发出消息,wait就可以继续执行自己的事情,否则它就一直等待
还是用生产者消费者的例子来看
生产者在生产时要上锁保证自己的生产不被打断,消费者也是一样,但是消费者需要在生产者生产后,才能进行消费所以当生产者生产后要通知一下,消费者也要等着生产者的信号。其实这就像在食堂吃饭时,我们买好饭然后就等着食堂阿姨做好了叫我们,然后阿姨(生产者)去做饭,阿姨做好饭后会叫我们。
读写锁
读写锁与互斥量类似,不过读写锁允许更改的并行性,也叫共享互斥锁。互斥量要么是锁住状态,要么就是不加锁状态,而且一次只有一个线程可以对其加锁。读写锁可以有3种状态:读模式下加锁状态、写模式加锁状态、不加锁状态。
一次只有一个线程可以占有写模式的读写锁,但是多个线程可以同时占有读模式的读写锁(允许多个线程读但只允许一个线程写)。
【读写锁的特点】:
如果有其它线程读数据,则允许其它线程执行读操作,但不允许写操作;
如果有其它线程写数据,则其它线程都不允许读、写操作。
【读写锁的规则】:
如果某线程申请了读锁,其它线程可以再申请读锁,但不能申请写锁;
如果某线程申请了写锁,其它线程不能申请读锁,也不能申请写锁。
读写锁适合于对数据结构的读次数比写次数多得多的情况。
原文链接:https://blog.csdn.net/daaikuaichuan/article/details/82950711
读写锁基本原理:
在对数据的读写应用中,很多情况是大量的读操作,二较少的写操作,例如对数据库系统数据的访问,显然,这时使用互斥锁将非常影响效率。为了满足这一情况,posix线程提供了读写锁机制。
读写锁的基本操作
原文链接:https://blog.csdn.net/lindaxym/article/details/79872176
自旋锁(同步)
自旋锁与互斥量功能一样,唯一一点不同的就是互斥量阻塞后休眠让出cpu,而自旋锁阻塞后不会让出cpu,会一直忙等待,直到得到锁。
自旋锁在用户态使用的比较少,在内核使用的比较多!自旋锁的使用场景:锁的持有时间比较短,或者说小于2次上下文切换的时间。
自旋锁在用户态的函数接口和互斥量一样,把pthread_mutex_xxx()中mutex换成spin,如:pthread_spin_init()。
信号量(同步与互斥)
信号量广泛用于进程或线程间的同步和互斥,信号量本质上是一个非负的整数计数器,它被用来控制对公共资源的访问。
编程时可根据操作信号量值的结果判断是否对公共资源具有访问的权限,当信号量值大于 0 时,则可以访问,否则将阻塞。PV 原语是对信号量的操作,一次 P 操作使信号量减1,一次 V 操作使信号量加1。
【信号量用于同步】:
【信号量用于互斥】:
原文链接:https://blog.csdn.net/daaikuaichuan/article/details/82950711
线程同步的四种方法
1、临界区(Critical Section):
通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问。
优点:保证在某一时刻只有一个线程能访问数据的简便办法
缺点:虽然临界区同步速度很快,但却只能用来同步本进程内的线程,而不可用来同步多个进程中的线程。
2、互斥量(Mutex):
为协调共同对一个共享资源的单独访问而设计的。
互斥量跟临界区很相似,比临界区复杂,互斥对象只有一个,只有拥有互斥对象的线程才具有访问资源的权限。
优点:使用互斥不仅仅能够在同一应用程序不同线程中实现资源的安全共享,而且可以在不同应用程序的线程之间实现对资源的安全共享。
缺点:①互斥量是可以命名的,也就是说它可以跨越进程使用,所以创建互斥量需要的资源更多,所以如果只为了在进程内部是用的话使用临界区会带来速度上的优势并能够减少资源占用量。因为互斥量是跨进程的互斥量一旦被创建,就可以通过名字打开它。
②通过互斥量可以指定资源被独占的方式使用,但如果有下面一种情况通过互斥量就无法处理,比如现在一位用户购买了一份三个并发访问许可的数据库系统,可以根据用户购买的访问许可数量来决定有多少个线程/进程能同时进行数据库操作,这时候如果利用互斥量就没有办法完成这个要求,信号量对象可以说是一种资源计数器。
3、信号量(Semaphore):
为控制一个具有有限数量用户资源而设计。它允许多个线程在同一时刻访问同一资源,但是需要限制在同一时刻访问此资源的最大线程数目。互斥量是信号量的一种特殊情况,当信号量的最大资源数=1就是互斥量了。
优点:适用于对Socket(套接字)程序中线程的同步。(例如,网络上的HTTP服务器要对同一时间内访问同一页面的用户数加以限制,只有不大于设定的最大用户数目的线程能够进行访问,而其他的访问企图则被挂起,只有在有用户退出对此页面的访问后才有可能进入。)
缺点:①信号量机制必须有公共内存,不能用于分布式操作系统,这是它最大的弱点;
②信号量机制功能强大,但使用时对信号量的操作分散, 而且难以控制,读写和维护都很困难,加重了程序员的编码负担;
③核心操作P-V分散在各用户程序的代码中,不易控制和管理,一旦错误,后果严重,且不易发现和纠正。
4、事件(Event):
用来通知线程有一些事件已发生,从而启动后继任务的开始。
优点:事件对象通过通知操作的方式来保持线程的同步,并且可以实现不同进程中的线程同步操作。
缺点:
总结:
①临界区不是内核对象,只能用于进程内部的线程同步,是用户方式的同步。互斥、信号量是内核对象可以用于不同进程之间的线程同步(跨进程同步)。
②互斥其实是信号量的一种特殊形式。互斥可以保证在某一时刻只有一个线程可以拥有临界资源。信号量可以保证在某一时刻有指定数目的线程可以拥有临界资源。
原文链接:https://blog.csdn.net/weixin_45590051/article/details/116530748
发布订阅模式
订阅者(Subsciber)通过事件注册(Subscribe)将订阅事件提交到调度中心(Topic),调度中心保存好订阅者的注册信息(回调函数),每当发布者(Publisher)发布事件的时候,通过事件发布(Publish)将发布的消息提交到调度中心,然后调度中心统一处理订阅者注册该事件的消息(执行注册时的回调函数)。
原文链接:https://blog.csdn.net/chenjycm/article/details/105779425
GPL
是GNU General Public License(GNU通用公共许可证)的缩写,是一种广泛使用的软件许可协议,由自由软件基金会(Free Software Foundation, FSF)创立的GNU项目制定。它的设计目的是保证软件的自由度,即保证用户可以自由地运行、复制、修改和重新分发软件,同时也确保这些自由被任何后续的分发版本保持下去。
主要特点:
-
自由使用:允许用户无限制地运行软件。
-
源代码访问:要求软件以源代码形式提供,以便用户可以查看和修改代码。
-
再分发自由:允许用户重新分发软件,无论是原始版本还是修改后的版本。
-
修改和衍生作品:用户可以修改软件,并且必须在分发修改版时也遵循GPL许可,确保所有收到的人都能享有相同的自由。
-
** copyleft条款**:这是一个关键特征,意味着任何基于GPL许可软件开发的衍生作品也必须采用GPL许可,确保自由软件的开放性不会在下游被封闭。
版本历史:
-
GPLv1:最初的版本,发布于1989年。
-
GPLv2:最广泛使用的版本之一,发布于1991年,许多著名的自由软件项目如Linux内核都采用这一版本。
-
GPLv3:发布于2007年,对一些法律和技术问题进行了更新,包括软件专利、DRM(数字版权管理)和许可证兼容性等问题。
应用范围:
GPL适用于各种类型的软件,包括操作系统(如Linux)、应用程序、编程库等,是自由软件和开源软件运动中的基石之一。
凸函数
定义:
凸函数是数学分析中的一个重要概念,尤其在优化理论和凸分析中扮演核心角色。一个实值函数 𝑓:𝑅𝑛→𝑅f:Rn→R 被称为凸函数,如果对于所有 𝑥,𝑦∈𝑅𝑛x,y∈Rn 和所有的 𝑡∈[0,1]t∈[0,1],下述条件成立:
𝑓(𝑡𝑥+(1−𝑡)𝑦)≤𝑡𝑓(𝑥)+(1−𝑡)𝑓(𝑦)f(tx+(1−t)y)≤tf(x)+(1−t)f(y)
这个不等式表达的是函数图形在任意两点间连线段上的点不会高于这两点对应的函数值,形象地说,这样的函数图形在每两点间都是“下凹”的。这个性质意味着凸函数没有局部极小值点,除了可能是全局最小值点外。这也表明,如果一个函数是凸的,那么任何局部最小值点自动就是全局最小值点,这是凸优化问题能够保证全局最优解的基础。
几个典型的凸函数例子包括:
-
一次函数(线性函数)
-
二次函数(当其系数矩阵为半正定矩阵时)
-
指数函数 𝑒𝑥ex
-
幂函数 𝑥𝑎xa 当 𝑎≥1a≥1 或 0<𝑎<10<a<1 且 𝑥≥0x≥0
-
对数函数 log(𝑥)log(x) 当 𝑥0x0
相反地,如果上述不等式反向,则函数被称为凹函数。如果既不满足凸函数也不满足凹函数的定义,则该函数是非凸非凹函数。在凸优化中,我们主要关注的是凸函数及其性质。
注意:
-
在中国大陆的数学界,关于函数凹凸性的定义和国外的定义是相反的。Convex Function在某些中国大陆的数学书中指凹函数,而Concave Function指凸函数。但在涉及经济学的很多书中,凹凸性的提法和其他国家的提法是一致的。
-
凸函数的定义在不同的教材或文献中可能会有所不同,但基本上都遵循上述的核心定义。
性质:
-
一阶导数递增:如果一个函数是凸函数,那么它的一阶导数在定义域内单调递增。
-
二阶导数非负:如果一个函数是凸函数,那么它的二阶导数在定义域内恒大于或者等于0。如果其二阶导数在区间上恒大于0,则称为严格凸函数。
-
切线作用:对于凸函数的任意两个点,函数图像段位于这两点之上的一条直线是这个函数图像在两点处的切线。这意味着凸函数的图像始终在它的切线之上。
-
局部最小值即全局最小值:凸函数的任何极小值也是最小值。严格凸函数最多有一个最小值。
应用:
凸函数在金融风险管理、偏微分方程、凸优化、图像识别和资源分配问题等领域有广泛的应用。例如,在金融领域,凸函数被广泛用于估算资产的风险度量;在偏微分方程中,凸函数可以用于最小曲面问题的求解;在优化问题中,凸函数是描述和解决优化问题的关键工具。
综上所述,凸函数是一类具有特定性质和广泛应用的数学函数。其定义基于函数的值与其参数之间的凸性关系,具有一系列重要的数学性质和应用价值。
凸优化算法
是数学最优化领域中的一类重要算法,专门用于解决凸优化问题,即目标函数为凸函数,且约束条件为凸集的优化问题。以下是关于凸优化算法的详细回答:
定义与性质
凸优化算法研究的是定义在凸集中的凸函数最小化问题。凸优化问题具有一系列良好的性质,例如:
-
局部最优解必定是全局最优解。
-
凸函数的凸性使得凸分析中的有力工具(如次导数)在最优化问题中得以应用。
常见算法
凸优化问题可以通过多种算法求解,以下是一些常见的算法:
-
梯度下降法:通过迭代地计算函数在当前点的梯度,并沿梯度的反方向更新参数,以逐渐逼近最优解。
-
内点法:适用于具有不等式约束的凸优化问题。该算法从可行域的内部开始,沿着使目标函数值下降且满足约束的方向移动,直到找到最优解。
-
牛顿法:基于函数的二阶导数信息(即海森矩阵)进行迭代更新,通常比梯度下降法收敛更快。
-
坐标下降法:在每次迭代中,固定除一个坐标外的所有坐标,然后沿该坐标方向进行最小化,直到收敛。
-
捆集法(Bundle Method):适用于求解非光滑凸优化问题。它通过维护一个包含函数值和次梯度的“捆集”,来逼近非光滑函数并求解。
算法选择与应用
在选择凸优化算法时,需要考虑问题的性质、约束条件、函数的光滑性等因素。不同的算法在不同的场景下具有不同的性能表现。
凸优化算法广泛应用于多个领域,包括:
-
自动控制系统:用于优化控制策略,提高系统性能。
-
信号处理:用于信号重构、去噪等任务,提高信号处理准确性。
-
金融:用于证券组合优化、风险管理等问题,实现资产的有效配置和风险管理。
-
机器学习:在支持向量机、逻辑回归等算法中用于求解优化问题,提升模型的准确性和泛化能力。
总结
凸优化算法是数学最优化领域中的重要工具,专门用于解决凸优化问题。通过选择合适的算法并结合问题的具体性质,可以高效地求解凸优化问题,并在多个领域得到广泛应用。
什么是凸函数以及如何判断函数是否为凸函数
一、什么是凸函数
定义一
对于一元函数f(x),如果对于任意tϵ[0,1]均满足:f(tx1+(1−t)x2)≤tf(x1)+(1−t)f(x2),则称f(x)为凸函数(convex function)
如果对于任意tϵ(0,1)均满足:f(tx1+(1−t)x2)<tf(x1)+(1−t)f(x2),则称f(x)为严格凸函数(convex function) 定义二 首先定义凸集,如果x,y属于某个集合M,并且所有的θx+(1−θ)f(y)也属于M,那么M为一个凸集。如果函数f的定义域是凸集,并且满足f(θx+(1−θ)y)≤θf(x)+(1−θ)f(y)则该函数为凸函数。 我们可以从几何上直观地理解凸函数的特点,凸函数的割线在函数曲线的上方,如图1所示:从f(x1)连一条线到右侧的虚线,利用三角形边的比例性质可以推出中间虚线与上面直线交点的值
上面的公式,完全可以推广到多元函数。在数据科学的模型求解中,如果优化的目标函数是凸函数,则局部极小值就是全局最小值。这也意味着我们求得的模型是全局最优的,不会陷入到局部最优值。 「注意」:中国大陆数学界某些机构关于函数凹凸性定义和国外的定义是相反的。Convex Function在某些中国大陆的数学书中指凹函数。Concave Function指凸函数。但在中国大陆涉及经济学的很多书中,凹凸性的提法和其他国家的提法是一致的,也就是和数学教材是反的。举个例子,同济大学高等数学教材对函数的凹凸性定义与本条目相反,本条目的凹凸性是指其上方图是凹集或凸集,而同济大学高等数学教材则是指其下方图是凹集或凸集,两者定义正好相反。
二、如何判断函数是否为凸函数?
对于一元函数f(x),我们可以通过其二阶导数f′′(x) 的符号来判断。如果函数的二阶导数总是非负,即f′′(x)≥0,则f(x)是凸函数
对于多元函数f(X),我们可以通过其Hessian矩阵(Hessian矩阵是由多元函数的二阶导数组成的方阵)的正定性来判断。如果Hessian矩阵是半正定矩阵,则是f(X)凸函数
三、为什么要求是凸函数呢?
如果是下图这样的函数,则无法获得全局最优解。
四、为什么要求是凸集呢?
如果可行域不是凸集,也会导致局部最优。
五、Jensen不等式
对于凸函数,我们可以推广出一个重要的不等式,即Jensen不等式。如果 f是凸函数,X是随机变量,那么f ( E ( X ) ) ≤ E ( f ( X ) ),上式就是Jensen不等式的一般形式 我们还可以看它的另一种描述。假设有 n个样本x1,x2,...,xn和对应的权重α1,α2,...,αn,权重满足a i ⩾ 0 ,∑αi=1,对于凸函数 f,以下不等式成立: f(∑i=1 n αi xi)≤∑i=1 n αi f(xi)
六、实际建模中如何判断一个最优化问题是不是凸优化问题
-
目标函数f如果不是凸函数,则不是凸优化问题
-
决策变量x中包含离散变量(0-1变量或整数变量),则不是凸优化问题
-
约束条件写成g ( x ) ≤ 0 时,g如果不是凸函数,则不是凸优化问题 之所以要区分凸优化问题和非凸的问题原因在于凸优化问题中局部最优解同时也是全局最优解,这个特性使凸优化问题在一定意义上更易于解决,而一般的非凸最优化问题相比之下更难解决。
七、非凸优化问题如何转化为凸优化问题的方法:
非凸优化问题如何转化为凸优化问题的方法:
-
修改目标函数,使之转化为凸函数
-
抛弃一些约束条件,使新的可行域为凸集并且包含原可行域
四元数是做什么用的
四元数为我们提供了将一个点围绕指定的轴旋转指定的角度的方法。
四元数(Quaternion)是一种数学工具,它在多个领域中有着广泛的应用,特别是在计算机图形学、机器人学、航空航天和信号处理等领域。四元数主要用于表示和处理三维空间中的旋转。
在三维空间中,表示一个物体的旋转有多种方法,例如旋转矩阵(Rotation Matrix)或欧拉角(Euler Angles)。然而,这些方法都有其局限性:
-
旋转矩阵:虽然能够准确表示旋转,但是矩阵乘法运算比较复杂,特别是当涉及到多个变换时,计算量会迅速增加。
-
欧拉角:使用角度来表示旋转,直观易懂,但是欧拉角会有万向节锁(Gimbal Lock)的问题,即当一个轴与另外两个轴之一对齐时,另外两个轴将失去独立性,这会导致在某些情况下计算不稳定。
四元数则较好地解决了这些问题。四元数由一个实数部分和三个虚数部分组成,通常表示为 q = a + bi + cj + dk
,其中 a, b, c, d
是实数,i, j, k
是虚数单位。四元数可以表示为复数的形式,但是它与传统的复数不同,因为它有三个虚数单位而不是两个(在四元数中,i^2 = j^2 = k^2 = ijk = -1
)。
使用四元数来表示和计算旋转的好处包括:
-
避免万向节锁:四元数不会出现欧拉角在某些变换时失去独立性的问题。
-
计算效率:四元数的乘法和除法运算比矩阵运算要简单快捷得多。
-
连续旋转:四元数可以连续地表示旋转,使得在连续变换时非常平滑,不会出现欧拉角那样的跳变。
-
包含尺度变换:四元数可以方便地表示包含缩放(尺度)的旋转,这在计算机图形学中非常有用。
因此,四元数在需要表示和处理三维空间中旋转的场景中是非常有用的工具,特别是在图形渲染、游戏开发、机器人导航、航空航天器的姿态控制等领域。
制导-导弹
定义
指按照一定规律控制武器飞行方向、姿态、高度和速度,引导其战斗部准确攻击目标的军用技术。
精确制导技术足以微电子、电子计算机技术和光电转换技术为核心,以自动控制技术为基础发展起来的高新技术,广泛应用于导弹、航空炸弹、炮弹、鱼雷、地雷等武器系统中。
精确制导武器系统按照不同控制引导方式可概括为自主式、寻的式、遥控式和复合式制导4种。
自主式制导。
引导指令由弹上制导系统按照预先拟定的飞行方案飞向目标,制导系统与目标、指挥站不发生任何联系。海湾战争中的“飞毛腿”导弹就属于自主式制导。
寻的式制导。
有一个动的、静态的目标对象。
利用弹上设备接受来自目标辐射或反射的能量,如电磁波、红外线、激光、可见光等信号,靠弹上探测设备测量目标和导弹相对运动的参数,并将这些参数变换成引导指令信号,使导弹飞向目标。
遥控制导。
由设在导弹以外的地面、水面或空中制导站控制导弹飞向目标。
复合制导
是在—种武器中采用两种或两种以上制导方式组合形成的制导技术。
智能制导
目前,随着微电子技术与电子计算机技术的曰新月异,精确制导武器正向更先进的智能制导发展。智能制导的优点是抗干扰能力强。智能化的关键是用成像传感器代替人眼,用微处理器模拟人的分析、推理、判断、决策等逻辑功能,用电子计算机和各种软件部分地代替人的思维过程。
发展多用途导引头也是制导技术的前景之一。—种导弹能对付不同类型的目标,或具有在不同平台上发射的能力,是今后导弹发展的方向。 未来战争复杂的电磁环境.要求提高精确制导武器的抗干扰能力。
制导-卫星
一般称为轨控:卫星向着期望轨道运行,由地面发送上行指令控制轨控发动机点火,又称为轨道维持或者轨道机动,人在回路,非自动。
制导-火箭
定义
Guidance,即导引和控制无人飞行器按一定规律飞向目标或预定轨道的技术和方法。
广义的制导系统:包括与质心运动相关的一切机动,如:加表减载控制、子级脱落控制等。狭义的制导:何控制火箭进入期望的目标轨道这么一项技术。
制导过程中,导引系统不断测定飞行器与目标或预定轨道的相对位置关系,发出制导信息传递给飞行器控制系统,以控制飞行。分有线制导、无线电制导、雷达制导、红外制导、激光制导、音响制导、地磁制导、惯性制导和天文制导等。
制导技术主要包括自主制导、遥控制导和惯性制导等几种方式。
自主制导:
依赖于飞行器自身携带的传感器和计算机系统来确定飞行路径和目标位置。
遥控制导
则是由地面或其他飞行器上的操作员通过无线电或其他通信手段对飞行器进行控制。
惯性制导
则是利用飞行器内部的惯性测量单元来确定其位置和速度,不受外部环境影响。
在弹道导弹和火箭等领域,制导技术是确保其能够准确打击目标的关键。例如,朝鲜报道其在2024年成功进行了采用新制导导航技术的战术弹道导弹试射,这表明其弹道导弹技术取得了新的进展。
制导技术同样在航天领域发挥着重要作用。例如,中国的空间交会对接技术,天舟七号货运飞船就采用了新的3小时交会对接方案,将太空“快递”提升为速运”,这不仅提高了太空物资运输的效率,也进一步验证了中国航天技术的成熟度。
此外,制导技术也在民用领域得到广泛应用,如无人机送货、地图导航等。随着技术的不断发展和创新,制导技术的应用领域将会更加广泛。
标称轨道
是指设计时理论设定的、理想的航天器运行轨迹。
在标称轨道中,“标称”一词通常指设计时所确定的技术指标或者特性。因此,所谓的标称轨道就是指在计划和设计阶段为航天器预先设定的理想轨道。这条轨道是根据任务需求以及实际的发射能力和飞行控制能力综合计算得出的,旨在确保航天器能够顺利完成预定任务。
标称轨道的概念在实际操作中具有重要的指导意义。首先,它是飞行控制的基础。在航天器发射和入轨阶段,飞行控制系统会尽力将航天器引导至这条标称轨道上。接下的飞行过程中,任何偏离此轨道的波动都会被监测并需要通过中途修正来调整,以确保任务目标不受影响。
其次,标称轨道是任务规划和实施的重要参考。在进行空间任务设计时,科研人员会根据标称轨道来优化飞行路径、计算消耗的燃料量、安排与地面站的通信时间窗口等。这些计划的实施都依赖于一个精确设定的标称轨道,以期在保证任务成功的同时,最大限度地节约成本和资源。
由于太空环境复杂多变,如地球引力场的非均匀性、其他天体的引力作用、太阳风压力等因素都可能引起轨道的偏移,这就需要对航天器进行定期的轨道校正,使其尽可能贴近或回归到标称轨道上。这种校正通常通过轨道控制系统实施精确的推力调整来完成。
在实际应用中,例如静止轨道卫星的标称投影问题,就是一个具体案例。为了将卫星拍摄的影像数据有效地用于气象分析或其他地球观测任务,通常需要对这些数据进行地理校正,将其映射到相应的地理位置上。这一过程中,标称投影作为一种简化处理手段被广泛使用,它可以帮助将数据快速转换成易于分析和使用的格式。
此外,理解标称轨道的概念还有助于深入掌握轨道设计和轨道控制的技术细节。例如,在进行轨道优化时,可以采用标称轨道作为基础模型,通过最小化某些性能指标(如燃料消耗、飞行时间等)来寻求最优的轨道转移方案。
综上所述,标称轨道不仅是空间任务设计和实施的理论基准,也是确保航天器能够高效、准确执行任务的关键。通过对标称轨道的持续研究和应用,不仅可以提升航天任务的成功率,还可以在更大程度上实现空间资源的合理利用和探索。
火箭过载
指在火箭发射和飞行过程中,由于加速度的作用,使得火箭及其内部搭载的物体(如航天员、设备等)所承受的重力超过其正常重力状态的现象。这种现象可以用过载系数(通常用G表示)来衡量,它表示实际作用在物体上的重力与其正常重力状态下的重力之比。
以下是关于火箭过载的详细解释:
定义与原理:
-
火箭过载是由于火箭在飞行过程中不断加速,使得物体所承受的重力超过其正常重力状态。这种过载现象会对物体产生额外的压力和影响,特别是在航天员身上,会引起一系列生理和心理的变化。
-
过载系数(G)是一个重要的衡量指标,它表示实际作用在物体上的重力与其正常重力状态下的重力之比。例如,当过载系数为2G时,表示物体所承受的重力是其正常重力状态下的两倍。
过载值范围:
-
火箭正常发射时的最大过载值通常在4-5G之间。这意味着在火箭发射的峰值时刻,航天员和设备所承受的重力可能是其正常重力状态下的4-5倍。
-
在某些紧急情况下,如火箭发射过程中的异常或逃逸系统启动时,过载值可能会更高,甚至达到10-12G。这种过载已经接近人类能够承受的极限,并可能导致严重的伤害。
对航天员的影响:
-
火箭过载对航天员的生理和心理都会产生显著影响。在过载状态下,航天员的血液循环、呼吸和感知等系统都会发生变化,需要经历严格的训练和适应。
-
为了应对过载的影响,航天员会进行专门的地面训练,包括在专门的设备上模拟过载环境,以提高他们的适应能力和应对能力。
总结:
火箭过载是火箭发射和飞行过程中不可避免的现象,它会对火箭内部搭载的物体产生额外的压力和影响。过载系数是衡量过载程度的重要指标,而航天员则需要通过专门的训练和适应来应对过载带来的生理和心理影响。
制导
是一种导引和控制飞行器按一定规律飞向目标或预定轨道的技术和方法。以下是对制导技术的详细解释:
制导的基本过程
-
制导过程中,导引系统不断测定飞行器与目标或预定轨道的相对位置关系。
-
导引系统发出制导信息传递给飞行器控制系统,以控制飞行。
制导的分类
制导技术可以分为多种类型,包括但不限于以下几种:
-
有线制导:
-
是遥控制导的一种方式。
-
制导站不断跟踪目标,形成制导指令,并通过有线形式传输到制导武器上。
-
优点包括设备简单、精度高、抗干扰能力强;缺点有操作难度大、作用距离近。
-
适用于近程反坦克导弹等场景。
-
-
雷达制导:
-
分为雷达波束制导和雷达寻的制导。
-
利用雷达波束或目标反射的电磁波来跟踪目标,并控制导弹飞向目标。
-
-
红外制导:
-
利用目标发出的红外辐射来跟踪目标。
-
-
激光制导:
-
利用激光束照射目标,并接收从目标反射回来的激光信号来制导。
-
-
惯性制导:
-
利用陀螺仪高速旋转的稳定性建立惯性坐标系,测量导弹的速度和加速度等方位数据,反馈给控制系统来控制导弹的飞行。
-
主要适用于导弹飞行的初段和中段。
-
-
地形匹配制导:
-
利用地形高度随位置变化而变化的原理进行工作,对照导弹当前所在区域的地形与预定飞行航线的地形,以获得正确飞行路线。
-
主要适用于导弹飞行初始段、中段和末段。
-
-
自主制导:
-
是一种不依赖于外部信息的制导方式。
-
-
GPS制导:
-
利用全球定位系统(GPS)进行制导,提高打击精度。
-
制导技术的发展趋势
-
随着现代科技的快速发展,制导技术正向着更高的精度、更智能的识别功能、多攻击方式等方向发展。
-
主动制导技术、激光武器技术和智能化制导系统等是未来的发展方向。
总之,制导技术是军事、航空、航天等领域中不可或缺的一部分,随着科技的不断发展,制导技术也将不断得到提高和完善。
一句话理解制导与控制
制导
就是将飞行器看作质点,我们关心飞行器的位置。制导律设计产生到下一位置需要的迎角以及控制量信息。
控制
是将飞行器看作刚体,我们关心的是其姿态。控制律设计实现对飞机期望状态的快速准确响应。
在制导律设计的方法上与控制律的设计方法没有多大的区别。
法向过载由转弯引起,体现在航迹角的变化,主要考虑乘员的舒适性。
输出变量跟踪参考信号,称之为跟踪问题,参考信号为常值称为定点调节。
原文链接:https://blog.csdn.net/JISANSAN/article/details/106537865
摄动制导、捷联制导、迭代制导
一、摄动制导
定义:
摄动制导是以小偏差理论建立关机方程和导引方程对飞行器运动轨迹进行控制的制导方法。它又称线性制导或程序导引法。
只关注落点,不关注实际弹道,需要保证实际落点与标准弹道落点相同,即控制射程偏差和横程偏差为零。
早期阶段。
原理:
在摄动制导中,摄动是指航天器或导弹在绕某一天体运行时,因受其他天体或其他因素影响,其轨道产生的偏离。在导弹制导中,摄动指导弹质心运动参数因受多种因素影响,相对于标准弹道参数产生的小偏差。
指一个天体绕另一个天体按二体问题的规律运动时,因受别的天体的吸引或其他因素的影响,在轨道上产生的偏差,这些作用与中心体的引力相比是很小的,因此称为摄动。天体在摄动作用下,其:坐标、速度、轨道,要素都产生变化,这种变化成分称为摄动项。
特点:
-
小偏差前提:摄动制导的前提是必须保证实际弹道与标准弹道之间(特别是在主动段)的偏差很小。
-
制导方法:包括弹头落点偏差控制制导方法、速度关机的射程控制制导方法等。
-
误差:由于关机方程没有考虑射程展开二阶以上各项,制导方法误差较大。为提高精度,可采用二阶摄动制导。
摄动制导三大方程:
射程控制:关机方程设计-关机时间;横程控制:横向导引方程设计-偏航通道;弹道倾角控制:法向导引方程设计-俯仰通道。
二、捷联制导
“捷联(Strapdown,Strap:系,捆绑)”这一术语的英文原义就是“捆绑”的意思。将惯性敏感元件(陀螺和加速度计)直接“捆绑”在运载体的机体上,从而完成制导和导航。
基本组成:陀螺仪、加速度计。
陀螺仪用来测量运载平台的各种倾角,比如俯仰角、横滚角,也就是所谓的“姿态”。
加速度计用来测量平台的线性加速度(几个方向上)。
利用加速度计或者陀螺仪得出加速度和角速度,积分得到速度,位置和角度,由于积分误差随时间增加,一般都结合GPS进行修正,就是一般的惯导系统。
定义:
捷联制导是利用直接安装在弹体上的惯性测量装置进行的制导。它将陀螺仪和加速度计直接固联在载体上,利用惯性原理控制和导引导弹。
由于敏感元件直接装在运动物体上,振动较大,工作的环境条件较差并受其角运动的影响,必须通过计算机计算才能获得所需要的运动参数。这种系统对计算机的容量和运算速度要求较高,但整个系统的重量和尺寸较小。
捷联惯导系统,其敏感元件是直接装在飞行器上,因此捷联式仪表比起装在稳定平台上的仪表所遇到的动态环境恶劣得多。通过对仪表和系统误差的补偿和修正,是可以将捷联系统精度提高到平台系统的水平。
分类:
-
位置捷联式惯性制导:通过位置陀螺仪、加速度计等设备测量角速度、角位移和线加速度,送入弹载计算机进行计算,形成导引信号和关机指令。
-
速率捷联式惯性制导:通过速率陀螺仪测量导弹角速度矢量(瞬时平均角速度),与加速度计测得的加速度矢量结合,由弹载计算机进行导航计算,得到速度和位置导航参数。
特点:
-
直接测量:直接通过弹体上的设备测量和计算,无需外部信号。
-
应用:多用于姿态角变化较大和机动飞行的中近程导弹的制导。
三、迭代制导
定义:
是用迭代的方法选择制导规律控制导弹和运载火箭关机时间的制导方法。它基于标准弹道关机点的坐标和速度矢量作为关机条件。
一种自适应制导技术。
特别适合于需要动态优化飞行轨迹的应用场景。与摄动制导不同,迭代制导不是基于预设弹道,而是在飞行过程中不断根据当前的飞行状态(如速度、位置、外部环境等)重新计算最优的飞行轨迹和制导指令,以实现更精确的轨迹控制和性能优化。迭代制导能够在飞行中实时调整目标入轨点,提高轨道插入精度,尤其是在执行复杂轨道转移或需要高精度轨道注入的任务中更为有效。
原理:
以标准弹道关机点的坐标和速度矢量作为关机条件,用迭代的方法选择制导规律,控制导弹和运载火箭的关机时间。
-
实时评估: 在制导过程中,系统持续收集关于飞行器当前状态(如位置、速度、姿态)以及外界环境参数(如风速、重力场变化)的信息。
-
目标与约束: 系统根据任务目标(如打击点、轨道插入点)和约束条件(如燃料限制、飞行时间、避障需求)定义优化问题。
-
迭代计算: 利用优化算法(如梯度下降、遗传算法、粒子群优化等),在每次迭代中根据最新的状态信息和目标函数,计算出新的最优或更优的飞行轨迹(不需要对曲率和再入段空气动力的影响进行修正,直接对导弹和运载火箭的推力矢量及关机时间进行控制)。
-
指令生成与执行: 根据计算出的最佳轨迹,生成制导指令,调整飞行器的飞行路径和姿态,然后重复这一过程,直至达到目标或满足终止条件。
控制过程:
-
迭代制导的整个控制工作及其程序由两部分组成:剩余飞行时间的估计和迭代计算,以及控制姿态角的计算。
-
通过迭代计算得到的关机方程,控制运载火箭与导弹的射程,确保实际弹道与标准弹道的关机点坐标矢量和速度矢量相等,从而避免射程偏差。
特点:
-
高精度:迭代制导具有较高的制导精度(精度比摄动制导要高)。
-
自适应能力强:较好地解决了远程导弹和运载火箭低推力、长时间飞行的制导问题。
-
计算公式简单:计算量少,可自动起步,易于弹上实现。
-
还具有很强的抗干扰能力,能够在敌方干扰和复杂电磁环境下保持稳定的导航和制导性能。
综上所述,摄动制导、捷联制导和迭代制导各有其特点和应用场景,为现代飞行器提供了多样化的制导选择。
捷联惯导系统(SINS)
是在平台式惯导系统之上发展来的,它是一种无框架系统,是由三个速率陀螺、三个线加速度计和微型计算机组成。捷联惯导系统的陀螺和加速度计直接固连在载体上作为测量标准,它跟平台式惯导系统区别就在于不再由机电平台,而是在计算机内建立一个数学平台,其飞行器姿态数据通过计算机得到。
导航,制导,姿控的关系
导航、制导和姿态控制(姿控)是航天器、飞行器以及其他移动平台控制领域的三个核心组成部分,它们相互配合,确保平台能够准确、安全地完成既定任务。下面是它们各自的作用及相互之间的关系:
导航:
navigation,导航主要是确定平台当前的位置、速度以及姿态等状态信息,并预测或规划其后续的运动路径。它涉及使用传感器(如GPS、惯性导航系统、星敏感器等)和算法来不断地估计平台相对于地球或其他参考坐标系的位置。导航系统为制导和姿态控制提供必要的信息,告诉系统“我在哪里,飞得多快?方位?”。
一般用发射惯性系。
眼睛。
制导:
guidance,制导负责根据目标位置或预定轨道(统称:标称轨道),计算出从当前位置到期望位置的最优或所需路径,并生成控制指令以引导平台沿此路径移动。制导系统利用导航提供的位置和速度信息,通过比较实际路径与理想路径的差异,计算出需要对飞行器进行的纠正措施。简而言之,制导回答了“我应该如何去那里”的问题。
姿态控制(姿控):
control system,姿态控制负责维持或改变平台的三维方向(俯仰、偏航、滚转),确保平台按照制导指令准确指向或保持期望的姿态。这包括使用执行机构(如喷气发动机、舵面、反应轮等)以及反馈控制算法来实时调整平台的姿态。姿态控制确保平台能够稳定飞行或对制导指令做出快速响应,其核心在于“我该如何正确地指向”。
依据制导指令,摇摆尾部的矢量发动机,实现箭体姿态的改变。火箭的动力箭体轴向上,改变箭体姿态,也就改变了箭体的过载方向,质心运动的路径会改变,也就改变整个飞行轨迹。
关系:
三者之间的关系紧密相连:导航提供制导所需的位置和速度信息,制导依据这些信息计算出飞行路径并发出控制指令,而姿态控制则根据这些指令调整平台的姿态,确保平台能够精确地沿着规划的路径前进。在实际应用中,导航、制导与控制(NGC)系统通常作为一个整体协同工作,共同保障飞行任务的成功完成。
制导(Guidance):即轨迹规划(Trajectory Planning),从起始位置/状态到目标位置/状态全程的位移、速度、加速度规划;
导航(Navigation):指的是 "the state at a given time",即某一时刻运动体处的位置/状态;
控制(Control):在构型空间(Configuration Space)依据具体的控制律(Control Law)控制执行器,达到制导要求的状态。
用个简化的例子说,比如从香港到旧金山的航班,制导相当于全程的航行规划,导航告诉你当前飞机飞到哪个位置了,控制是实时的发动机及机翼动作。
链接:https://www.zhihu.com/question/39452981/answer/157315028
火箭为什么要程序转弯
火箭进行程序转弯主要是为了调整飞行轨迹,确保其能够准确地达到预定的目标位置或轨道。这个过程涉及到几个重要的因素:
-
轨道机动:火箭在飞行过程中可能需要改变其速度和方向,以进入或维持预期的轨道。例如,在地球轨道任务中,火箭可能需要进行程序转弯来调整其轨道倾角,以便与目标卫星或空间站的轨道对齐。
-
飞行路径优化:通过程序转弯,火箭可以避开不必要的空气阻力,减少燃料消耗,提高飞行效率。在大气层外飞行时,这一因素尤为重要。
-
任务需求:某些任务可能要求火箭在特定时间或位置进行动作,比如对地球某一特定区域的观测,或是为了与另一飞行器对接。
-
稳定性和控制:火箭在飞行中需要保持稳定,程序转弯可以帮助调整其姿态,保证飞行的稳定性和可控性。
-
地球自转影响:地球自转会产生科里奥利力,对火箭的轨迹产生影响。火箭的程序转弯可以用来补偿这种效应,确保飞行路径的准确性。
-
环境适应性:火箭在飞行中可能会遇到各种不可预测的环境因素,如风速和风向的变化,程序转弯可以帮助火箭适应这些变化。
在执行程序转弯时,火箭的导航和控制系统会计算最合适的转弯时机、角度和速度变化,以确保任务的成功。这些计算会综合考虑火箭的性能限制、飞行任务需求以及外部环境条件。
大推力沉底
是火箭发射技术中的一种推进剂管理方法,它主要用于运载火箭上面级的微重力环境下。这种方法通过利用火箭发动机产生的推力来控制推进剂在燃料箱中的位置,从而确保推进剂能够有效地供给发动机,维持火箭的正常运行。下面将详细分析大推力沉底的技术背景、实施方式、应用范围以及它在现代航天发射任务中的重要性:
技术背景与发展
-
技术需求:随着航天技术的发展,对火箭发射的精确度和可靠性要求越来越高。特别是在微重力环境下,推进剂的管理成为了一个关键技术难题。
-
技术进步:我国在大推力氢氧发动机技术上取得显著进展,如500吨级垂直双工位液体火箭发动机试验台的成功建设和应用,为大推力沉底技术的实施提供了坚实的基础。
大推力沉底的实施方式
-
持续正推沉底:通过持续施加小量推力,使推进剂在燃料箱中保持向底部集中的状态,避免推进剂在微重力环境下随意漂浮,影响发动机的燃料供应。
-
正推重定位沉底:在需要进行轨道调整或姿态控制时,通过施加较大的推力,实现推进剂的快速重定位,确保发动机在关键时刻能够获得足够的推进剂。
-
辅助发动机:使用压缩气罐、固体火箭等辅助发动机提供加速度,使得燃料和氧化剂在加速度作用下沉积到容器底部。
-
柔性燃料箱:采用柔性设计的燃料箱,通过改变其形状和结构,使得燃料在失重条件下能够自然沉积到发动机附近。
-
磁液技术(未广泛应用):利用磁场对液体燃料进行操控,使其在磁场作用下沉积到特定位置。
关键技术参数:
贮箱容积:大推力火箭的贮箱容积一般多达100升以上,需要确保在这些大容量容器中燃料能够均匀分布和有效利用。
燃料和氧化剂比例:在双组元液态推进剂系统中,燃料和氧化剂按一定比例混合燃烧产生推力。确保这两种组分的均匀混合和供应对于大推力火箭至关重要。
涡轮泵效率:大部分火箭采用涡轮泵来吸取和输送燃料。涡轮泵的效率直接影响到燃料的供应速度和稳定性。
应用范围与实例
-
圆轨道卫星发射:对于发射圆轨道卫星的任务,大推力沉底技术能够有效提升火箭近地点点火和轨道注入的准确性,从而提高卫星进入预定轨道的成功率。
-
重型运载火箭研制:在重型运载火箭的研制中,大推力沉底技术的应用能够保障火箭在多阶段飞行过程中的稳定性和可靠性,尤其是在进行重大工程任务时。
技术挑战与对策
技术挑战:大推力沉底技术在实施过程中需要解决推力控制精度、推进剂管理装置的设计优化等问题。
对策建议:加强推进剂管理装置的研发,利用数字化、智能化技术提高推力控制的精确度,同时加强对推进剂流动特性的研究,优化推进剂管理系统的整体设计。
未来展望
技术趋势:随着航天技术的不断进步,大推力沉底技术将更加广泛应用于未来的航天发射任务中,尤其是对于深空探测和载人航天等领域。
发展方向:未来的研究将更加注重提升推进剂管理的效率和可靠性,探索更加经济、环保的推进剂管理方案,以适应日益复杂的航天任务需求。
总之,大推力沉底技术作为火箭发射领域的一项重要技术,其发展和应用对于提升火箭发射的成功率和可靠性具有重要意义。通过对该技术的深入研究和不断创新,可以为我国乃至全球的航天发射任务提供更加坚实的技术支持,推动人类探索宇宙的步伐不断向前。
运动学与动力学
运动学(Kinematics)
是从几何的角度(指不涉及物体本身的物理性质和加在物体上的力) 描述和研究物体位置随时间的变化规律的力学分支。以研究质点和刚体这两个简化模型的运动为基础,并进一步研究变形体(弹性体、流体等) 的运动。
点的运动学研究点的运动方程、轨迹、位移、速度、加速度等运动特征,这些都随所选参考系的不同而异。刚体运动按运动的特性又可分为平动、绕定轴转动、平面平行运动、绕定点转动和一般运动。
运动学为动力学、机械学提供理论基础,也是自然科学和工程技术必需的基础知识。运动学是理论力学的一个分支学科,它是运用几何学的方法来研究物体的运动。
简单的讲,运动学研究的是位移、速度和加速度(质点),角度、角速度和角加速度(刚体)之间的关系。
动力学(Dynamics)
是理论力学的一个分支学科,它主要研究作用于物体的力与物体运动的关系。动力学的研究对象是运动速度远小于光速的宏观物体。
质点动力学有两类基本问题:一是已知质点的运动,求作用于质点上的力。二是已知作用于质点上的力,求质点的运动。
求解第一类问题时只要对质点的运动方程取二阶导数,得到质点的加速度,代入牛顿第二定律,即可求得力;求解第二类问题时需要求解质点运动微分方程或求积分。所谓质点运动微分方程就是把运动第二定律写为包含质点的坐标对时间的导数的方程。
简单的讲,动力学研究的是力/力矩与运动的关系。两者通过“牛顿第二定理”(f=ma)联系起来。
原文链接:https://blog.csdn.net/weixin_41235419/article/details/113760075
火箭参数相关知识
1 坐标系右手定则:
伸开手掌,大拇指指向X轴,四指指向Y轴,四指弯曲90°后所指向的方向为Z轴。X 、Y、Z并没有约定产生的顺序,所以实际应用你也可能知道X 轴、Z轴来确定Y轴方向。
2 火箭转序:
使用的321转序,即箭体坐标系的Z->Y->X也就是俯仰、偏航、滚动转序
3 太阳同步轨道:
通俗点就是太阳光线和卫星轨道面的夹角始终为固定角度的轨道,运算上就是使卫星由于地球非圆形导致的卫星轨道面自转的角速度等于地球绕太阳公转的角速度,从而使得太阳光线和卫星轨道面的夹角始终保持一致。可见个人文档《太阳同步轨道学习笔记》。
4 火箭发射相关的坐标系:
3.1 发射系(发射坐标系):
O点为发射点,Y轴为发射点铅垂线(重力方向)的反方向为正Y,X轴为发射瞄准方向(是发射的目标方向所在面且与Y轴垂直的方向),Z轴与X Y遵循右手定则。其中,X轴与正北向的夹角叫做方位角(方位角是以发射时刻判定的未考虑地球自转的方位)。(由于地球不是正圆,所以Y轴的铅垂线方向并不指向地心)。
火箭垂直发射,发射系的X轴和箭体的X轴(箭体坐标系)相差90°,并不重合。
起飞前。
3.2 发惯系(发射惯性系):
以火箭发射点为原点,在起飞瞬间与发射坐标系各轴重合,起飞后,惯性坐标系的各轴方向在惯性空间保持不变。(注意:发惯系只有在起飞的时刻才建立,起飞之前的箭体姿态信息都是相对于发射系的,所以会看到射前针对发射系做的比如综测项目和飞控起飞前惯组陀螺输出数据要刨除地速,而起飞后由于惯组自身为惯性器件,不在地球上不存在地速(相对发惯系),姿态相对发惯系而言的,如果姿态角保持不变,理论上惯组输出角速度应该为0)。
起飞后。
3.3 惯组测量坐标系:
惯组自身输出的测量数据对应的坐标系,我们在惯组安装时,一般把惯组和箭体系方向保持一致(惯组测量坐标系和箭体坐标系位置保持一致,其也是非惯性坐标系,所以实际各轴输出是转换后的),这样就少一个坐标系的转换,但是惯组测量坐标系的原点是安装位置,而箭体系原点是质心。这样我们姿控控制时就以惯组测量坐标系来进行实际的控制(实际来说应该是箭体系)。
3.4 箭体系(箭体坐标系,又称本体坐标系):
我们飞控使用的象限轴、和姿态控制的俯仰、偏航、滚动控制都是针对箭体系的,姿控的控制也都是在箭体系下来控制的。(火箭说的象限实际上是象限轴,而不是数学学的一个90°区域)。
象限线:是指箭体系OYZ平面内,Y轴正向为III象限轴(-Y为I象限轴),Z轴正向为IV象限(-Z为II象限轴)。
箭体惯组安装位置为惯组测量坐标系的原点(诸元中高程说的是惯组安装位置的高度),X轴为火箭外壳对称轴,指向箭体的头部,Y轴是与X轴对称且在发射瞬间与发射系xoy平面内的轴(如果地面绝对水平),Z轴由右手坐标系确定。
(注意:书本定义箭体坐标系坐标原点是火箭的质心,我们火箭实际使用时并不是以质心为坐标原点,而是以惯组所在安装位置为坐标原点,质心在运动飞行过程中会伴随质量和各级分离逐渐变化,而质心的变化在发射前已经估算出来了并且在飞行过程中对数据进行了对应比例积分补偿,也就是说我们实际用的箭体坐标系和书本定义的箭体坐标系原点是有差异的)。
3.5 地固系(又称地球固联坐标系):
坐标系的原点Oe在地球质心,OeZe指向地球自转角速度矢量方向(即北极),垂直于赤道平面;OeXe在赤道平面内指向格林尼治子午线;OeYe轴和OeZe、OeXe轴构成右手坐标系。根据参考历元与椭球模型不同,应用不同标准给定的数据,如WGS84,CGCS2000等。我们的GNSS数据数据就是以地固系进行的数据输出。
3.6惯性坐标系:
判断伺服各方向分力?注意力是空间三个轴方向分力
5 加速度计原理-视加速度:
加速度计的敏感原理是外部作用力使得加速度计中的敏感器件产生形变对应输出数据,所以这里的重点是注意敏感的受外力。加速度计测得的数据并不包含重力加速度,比如空中自由落体的物体,加速度计输出为0,因为没有受到外力。而在桌面放着测试加速度计输出实际是外力(支持力)的作用值。
故加速度计输出的加速度值称为视加速度(所谓视加速度就是不包含重力加速度以外的加速度)。加速度计是用来测量视加速度的工具。
既然加速度计得到的是视加速度,所以火箭真正飞行的加速度就需要加速度计的视加速度加上所在位置的等效重力加速度得到实际的加速度值。
制导是针对质点运行的控制,关心的是速度和位置(加速度计),质心运动的控制是靠改变火箭俯仰、偏航、滚动姿态角实现的。
姿控针对的是姿态俯仰偏航滚动的控制,关心的是角速度(速率陀螺为姿态敏感型器件)。
姿控对姿态的控制为超前控制(但是是在矫正网络中实现,综测不涉及)。
制导的程序角、姿态角的参考坐标系是发惯系(起飞前没有建立发惯系也可能是发射系),具体而言:程序角表示的是发惯系下目标位置相对坐标原点的角度偏差量,姿态角表示的是发惯系下当前位置相对坐标原点的角度偏差量。
姿控控制使用的是箭体系下的姿态角偏差,具体而言,姿态角偏差表示的是在箭体系下当前位置和目标位置之间的角度偏差。
6 姿态角偏差:
火箭的姿态角随着飞行弹道的变化是实现设计好的,称作程序角。然而,飞行过程中的一些随机因素,比如风干扰、结构干扰等会使得姿态角偏离预定值,将实际的飞行姿态角与程序角(理论的姿态角)相减得到的值即称为姿态角偏差,但是这里的姿态角偏差还是发惯系下的姿态角偏差,而姿控控制是在箭体系下,所以需要转换到箭体系下得到箭体系下的姿态角偏差,这就是所谓的姿态偏差解耦。
7 脱插脱拔:
脱插插头和脱拔插头都是箭上使用地供电源供电时的连接插头,脱拔插头是安装在火箭尾部与地面发射控制系统连接的插头,该插头靠火箭起飞时拔动其芯杆而脱落,所以称为脱拔插头。
脱落插头是通过电控断开。
8 初始对准和光瞄(光学瞄准)的关系:
从功能上讲,初始对准和光学瞄准都是用来测量惯性测量坐标系(因为惯性测量坐标系和箭体坐标系一般认为是一致的,所以也可以认为是箭体坐标系)和发射系(就是选取参考系,也可能是地固系)的坐标系夹角转换关系,两者功能是一样的,使得惯性测量坐标系与发射坐标系重合。
从精度上讲,光瞄的精度更高,因为选用了更高精度的陀螺来标定,而初始对准使用的是火箭自身的惯组用来标定(初始对准不借助外部设备,使用惯组数据测量,光瞄:使用激光进行瞄准)。从流程上讲,软件总检查都会有初始对准的测量,而光瞄只是在真正火箭(真正起竖)发射前做一次。从型号上讲,Y1、Y2做初始对准数据但是实际并没有使用对应的结果,因为有光瞄,而Y3取消了光瞄,因此使用初始对准数据作为输入。
光瞄从工作流程上讲大致:报货标定4、粗瞄、精瞄三步。
9 姿控系统极性检查:
(姿控系统极性检查属于射前项目,发惯系未建立,所以姿控的控制是相对于发射系而言的,这就是为什么要刨除地球自转角速度分量的原因)
9.1 初始化四元数、姿态角、程序角
依据任务书要求配置初始四元数、姿态角、程序角(程序角初值为0,即不存在角偏差);(软件其实没必要四元数由姿态转换矩阵进行反推,直接给初值就行)
扩展:由四元数计算出的姿态转换矩阵是通用公式,是唯一的,而由欧拉角不同的转序(3次转动)算出的与姿态角的关系是不同的,不同的转序对应姿态角不同。比如321转序下某个俯仰角90°,而312转序俯仰角可能是0°。
9.2 地球自转角速度与陀螺实际有效输出分量计算
由于陀螺在箭体系下的输出是包含地球自转角速度的,因此先计算出陀螺在箭体系下的各轴地球自转角速度分量。地球自转角速度先分解到发射系下比较容易,所以先将地球自转角速度在发射系下的各轴分量进行分解。其分解到三个轴(X Y Z)的方向余弦矩阵如下:其中 代表射向(发射方位角), 代表发射点纬度。
由上述方向余弦矩阵乘以地球自转角速度得到发射系下地球各轴自转分量。
接下来,发射系下地球自转角速度分量乘以发射系到箭体系的姿态转换矩阵 ,即得到箭体系下的地球自转角速度分量。
9.3 进入周期性运算
下属1)-6)属于导航制导解算,7)-9)属于姿控控制
1、角度增量和视速度增量
周期性采集惯组(或陀螺数据),获得当前周期的陀螺输出的各轴角度增量和视速度增量(箭体系下)。
当前周期箭体系下火箭的角度增量按照下属公式获得,其中T1为控制周期。
2、计算角速度
由于角增量/周期并不是准确的代表本周期起始时刻的角速度,这里计算角速度公式用的是(3.0Cur-Lst)/(2.0T1),其中Cur为当前周期的角增量,Lst为上一周期的角增量,T1为控制周期。(这部分任务书也没有体现,属于没有出处),具体机理如下:认为角增量属于线性曲线,如下图。
当周期收到的惯组数据解算后得到的角增量实际是上一个5ms的增量,Cur/T得到速度均值(也就是上一个周期中间时刻的角速度),Lst/T得到速度均值(也就是上上一个周期中间时刻的角速度),由线性比例得到点3也就是当前运行周期起始点的速度值:
Cur/T +( (Cur/T- Lst/T)/T)(T/2) = (3.0Cur-Lst)/(2.0*T1)。
3、四元数
有角增量(在发射系下)得到对应的四元数。
4、姿态转换矩阵
由四元数得到对应的姿态转换矩阵
5、发射系下的姿态角
由姿态转换矩阵得到发射系的姿态角(当前姿态相对于发射系原点)
6、箭体系下的姿态角偏差
见前面关于姿态角偏差的说明,首先得到的是发射系系下姿态角和程序角的姿态角偏差。然后通过解耦矩阵得到姿控要使用的箭体系下的姿态角偏差(箭体系下前后的偏差量)
其中:
分别为制导给出的俯仰、偏航、滚动程序角;
为解耦后箭体坐标系下的姿态角偏差。
7、伺服控制:
分别为摆动喷管比例、微分增益系数;Dtest为进行转台滤波综测专门加的滤波系数。(实际的微分就是求导)。得到姿态控制摆角指令
sat为矢量限幅,得到安全的限幅输出。 为总摆角限幅值;
分配到伺服A B作动器上为:
8、俯仰偏航RCS控制:
分别为末修RCS比例、微分增益系数;
分别为俯仰、偏航通道RCS控制反馈;
RCS控制借助斯密特触发器进行解算具体结果,得到 分别为俯仰、偏航通道RCS控制指令。
译码算法key=( +1)*9+( +1)*3+( +1)*1,得到键值。然后由键值得到对应的译码表控制指令。
9、滚控控制:
一级滚控和RCS姿控喷管滚控使用的算法相同
为滚动通道RCS控制反馈, 分别为滚动控制比例、微分增益系数
滚控均借助斯密特触发器进行解算具体结果,得到 为滚动通道RCS控制指令, 分别为滚动控制开、关门限。
根据滚动RCS控制指令 ,查表给出滚控装置各个电磁阀的动作指令。
原文链接:https://blog.csdn.net/u011116085/article/details/130067393
轨道相关概念
GEO(Geosynchronous Eearth Orbit):地球静止轨道卫星
IGSO(Inclined Geosynchronous Satellite Orbit):倾斜轨道同步卫星
MEO(Medium Earth Orbit):中高轨卫星
LEO(Low Earth Orbit):低轨卫星
卫星轨道分类,常用轨道特点
根据运行高度:
低轨(高度小于1000公里)、
中高轨(高度介于1000-20000公里)、
高轨(高度大于20000公里);
根据运行轨迹偏心率:
圆轨(偏心率为0)、
近圆轨(偏心率小于0.1)、
椭圆轨(偏心率介于0.1-1);
根据倾角大小:
赤道轨道(倾角为0,轨道平面始终与赤道平面重合)、
极地轨道(倾角为90,轨道平面与赤道平面垂直,观察地球最好)、
倾斜轨道(顺行:倾角0-90,自西向东顺着地球自转、逆行:倾角90-180,自东向西逆着地球自转);
其他常用轨道:
地球同步轨道:周期与地球自转周期相同,运行方向与自转方向一致。
太阳同步轨道:运行方向与地球公转方向一致,角速度等于公转角速度。
回归轨道:星下点轨迹周期性出现重叠现象。
原文链接:https://blog.csdn.net/weixin_43192020/article/details/132476364
SAR卫星
合成孔径雷达卫星。它的成像机理与传统光学遥感不同:它们通过对目标物发射穿透性较强的电磁波,并快速接收回波信号。同时利用多普勒效应,通过对回波数据计算实现成像。
星间基线:
两卫星质心连线。
原文链接:https://blog.csdn.net/qq_38226273/article/details/119219476
辐照度:投射到单位面积上的辐射能量。
太阳常数:地球大气上界处太阳辐照度
岁差:地轴长期运动。
章动:地轴短周期运动
内编队飞行:一个小卫星被包裹在另一个大卫星的腔体内构成的编队飞行方式
航天器集群的边界:构成集群的所有卫星在空间运动范围的极限
J2摄动:由于地球不是规则的球形,因此造成了我们即便在只考虑地球和卫星两者之间的关系时也无法简单的将这个问题质点化,对于地球形状摄动只考虑J2项(二阶带谐系数)产生的影响。
速接收回波信号。同时利用多普勒效应,通过对回波数据计算实现成像。
星间基线:
两卫星质心连线。
原文链接:https://blog.csdn.net/qq_38226273/article/details/119219476