tag 标签: 原理

相关博文
  • 热度 8
    2023-9-28 16:53
    1169 次阅读|
    0 个评论
    谢谢兆易创新高工、芯片综合服务商映时科技。谢谢面包板论坛。 感谢 机械工业出版社。 感谢提供的这一次试读机会。 感谢 映时科技 董晓 任保宏 。 接上七篇: 《GD32 MCU原理及固件库开发指南》+试读心得(1) 《GD32 MCU原理及固件库开发指南》+试读心得(2)第八章 《GD32 MCU原理及固件库开发指南》+试读心得第一章(1) 《GD32 MCU原理及固件库开发指南》+试读心得第一章(2) 《GD32 MCU原理及固件库开发指南》+试读心得第二章(1) 《GD32 MCU原理及固件库开发指南》+试读心得第二章(2) 《GD32 MCU原理及固件库开发指南》+第三章试读心得 在阅读关于GD32的电源管理系统和时钟系统的详细介绍后,我对这些系统的原理和运作方式有了更加深入的理解。这些知识对于开发低功耗、高性能的系统非常重要,特别是在嵌入式系统和微控制器应用中。首先,从电源管理方面来看,GD32的3个电源域和3种省电模式的介绍让我明白了如何在不同工作模式下管理电源,以达到节能的目的。通过使用PMU(Power Management Unit)相关的API,可以更加灵活地控制电源,并在深度睡眠模式、待机模式和低压检测器等功能之间进行切换。这为系统设计师提供了一种有效的工具,可以根据系统需求来平衡功耗和性能。另一方面,GD32的时钟系统是一个复杂而又精密的系统。通过了解GD32的3种复位控制方式和时钟源、PLL(Phase-Locked Loop)及外设时钟配置的方法,我认识到时钟系统对于整个系统的稳定运行和各个模块的正常工作至关重要。这就好比是在一个城市中,时钟塔不仅指示着时间,还协调着各个社区的活动,确保城市的和谐运转。 在阅读过程中,我也学习了一些与RCU(Reset and Clock Control Unit)相关的API的使用方法。这些API在初始化系统时钟和控制时钟输出方面发挥了重要作用。通过这些API,开发人员可以更方便地调整和控制系统的时钟频率和时序,以满足各种应用的需求。此外,我也了解到,虽然时钟系统的复杂性可能会让人望而却步,但只要掌握了基本的原理和方法,再结合规格说明书中的模块框图和时钟树图,就可以更好地理解和掌握它。这就好比是在游览一座复杂的城市,只要掌握了城市的地图和交通系统,就能轻松地找到目的地。 总的来说,通过阅读我对这些系统的理解更加深入,也更加清楚它们在嵌入式系统和微控制器应用中的重要性。我相信这不仅提供了我急需的知识,也启发了我对于嵌入式系统设计和微控制器应用的更深层次的理解和思考。 谢谢!
  • 热度 7
    2023-9-28 15:20
    1057 次阅读|
    0 个评论
    谢谢兆易创新高工、芯片综合服务商映时科技。谢谢面包板论坛。 感谢 机械工业出版社。 感谢提供的这一次试读机会。 感谢 映时科技 董晓 任保宏 。 接上六篇: 《GD32 MCU原理及固件库开发指南》+试读心得(1) 《GD32 MCU原理及固件库开发指南》+试读心得(2)第八章 《GD32 MCU原理及固件库开发指南》+试读心得第一章(1) 《GD32 MCU原理及固件库开发指南》+试读心得第一章(2) 《GD32 MCU原理及固件库开发指南》+试读心得第二章(1) 《GD32 MCU原理及固件库开发指南》+试读心得第二章(2) 在嵌入式系统的学习中,理解MCU(微控制器)的系统架构是非常重要的。最近,我深入学习了GD32 MCU系统架构 收获颇丰。现在,我想分享一下我对GD32 MCU的理解和心得,希望对大家有所帮助。 GD32 MCU是一种常见的嵌入式系统组件,由于其高性价比和强大的性能,被广泛应用于各种领域。在了解GD32 MCU的系统架构前,我们首先需要理解它的框架结构。GD32 MCU的框架结构清楚明了,包括M内核、NVIC(中断向量控制器)以及存储器架构。 GD32 MCU采用了四种M内核(M4、M33、M23和M3),每种内核都有其独特的特性。特别是M4内核,其结构紧凑,运行速度快,可编程性强,被广泛应用于各种应用中。通过深入学习这四种M内核的特性和M4内核结构,我对MCU内部的处理能力和运行机制有了更深入的理解。 在GD32 MCU中,NVIC和中断系统是实现实时响应的重要部分。NVIC负责处理外部设备的信号输入,而中断系统则负责在有紧急事件发生时立即停止当前任务进行处理。中断响应序列和中断相关配置操作的学习让我对MCU的实时处理机制有了更深的认识。 最后,我对GD32 MCU的存储器架构和Flash相关操作进行了详细研究。存储器架构包括Flash、RAM和其他内部存储器。其中,主Flash可以进行擦除、写入和读取操作。同时,选项字节操作可以用来设置Flash的特定参数,进一步增强了Flash的灵活性。 通过对GD32 MCU系统架构的学习,我不仅从理论上了解了MCU的基本构成和工作原理,更重要的是,我能够将这些理论知识应用到实践中。我明白了如何根据实际需求选择合适的MCU型号以及如何配置MCU以满足特定的性能要求。此外,我也学会了如何针对特定的应用场景优化MCU的编程代码,从而提高系统的效率和稳定性。 总的来说,通过学习GD32 MCU系统架构,我深入理解了嵌入式系统的核心组件和其工作机制。我相信,这种深入的理解将对我未来的学习和职业发展产生积极的影响。我希望通过分享我的学习心得,能够激发其他读者对嵌入式系统的热情和好奇心,从而一起探索这个美妙的世界。 谢谢!
  • 热度 2
    2023-9-26 23:56
    1467 次阅读|
    0 个评论
    本章旨在为GD32MCU初学者提供全面的入门开发指导。在本文中,我们将介绍GD32MCU开发所需的基本资料和获取途径,同时详细阐述在软件平台开发和硬件系统设计方面的基本步骤和注意事项。此外,还将介绍烧录调试工具的使用方法和固件库架构及使用方法。通过对这些内容的学习,读者将对GD32MCU的开发过程有全面的了解,并为后续深入学习和应用打下基础。 一、GD32MCU开发资料及其获取途径 要进行GD32MCU的开发,首先需要获取相应的开发资料。这些资料包括芯片的datasheet、SDK、API库、参考设计等。下面是一些主要的获取途径: 1. GD32官方网站:这是最直接获取GD32MCU开发资料的地方。在官方网站上,可以找到最新的芯片产品信息、技术文档、SDK、API库和参考设计等资料。 2. GD32官方论坛:在这里,可以与其他GD32MCU开发者交流心得和经验,同时也可以获取到一些有用的开发资料。 3. 第三方网站和论坛:例如面包板社区等网站和论坛上,也可以找到一些GD32MCU的开发资料。 4. 开源项目和代码:在一些开源项目和代码中,可以找到关于GD32MCU的开发经验和示例代码,这对初学者非常有帮助。 二、软件平台开发 在软件平台开发方面,主要介绍使用Keil MDK和IAR IDE开发环境进行GD32MCU的开发。 1. 新建工程:首先在开发环境中创建一个新的工程,并选择正确的芯片型号和开发板。 2. 导入已有工程:如果已经有现成的代码工程,可以将其导入到开发环境中。 3. 调试工程:在完成代码编写后,可以使用开发环境中的调试工具进行调试,检查程序运行是否正确。 三、硬件系统设计 在硬件系统设计方面,这里主要介绍GD32MCU最小系统的推荐设计。最小系统包括芯片、时钟电路、复位电路、调试电路和电源电路等基本部分。在设计时,可以参考GD32MCU的参考设计,并结合实际需求进行修改和优化。完成硬件设计后,需要进行PCB制作和电路仿真,确保电路功能的正确性。GD32MCU的硬件系统设计需要考虑最小系统的设计和外围电路的搭建。下面我们推荐一种最小系统的设计,并说明电路设计、接线、PCB制作及电路仿真等基本步骤。 1. 最小系统设计 GD32MCU的最小系统包括芯片、时钟电路、复位电路、调试接口和电源电路等基本部分。以下是具体设计方案: (1)选用适当的GD32MCU芯片型号; (2)设计时钟电路,为芯片提供时钟信号; (3)设计复位电路,确保系统在上电时能够正确初始化; (4)选择合适的调试接口,如JTAG或SWD模式; (5)设计电源电路,为芯片提供稳定的工作电压。 2. 电路设计 根据功能需求,将GD32MCU与外围器件进行合理连接。可以使用原理图或PCB进行电路设计。在设计过程中,需要考虑信号的完整性、电源的质量和稳定性等因素。 3. 接线 根据电路设计,将芯片、电阻、电容等电子元器件进行合理连接。在接线过程中,需要注意信号线的走线和布局,以减小电磁干扰和提高系统稳定性。 4. PCB制作及电路仿真 根据接线图制作PCB板,并进行电路仿真测试,以确保设计的正确性和可靠性。可以使用相应的仿真软件进行电路仿真。在仿真过程中,可以对电路的性能、噪声和稳定性等方面进行评估,并对不合理的部分进行调整和优化。 四、烧录调试工具 在进行GD32MCU的开发过程中,需要使用烧录调试工具对芯片进行烧录和调试。这里主要介绍使用GD-Link和JLink烧录调试方法。 1. 接口电路:GD-Link和JLink都需要通过USB接口与电脑连接,同时需要通过串口与芯片通信。因此需要正确连接电脑、烧录调试工具和芯片的USB和串口。 2. 在线调试:通过烧录调试工具可以在线调试程序,检查程序运行过程中变量、寄存器的值是否正确,同时也可以单步执行代码。 3. 在线烧录:通过烧录调试工具可以将程序烧录到芯片中,从而实现对芯片功能的修改和升级。 4. 离线烧录:离线烧录通常使用专门的烧录软件,通过下载已经编译好的二进制文件到芯片中来实现程序的烧录。在这里我们主要介绍使用GD-Link进行离线烧录的方法。首先将编译好的二进制文件通过USB接口拷贝到电脑中,然后使用GD-Link的工程模式将文件烧录到芯片中。 五、固件库架构及使用方法 GD32MCU的固件库包含了多个文件夹和文件,每个文件夹和文件都有其特定的功能和使用方法。 随着MCU(微控制器)集成度的不断提升,片内外设资源和功能也越来越丰富。若采用传统的直接操作寄存器的方法进行开发,则可能会带来开发进度慢、代码可读性差的问题。因此,MCU厂商一般都会推出寄存器操作封装库(即固件库),以方便用户使用及开发。固件库是一个固件函数包,它由程序、数据结构和宏组成,包括了所选MCU所有外设的性能特征。固件库中还有对每一个外设的驱动描述和基于评估板的固件库使用例程。通过使用固件库,用户无需深入掌握细节,也可以轻松应用每一个外设。使用固件库可以大大减少用户的编程时间,从而降低开发成本。每个外设驱动都由一组函数组成,这组函数覆盖了该外设所有功能。可以通过调用一组通用API来实现对外设的驱动,这些API的结构、函数名称和参数名称都进行了标准化处理。 在此以GD32F30×系列固件库为例说明固件库的架构及使用方法。该系列MCU的固件库分为两个层级:抽象层和底层。 抽象层提供了较为简单的API,使得用户可以忽略底层硬件细节,直接进行开发。它分为几个子模块,包括初始化、数据传输控制、中断管理等。数据传输控制模块提供了各种UART、SPI、I2C等外设的初始化函数,用于数据通信。中断管理模块则提供了各种中断的使能、禁用和标志位清除等功能。 底层更加接近硬件,为用户提供了更深入的控制。它包括硬件抽象层(HAL)、底层驱动和中间层。HAL为底层驱动提供了更为简单的接口,使得用户可以更容易地操作硬件。底层驱动则是针对具体硬件实现的代码,例如GPIO驱动、ADC驱动等。中间层则提供了底层驱动和抽象层之间的接口,使得底层驱动可以更容易地被抽象层调用。 为了使用GD32MCU固件库进行开发,需要搭建开发平台。首先,需要选择一款开发板,例如GD32F30×系列的评估板。然后,需要安装开发工具链(例如Keil或IAR),并将GD32MCU固件库添加到工程中。接着,编写代码并调用固件库中的函数进行外设控制和数据传输等操作。最后,将代码编译并烧录到MCU中,进行调试和测试。 在本文中,我们将以GD32F30×系列固件库为例,详细介绍GD32MCU固件库的架构及使用方法。 一、GD32MCU固件库架构 GD32F30×系列固件库由程序、数据结构和宏组成,每个外设驱动都由一组函数组成,这组函数覆盖了该外设所有功能。可以通过调用一组通用API来实现对外设的驱动,这些API的结构、函数名称和参数名称都进行了标准化处理。 GD32F30×系列固件库具有以下特点: 1. 外设资源丰富:GD32F30×系列MCU具有丰富的外设资源,包括多种通信接口、多种定时器、多种PWM通道、多种ADC/DAC通道等。 2. 寄存器映射控制准确:GD32F30×系列MCU的寄存器映射关系简单明了,便于操作和控制。 3. 兼容性好:GD32F30×系列固件库兼容性好,可适用于GD32系列下的所有型号的MCU。 4. 安全性高:GD32F30×系列固件库的安全性高,采用硬件加密技术,有效防止程序被破解或篡改。 GD32MCU固件库的架构和使用方法类似其他系列MCU的固件库。通过使用固件库,用户可以简化开发流程、提高开发效率并降低开发成本。在搭建开发平台后,根据具体应用需求选择合适的固件库并调用相关API函数进行开发即可实现特定功能。 谢谢!
  • 热度 6
    2023-7-2 18:20
    357 次阅读|
    0 个评论
    电机驱动原理 电机(俗称“马达”)是指依据电磁感应定律实现电能转换或传递的一种电磁装置。它的主要作用是产生驱动转矩,作为用电器或各种机械的动力源。 在磁场中放置线圈,通过流动的电流,线圈会被一侧的磁极排斥,同时被另一侧磁极所吸引,在这种作用下不断旋转。在旋转过程中令通向线圈中的电流反向流动,使其持续旋转。这就是最基本的 电机 工作原理。 无刷直流电机(BL DC ) BL DC电机 中的“BL”即“Brushless”,译为无刷。即DC电机中的“电刷”没有了。电刷在DC电机里扮演的角色是通过换向器向转子里的线圈通电。那么没有电刷的BLDC电机是如何向转子里的线圈通电的呢? BLDC电机采用永磁体来做转子,转子里是没有线圈的。由于转子里没有线圈,所以不需要用于通电的换向器和电刷。取而代之的是作为定子的线圈。BLDC电机通过控制通向线圈的电流方向和大小来控制转子的旋转。 BLDC电机的优势和应用 BLDC电机的第一个优点是“高效率”。它可以将回旋力(扭矩)始终保持最大值。DC电机在旋转过程中最大扭矩只能保持一个瞬间,无法始终保持最大值。若DC电机想要得到和BLDC电机一样大的扭矩,只能加大它的磁铁。这就是为什么小型BLDC电机也能发出强大力量的原因。 第二个特点是“良好的控制性”,与第一个有所关联。BLDC电机可以精确地反馈目标旋转数、扭矩等。通过精确的控制可以抑制电机的发热和电力的消耗。若是电池驱动,则能通过周密的控制,延长驱动时间。 上述两点则是无电刷和换向器所带来的优势。除此之外BDLC还有耐用,电气噪音小等特点。若不希望使用过程中产生噪音,采用BLDC电机即可实现。 据Grand View Research统计,2025年BLDC市场规模可达223亿美元。随着技术趋于成熟,BLDC电机已经在军事、航空、工业、汽车、民用控制系统,以及家电等领域都有了广泛的应用。多见低压小功率器件,比如 小型机 器人、 无人机 、电动自行车、吸尘器、电动工具等。 矽力杰 BLDC 电机驱动 方案 矽力杰作为全球领先的高性能模拟芯片厂商,在汽车电子,工业控制,通信计算及消费电子等各个领域均有领先的技术和众多的芯片解决方案。SY67343为矽力杰推出的新一代三相无感正弦电机驱动芯片,采用内置MOS,运行最大驱动电流2A,支持多种电机类型,如永磁同步电机,无刷直流电机等。此外SY67343还支持多种保护功能,如过流保护,欠压保护和过温保护等,全面保障电机和芯片在使用过程的安全性。 SY67343 三相直流无刷电机驱动芯片 ◆ 电源电压范围:5~40V ◆ 内部集成三个半桥电机驱动 ◆ 低功率管导通 电阻 : HS+LS<250mΩ ◆ 最大驱动电流2A , 峰值电流3A ◆ 无 传感器 控制 ◆ 高效正弦波驱动 ◆ 集成5V/3.3V降压稳压器 ◆ I2C 接口 配置存储器 ◆ 转速控制:PWM /模拟/ IIC ◆ 支持正反向控制 ◆ 睡眠模式 ◆ 过流/欠压/过温保护 ◆ TSSOP24E封装 买电子元器件现货上唯样商城
  • 热度 7
    2023-6-13 14:29
    568 次阅读|
    0 个评论
    电机驱动原理 电机(俗称“马达”)是指依据电磁感应定律实现电能转换或传递的一种电磁装置。它的主要作用是产生驱动转矩,作为用电器或各种机械的动力源。 在磁场中放置线圈,通过流动的电流,线圈会被一侧的磁极排斥,同时被另一侧磁极所吸引,在这种作用下不断旋转。在旋转过程中令通向线圈中的电流反向流动,使其持续旋转。这就是最基本的 电机 工作原理。 无刷直流电机(BL DC ) BL DC电机 中的“BL”即“Brushless”,译为无刷。即DC电机中的“电刷”没有了。电刷在DC电机里扮演的角色是通过换向器向转子里的线圈通电。那么没有电刷的BLDC电机是如何向转子里的线圈通电的呢? BLDC电机采用永磁体来做转子,转子里是没有线圈的。由于转子里没有线圈,所以不需要用于通电的换向器和电刷。取而代之的是作为定子的线圈。BLDC电机通过控制通向线圈的电流方向和大小来控制转子的旋转。 BLDC电机的优势和应用 BLDC电机的第一个优点是“高效率”。它可以将回旋力(扭矩)始终保持最大值。DC电机在旋转过程中最大扭矩只能保持一个瞬间,无法始终保持最大值。若DC电机想要得到和BLDC电机一样大的扭矩,只能加大它的磁铁。这就是为什么小型BLDC电机也能发出强大力量的原因。 第二个特点是“良好的控制性”,与第一个有所关联。BLDC电机可以精确地反馈目标旋转数、扭矩等。通过精确的控制可以抑制电机的发热和电力的消耗。若是电池驱动,则能通过周密的控制,延长驱动时间。 上述两点则是无电刷和换向器所带来的优势。除此之外BDLC还有耐用,电气噪音小等特点。若不希望使用过程中产生噪音,采用BLDC电机即可实现。 据Grand View Research统计,2025年BLDC市场规模可达223亿美元。随着技术趋于成熟,BLDC电机已经在军事、航空、工业、汽车、民用控制系统,以及家电等领域都有了广泛的应用。多见低压小功率器件,比如 小型机 器人、 无人机 、电动自行车、吸尘器、电动工具等。 矽力杰 BLDC 电机驱动 方案 矽力杰作为全球领先的高性能模拟芯片厂商,在汽车电子,工业控制,通信计算及消费电子等各个领域均有领先的技术和众多的芯片解决方案。SY67343为矽力杰推出的新一代三相无感正弦电机驱动芯片,采用内置MOS,运行最大驱动电流2A,支持多种电机类型,如永磁同步电机,无刷直流电机等。买电子元器件现货上唯样商城。此外SY67343还支持多种保护功能,如过流保护,欠压保护和过温保护等,全面保障电机和芯片在使用过程的安全性。 SY67343 三相直流无刷电机驱动芯片 ◆ 电源电压范围:5~40V ◆ 内部集成三个半桥电机驱动 ◆ 低功率管导通 电阻 : HS+LS<250mΩ ◆ 最大驱动电流2A , 峰值电流3A ◆ 无 传感器 控制 ◆ 高效正弦波驱动 ◆ 集成5V/3.3V降压稳压器 ◆ I2C 接口 配置存储器 ◆ 转速控制:PWM /模拟/ IIC ◆ 支持正反向控制 ◆ 睡眠模式 ◆ 过流/欠压/过温保护 ◆ TSSOP24E封装
相关资源
  • 所需E币: 5
    时间: 2024-11-2 18:27
    大小: 6.57MB
    上传者: 明星
    采用以彩色立体图(轴测图)为主、以及套色的原理图或示意图,结构图相结合的力式、来表达液压装置中各主要元件。
  • 所需E币: 5
    时间: 2024-11-6 18:36
    大小: 20.48MB
    上传者: 明星
    《彩色电视接收机原理》(修订本)
  • 所需E币: 0
    时间: 2024-10-21 11:13
    大小: 3.7KB
    上传者: huangyasir1990
    一、Llama3大模型是什么?Llama是由Meta的人工智能研究团队开发并开源的大型语言模型(LLM),继Llama2+模型之后,Meta进一步推出了性能更卓越的MetaLlama3系列语言模型,包括一个80亿参数模型和一个700亿参数模型。Llama370B的性能美Gemini1.5Pro,全面超越Claude大杯,而400B+的模型则有望与Claude超大杯和新版GPT-4Turbo掰手腕二、llama2和llama3有什么区别?llama3与llama2的模型架构完全相同,只是model的一些配置(主要是维度)有些不同,llama2推理的工程基本可以无缝支持llama3。在meta官方的代码库,模型计算部分的代码是一模一样的,也就是主干decoderonly,用到了RoPE、SwiGLU、GQA等具体技术。通过对比huggingface模型中的config.json,首先可以看出,模型都是LlamaForCausalLM这个类,模型结构不变。三、Llama3的目标和最佳表现Llama3拥抱开源社区。通过不断响应用户反馈来提升模型效果,并且持续在负责任的AI领域扮演重要角色。近期发布的基于文本的模型是Llama3集合的一部分。未来的目标是使Llama3成为多语言、多模态、长上下文、持续提升核心能力,如:推理和代码生成。得益于pretraining和post-training的改进,我们的pretrained模型和instruction-fine-tuned模型是8B和70B最好的大模型。post-training的改进包括:降低误拒率、改进的对齐方法、模型回答的多样性。同时,我们也看到Llama3综合能力的提升,如:推理、代码生成、指令遵循。这使得Llama3更加可控。四、从头构建LLaMA3大模型(Python)首先是模型架构的选择。原工作用的是GPTNeo架构(可以看他们的config),这个算是很老的模型了,最初是EleutherAI用来复现追踪GPT-3的工作的,现在用的也比较少了。我打算选用LLaMA架构,也算是符合研究主流、便于推广。LLaMA3主要多了个GQA,也是现在模型的主流,我这里也用一下。其次是数据的选择。既然是复现,就直接贯彻拿来主义,用原工作开源的数据集(主要是从头生成要花不少api费用)。原工作第一版的时候用的是GPT-3.5生成的数据,后面社区有人更新了第二版,是用GPT-4生成的,比原数据更好,就用它了。最后是训练。其实我手上就两张306012G和4060Ti16G,训这个确实是绰绰有余,但我还是不想在桌前吵我自己,于是继续用Colab。现在Colab可以直接看到剩余使用时长了,虽然已经被砍到只有3h左右的用卡时间,但至少心里有个底,况且3h训我们这个也完全够了。五、用户与LlaMA3进行交互的方式主要分为6个阶段。阶段1:通过按原样使用模型,以适应广泛的应用场景。第2阶段:在用户自定义的应用程序中使用模型。第3阶段:使用提示工程来训练模型,以产生所需的输出。第4阶段:在用户端使用提示工程,同时深入研究数据检索和微调,这仍然主要由LLM提供商管理。第5阶段:把大部分事情掌握在自己(用户)手中,从提示工程到数据检索和微调(RAG模型、PEFT模型等)等诸多任务。第6阶段:从头开始创建整个基础模型——从训练前到训练后。为了最大限度地利用这些模型,建议最好的方法是使用上面的第5阶段,因为灵活性很大程度上取决于用户自身。能够根据领域需求定制模型对于最大限度地提高其收益至关重要。因此,如果不参与到系统开发中,是不能产生最佳回报的。
  • 所需E币: 0
    时间: 2024-10-14 12:52
    大小: 2.94KB
    上传者: huangyasir1990
    一、Vulkan简介Vulkan是一个低开销、跨平台的二维、三维图形与计算的应用程序接口(API),最早由科纳斯组织在2015年游戏开发者大会(GDC)上发表。与OpenGL类似,Vulkan针对全平台即时3D图形程序(如电子游戏和交互媒体)而设计,并提供高性能与更均衡的CPU与GPU占用,这也是Direct3D12和AMD的Mantle的目标。与Direct3D(12版之前)和OpenGL的其他主要区别是,Vulkan是一个底层API,而且能执行并行任务。除此之外,Vulkan还能更好地分配多个CPU核心的使用。相比于传统的OpenGL,VulkanAPI的设计更加贴近硬件。传统API比如OpenGL内部维护一个单一全局的状态机,这就意味着需要通过一个主线程来处理所有的绘图命令,即便驱动内部能够保证渲染足够高校,但是由于外部提交指令的方式是单线程的容易导致多核CPU的利用率不高。而Vulkan从设计上就考虑了多线程编程,允许开发者在多个线程中并行执行绘图命令和资源管理操作。这样可以大幅提升渲染性能,并使应用程序更具响应性。二、Vulkan在图形渲染中的优势1、低开销和高性能:Vulkan通过减少驱动程序的开销和提供更直接的硬件访问,显著提升了图形渲染的效率。这使得Vulkan在处理复杂场景和高分辨率图像时表现尤为出色。2、多线程支持:Vulkan的设计允许开发者充分利用多核处理器的优势,通过并行处理来提升渲染性能。这对于现代多核CPU来说是一个巨大的优势,可以显著提高帧率和降低延迟。3、跨平台兼容性:Vulkan支持多种操作系统和硬件平台,包括Windows、Linux、Android等。这使得开发者可以编写一次代码,然后在多个平台上运行,极大地提高了开发效率。4、灵活的内存管理:Vulkan提供了更灵活的内存管理机制,允许开发者更精细地控制内存分配和使用。这对于需要高效利用内存资源的应用来说是一个重要的优势。三、Vulkan及其演化史目前主流的图形渲染API有OpenGL、OpenGLES、DirectX、Metal等OpenGL的应用领域较为广泛,支持多种操作系统平台(如Windows、UNIX、Linux、macOS等)基于其开发的应用可以方便、低成本地在不同操作系统平台之间移植。既可以用于开发游戏,又可以用于开发工业、行业应用OpenGL-ES则是OpenGL针对移动端的裁剪版本。Direct-X是微软针对Win系统下图形渲染的技术,Metal则是针对Mac/iOS系统下图形渲染技术,从占有率而言DirectX是远远超过Metal的。那么OpenGL在和Vulkan相比,Vulkan能够更好的调动GPU的性能,OpenGL在使用GPU前需要CPU处理很多数据,而Vulkan能够提供更小的运行开销、更直接的GPU控制、和更低的CPU负载。Vulkan的原始概念是由AMD基于他们的私有的MantleAPI设计和实现的,这个API几款不同的API中体现了自己的先进特性四、Vulkan将设备队列按照队列组的方式进行组织,规则如下一个队列组可以支持一个或者多个功能一个队列组中包含一个或者多个队列同一个队列组中的所有队列支持相同的功能队列族之间可以有相同的功能,但两两队列之间不能有两个功能集获取QueueFamily和QueueFamilyPropertytypedefstructVkQueueFamilyProperties{  VkQueueFlags  queueFlags;  uint32_t    queueCount;  uint32_t    timestampValidBits;  VkExtent3D   minImageTransferGranularity;}VkQueueFamilyPropertie五、显式的GPU控制在OpenGL驱动中,驱动会帮你做API验证,内存管理,线程管理等大部分工作。OpenGL驱动大包大揽什么事情都管,即使应用使用API出错,也会帮忙解决处理,保证应用正常运行。开发者使用起来非常简单。但是OpenGL为了这些事情,牺牲了大量的性能。在一些复杂的应用场景,依然会遇到无法解决的问题,很多时候经常是驱动的一厢情愿,应用并不为此买单。Vulkan则不然。Vulkan把API验证、内存管理、多线程管理等工作交由开发者负责。一旦API使用出错,应用就会出现crash。没人帮应用兜底,所有事情都交由应用打理。这种方式无疑增加了API使用的复杂度和困难度,但换来的是性能上巨大的提升。单单是在驱动中去掉API验证操作,就把性能提升了9倍。六、图形API的选择建议Vulkan被设计用于在现代多核CPU和GPU上实现更好的并行处理,同时还有更少的CPU开销和更好的可扩展性。此外,Vulkan还提供了更好的调试工具和更好的错误处理机制,这使得它更容易开发和调试。OpenGL仍然是一个非常流行的图形API接口,它已经存在了很长时间并且被广泛使用。它是一个跨平台的API,可以在多种操作系统和硬件上运行。OpenGL的主要优势是它的广泛支持和成熟的生态系统,同时也有很多开发者和工具支持。然而,OpenGL的主要缺点是它的性能受到限制,因为它是一个高级API,对硬件的控制较少,而且它的执行方式也不是非常高效。总之,Vulkan和OpenGL都有各自的优缺点,它们在不同的场景下都有自己的用武之地。
  • 所需E币: 5
    时间: 2024-7-17 21:11
    大小: 4.64MB
    上传者: anhuali678
    由浅入深的介绍了LDO的原理····
  • 所需E币: 1
    时间: 2024-7-11 21:06
    大小: 13.36MB
    上传者: milktea88
    第1章数据获取第2章传递函数第3章传感器特性第4章感知的物理原理第5章传感器的光学元件第6章接口电路第7章人体探测器第8章位置、位移和水平第9章速度和加速度传感器第10章力和应变传感器第11章压力传感器第12章流量传感器第13章声学传感器第14章湿度传感器第15章光探测器第16章电离辐射探测器第17章温度传感器第18章化学和生物传感器第19章传感器材料与技术
  • 所需E币: 1
    时间: 2024-4-23 19:49
    大小: 1.06MB
    上传者: 张红川
    产生负电压电路图原理和电路分析.docx
  • 所需E币: 1
    时间: 2024-4-23 19:54
    大小: 238.84KB
    上传者: 张红川
    分压电路的特点及原理、关键点.docx
  • 所需E币: 1
    时间: 2024-4-23 20:01
    大小: 299.56KB
    上传者: 张红川
    图说运放:不谈原理,只谈应用(收藏).docx
  • 所需E币: 1
    时间: 2024-4-25 17:08
    大小: 486.2KB
    上传者: 张红川
    功率电感DCR检流的原理.docx
  • 所需E币: 1
    时间: 2024-4-23 20:04
    大小: 72.28KB
    上传者: 张红川
    这篇文章把DC-DC和LDO的原理和区别,讲透了!.docx
  • 所需E币: 2
    时间: 2024-3-17 22:25
    大小: 471.02KB
    上传者: 电子阔少
    AC-DC、DC-DC转换器原理
  • 所需E币: 0
    时间: 2024-3-1 10:24
    大小: 3.2KB
    上传者: 开心就很好了
    深入学习小程序框架底层原理,培养双线程思维——前端高手特训从0到1带你手写一个微信小程序底层框架!无论你是一位新手,还是一位有经验的开发者,能够自研一套小程序底层框架,都是你突破技术瓶颈有效途径。我将通过本篇文章带领大家从架构设计,原理剖析,再到源码的实现,一步步地实战构建一个完整的微信小程序底层框架,让大家深度掌握小程序双线程原理,助力大家具备把握最佳机会的能力和提升获取心仪Offer的成功率,成为一个真正有实力的技术人才!! 一、首先,我们先来认识小程序,那么什么是小程序呢?小程序是一种不需要下载安装即可使用的应用,它基于某个平台(如微信)运行,用户可以通过扫描二维码或搜索关键词来打开小程序。小程序的特点包括体积小、启动速度快、使用便捷,以及能够实现“用完即走”的理念,减少了用户安装应用的数量。小程序的开发通常采用前端技术,如HTML5、CSS3和JavaScript,并通过封装和提供丰富的API接口,实现与微信生态系统的高度整合。小程序可以提供各种服务,如游戏、购物、地图、社交和学习等,同时帮助商家展示产品、推广服务以及实现线上支付等功能。二、设计思路-渲染层小程序使用的是Exparser组件模型,Exparser组件模型与WebComponents中的shadowDOM高度相似,微信为什么使用自定义组件框架,而不使用WebComponents呢?主要还是出于安全考虑,并且方便管控。既然Exparser组件框架与shadowDOM高度相似,那么我们首先来了解一下shadowDOM。shadowDOM:WebComponents的一个重要属性是封装-可以将标记结构、样式和行为隐藏起来,并与页面上的其他代码相隔离,保证不同的部分不会混在一起,可使代码更加干净、整洁。其中,shadowDOM接口是关键所在,它可以将一个隐藏的,独立的DOM附加到一个元素上。三、Exparser组件模型Exparser组件模型参考了shadowDOM并进行了一些修改,像事件系统就是完全复刻的,slot插槽,属性传递等都基本一致。但同时它又具有一些特点:基于shadowDOM模型:模型上与WebComponents的shadowDOM高度相似,但不依赖浏览器的原生支持,也没有其他依赖库;实现时,还针对性地增加了其他API以支持小程序组件编程;可在纯JS环境中运行:这意味着逻辑层也具有一定的组件树组织能力;高效轻量:性能表现好,在组件实例极多的环境下表现尤其优异,同时代码尺寸也较小;四、逻辑层与视图层通信在小程序中,逻辑层只有一个,但是渲染层有多个,渲染层和逻辑层之间是通过微信客户端进行桥接通信的。那具体是怎么实现的呢?其实它使用的就是WeixinJSBridge通信机制。在小程序执行的过程中,微信客户端分别向渲染层和逻辑层注入WeixinJSBridge,WeixinJSBridge主要提供了以下几个方法:invoke:调用nativeAPI;invokeCallbackHandler:Native传递invoke方法回调结果;publish:渲染层用来向逻辑业务层发送消息,也就是说要调用逻辑层的事件方法;subscribe:订阅逻辑层消息;subscribeHandler:视图层和逻辑层消息订阅转发;setCustomPublishHandler:自定义消息转发;五、微信小程序主流框架有哪些?微信小程序是一种特殊的应用程序,它使用微信平台提供的JavaScript框架来构建。目前,微信小程序主要有以下三个主流框架:1、原生框架(VanillaFramework):原生框架是微信小程序的最基础、最原始的框架,它使用原生的JavaScript、WXML和WXSS来开发小程序。2、MiniprogramFramework(小程序框架):小程序框架是由微信团队提供的官方框架,用于简化小程序的开发过程。它提供了更高层次的抽象和封装,使得开发者可以更快速地构建小程序。3、mpvue:mpvue是一个基于Vue.js的小程序开发框架。它允许开发者使用Vue.js的语法和特性来开发小程序,从而降低了学习成本和提高了开发效率。六、小程序的底层实现原理主要涉及以下几个方面:框架架构:小程序框架通常采用前端框架,如微信小程序使用的是基于JavaScript的框架。这些框架提供了一套开发和运行环境,包括对视图层、逻辑层和数据层的管理和处理。渲染机制:小程序通过渲染引擎将开发者编写的代码转化为可视化界面。渲染引擎负责解析和处理小程序的标记语言,如HTML、XML等,并将其转换为浏览器可以显示的界面。数据通信:小程序需要与服务器进行数据通信,包括获取数据、上传数据等。通常使用HTTP协议进行网络请求,通过发送和接收数据来实现与服务器的交互。安全机制:为了保障用户数据的安全和隐私,小程序实现了一系列安全机制。例如,小程序在沙箱环境中运行,限制了对系统资源的访问权限;小程序代码签名和校验机制确保代码的完整性和安全性;同时,小程序还采用了数据加密、身份验证等措施来保护用户数据的传输和存储安全。跨平台适配:小程序需要在不同的操作系统和设备上运行,因此需要进行跨平台适配。框架会处理不同平台的差异,以确保小程序在不同设备上有一致的运行效果和用户体验。总的来说,小程序底层的实现原理是基于前端技术栈和相关技术,通过框架架构、渲染机制、数据通信、安全机制等来实现小程序的功能和特性。
  • 所需E币: 0
    时间: 2024-3-5 10:30
    大小: 45.37MB
    上传者: 随遇而安1992
    本书通过梳理大型网站技术发展历程,剖析大型网站技术架构模式,深入讲述大型互联网架构设计的核心原理,并通过一组典型网站技术架构设计案例,为读者呈现一幅包括技术选型、架构设计、性能优化、Web安全、系统发布、运维监控等在内的大型网站开发全景视图。本书不仅适用于指导网站工程师、架构师进行网站技术架构设计,也可用于指导产品经理、项目经理、测试运维人员等了解网站技术架构的基础概念;还可供包括企业系统开发人员在内的各类软件开发从业人员借鉴,了解大型网站的解决方案和开发理念。
  • 所需E币: 2
    时间: 2024-1-13 21:25
    大小: 420.55KB
    上传者: 电子阔少
    笔记本电池电量显示原理.doc
  • 所需E币: 0
    时间: 2023-12-18 15:21
    大小: 3.45KB
    前端高手特训从0到1带你手写一个微信小程序底层框架,小程序是一种不需要下载安装即可使用的应用,它实现了应用“触手可及”的梦想,用户扫一扫或者搜一下即可打开应用。也体现了“用完即走”的理念,用户不用关心是否安装太多应用的问题。应用将无处不在,随时可用,但又无需安装卸载。框架管理了整个小程序的页面路由,可以做到页面间的无缝切换,并给以页面完整的生命周期。开发者需要做的只是将页面的数据、方法、生命周期函数注册到框架中,其他的一切复杂的操作都交由框架处理。wepy支持类似Vue的组件化开发,可以将页面拆分成多个独立的组件,提高代码复用性和开发效率。下面我们通过一个实际的案例来说明组件化开发在wepy中的应用。假设我们有一个小程序项目,其中包含一个商品列表页面和一个商品详情页面。我们可以将商品列表和商品详情抽象成两个组件,并在需要的地方引用它们。首先,我们创建一个名为GoodsList的组件。在src/components目录下创建GoodsList.wpy文件,并编写如下代码:importaxiosfrom'axios'constdefaultConfig={ timeout:5000, baseURL:'/release/'}constaxiosInstance=axios.create(defaultConfig)//添加请求拦截器axiosInstance.interceptors.request.use(config=>{ returnconfig},(err)=>{ //对请求错误做些什么 returnPromise.reject(err)})//请求拦截器,内部根据返回值,重新组装,统一管理。axiosInstance.interceptors.response.use(res=>{ console.log('接口详情:',res) returnres})exportdefault{ //封装get httpGet(url:any,params={}){  returnaxiosInstance.get(url,{params}).then(res=>res.data).catch() }, //封装post httpPost(url:any,params={}){  returnaxiosInstance.get(url,{params}).then(res=>res.data).catch() }}封装一个openStore(),使用indexedDB.open()方法返回一个IDBRequest对象,接着将这个对象上的三个事件分别放置进入:onsuccess、onerror、onupgradeneeded。onsuccess表示打开数据库成功的事件。onerror表示打开数据库失败的事件。onupgradeneeded是数据库升级事件,如果版本号更新,并且大于之前的版本号则进行数据库升级,该事件回调里面,会创建我们所需要的对象仓库,类似于关系型数据库中的表的概念。exportdefaultclassDB{ privatedbName:string//数据库名称 constructor(dbName:string){  this.dbName=dbName } //打开数据库 publicopenStore(storeName:string,keyPath:string,indexs?:Array<string>){  constrequest=window.indexedDB.open(this.dbName,2)  request.onsuccess=(event)=>{   console.log('数据库打开成功')   console.log(event)  }  request.onerror=(event)=>{   console.log('数据库打开失败')   console.log(event)  }  request.onupgradeneeded=(event)=>{   console.log('数据库升级成功')   const{result}:any=event.target   conststore=result.createObjectStore(storeName,{autoIncrement:true,keyPath})   if(indexs&&indexs.length>0){    indexs.map((v:string)=>{     store.createIndex(v,v,{unique:true})    })   }   store.transaction.oncomplete=(event:any)=>{    console.log('创建对象仓库成功')   }   console.log(event)  } }}在子组件headerCommon.vue中切换语言时,调用saveLanguageApi接口,保存当前语言环境到indexedDB中,并将当前语言包zhCn或者en作为参数传递给父组件App.vue,代码片段如下://commonHeader.vuefunctionhandleSelect(e:any){ if(e==='zh'){  emit('changeLang',zhCn)  saveLanguage('zh') }elseif(e==='en'){  emit('changeLang',en)  saveLanguage('en') } console.log(e)}//Mock接口:保存当前语言环境functionsaveLanguage(language:any){ saveLanguageApi(language).then(res=>{  const{success}=res  if(success){   console.log('保存当前语言包成功')  } })}通过调用getLanguage接口获取到之前调用存储在indexedDB中的语言环境,然后赋值给全局组件,代码片段如下://headerCommon.vue//Mock接口:保存当前语言环境functiongetLanguage(){ fetchLanguageApi().then(res=>{  const{success,result}=res  const{name}=result  if(success){   if(name==='zh'){    emit('changeLang',zhCn)   }elseif(name==='en'){    emit('changeLang',en)   }   console.log('获取当前语言环境成功')  } })}getLanguage()使用@include指令来引入定义好的样式函数,该函数的三个参数可以根据传入的值来对flex布局进行自定义,默认值为:column、center、right,在footerCommon.scss中我们重新自定义了该样式函数,分别传入row、space-between、flex-start,代码片段如下://footerCommon.scss.common-footer{  border-top:1pxsolidrgb(235,235,235); .footer{  @includemain-wrapper;  @includelayout(row,space-between,flex-start);  padding:20px0;  li{   @includelayout;   h4{    font-weight:bold;   }   a{    margin-bottom:10px;    color:rgb(72,72,72);    text-decoration:none;    &:hover{     text-decoration:underline;    }   }  } }}订单中心模块会使用到的两个Mock接口为saveOrderApi、fetchOrderApi,一个是立即预定,另一个是查询订单列表,具体代码片段如下//src/api/order/index.tsconststoreName=Object.keys(airbnb.orderObjectStore)[0]//Mock接口:立即预定exportasyncfunctionsaveOrderApi(params:any){ constloading=ElLoading.service({  lock:true,  background:'rgba(0,0,0,0.1)' }) //是否存在相同订单Id consthasOrderId=awaitnewPromise((resolve,reject)=>{  airbnb.airbnbDB.getList(storeName).then((res:any)=>{   setTimeout(()=>{    loading.close()   },200)   res&&res.filter((item:any)=>{    if(item.orderId===params.orderId){//存在相同订单Id     resolve(true)    }   })   resolve(false)  }) }) letresult:IResultOr if(hasOrderId){  result=awaitnewPromise((resolve,reject)=>{   resolve({code:'000001',success:false,message:'数据已存在',result:null})  }) }else{  result=awaitnewPromise((resolve,reject)=>{   airbnb.airbnbDB.updateItem(storeName,params).then(res=>{    setTimeout(()=>{     loading.close()    },200)    resolve({code:'000000',success:true,message:'操作成功',result:null})   })  }) } returnresult}通过应用这些进阶技巧和最佳实践,可以进一步提升小程序的性能和开发效率,同时优化代码质量,为用户提供更好的使用体验。
  • 所需E币: 1
    时间: 2023-11-22 13:44
    大小: 28.16MB
    上传者: 945
    风力发电机组机结构与原理,中国电力出版社,PDF版本。
  • 所需E币: 5
    时间: 2023-10-30 14:57
    大小: 139.65MB
    上传者: Helloworld
    电路原理大学教材清华大学王建教授
  • 所需E币: 3
    时间: 2023-9-19 00:31
    大小: 29.62MB
    上传者: 破晓
    锂离子电池制造工艺原理与应用
  • 所需E币: 4
    时间: 2023-9-5 08:52
    大小: 39.73MB
    上传者: inch2012
    等离子体放电原理与材料处理