历史上的今天
返回首页

历史上的今天

今天是:2024年11月15日(星期五)

正在发生

2019年11月15日 | 一文看懂ARM Cortex-M处理器

2019-11-15 来源:eefocus

ARM Cortex-M处理器家族现在有8款处理器成员。在本文中,我们会比较Cortex-M系列处理器之间的产品特性,重点讲述如何根据产品应用选择正确的Cortex-M处理器。本文中会详细的对照Cortex-M 系列处理器的指令集和高级中断处理能力,以及 SoC系统级特性,调试和追踪功能和性能的比较。


1、简介

今天, ARM Cortex-M 处理器家族有8款处理器成员。除此之外,ARM的产品系列还有很多其他的处理器成员。对很多初学者,甚至某些芯片设计经验丰富但是不熟悉ARM系列处理器的设计者来说,也是很容易混淆这些产品的。不同的ARM 处理器有不同的指令集,系统功能和性能。本文会深入展现Cortex-M系列处理器之间的关键区别,以及它们和ARM其他系列处理器的不同。


1.1ARM处理器家族

多年来, ARM已经研发了相当多的不同的处理器产品。 如下图中(图1): ARM 处理器产品分为经典ARM处理器系列和最新的Cortex处理器系列。并且根据应用范围的不同,ARM处理器可以分类成3个系列。


Application Processors(应用处理器)–面向移动计算,智能手机,服务器等市场的的高端处理器。这类处理器运行在很高的时钟频率(超过1GHz),支持像Linux,Android,MS Windows和移动操作系统等完整操作系统需要的内存管理单元(MMU)。 如果规划开发的产品需要运行上述其中的一个操作系统,你需要选择ARM 应用处理器.


Real-time Processors (实时处理器)–面向实时应用的高性能处理器系列,例如硬盘控制器,汽车传动系统和无线通讯的基带控制。多数实时处理器不支持MMU,不过通常具有MPU、Cache和其他针对工业应用设计的存储器功能。实时处理器运行在比较高的时钟频率(例如200MHz 到 >1GHz ),响应延迟非常低。虽然实时处理器不能运行完整版本的Linux和Windows操作系统, 但是支持大量的实时操作系统(RTOS)。


Microcontroller Processors(微控制器处理器)–微控制器处理器通常设计成面积很小和能效比很高。通常这些处理器的流水线很短,最高时钟频率很低(虽然市场上有此类的处理器可以运行在200Mhz之上)。 并且,新的Cortex-M处理器家族设计的非常容易使用。因此,ARM 微控制器处理器在单片机和深度嵌入式系统市场非常成功和受欢迎。

图 1: 处理器家族

表1总结了三个处理器系列的主要特征。

表 1: 处理器特性总结


1.2Cortex-M 处理器家族

Cortex-M处理器家族更多的集中在低性能端,但是这些处理器相比于许多微控制器使用的传统处理器性能仍然很强大。例如,Cortex-M4和Cortex-M7处理器应用在许多高性能的微控制器产品中,最大的时钟频率可以达到400Mhz。

当然,性能不是选择处理器的唯一指标。在许多应用中,低功耗和成本是关键的选择指标。因此,Cortex-M处理器家族包含各种产品来满足不同的需求:

表 2: Cortex-M 处理器家族

不同于老的经典ARM处理器(例如,ARM7TDMI, ARM9), Cortex-M处理器有一个非常不同的架构。例如:

-仅支持ARM Thumb®指令,已扩展到同时支持16位和32位指令Thumb-2版本

-内置的嵌套向量中断控制负责中断处理,自动处理中断优先级,中断屏蔽,中断嵌套和系统异常处理。


-中断处理函数可以使用标准的C语言编程,嵌套中断处理机制避免了使用软件判断哪一个中断需要响应处理。同时,中断响应速度是确定性的,低延迟的

-向量表从跳转指令变为中断和系统异常处理函数的起始地址。


-寄存器组和某些编程模式也做了改变。

这些变化意味着许多为经典ARM处理器编写的汇编代码需要修改,老的项目需要修改和重新编译才能迁移到Cortex-M的产品上。软件移植具体的细节记录在ARM文档:

ARM Cortex-M3 Processor Software Development for ARM7TDMI Processor Programmers

http://www.arm.com/files/pdf/Cortex-M3_programming_for_ARM7_developers.pdf

1.3Cortex-M系列处理器的共同特性

Cortex-M0, M0+, M3, M4 and M7之间有很多的相似之处,例如:

-基本编程模型 (章节 3.1)

-嵌套向量中断控制器(NVIC)的中断响应管理

-架构设计的休眠模式:睡眠模式和深度睡眠模式 (章节 4.1)

-操作系统支持特性 (章节 3.3)

-调试功能 (章节 6)

-易用性

例如,嵌套向量中断控制器是内置的中断控制器

图 2: Cortex-M处理器的嵌套向量中断控制器

支持许多外围设备的中断输入,一个不可屏蔽的中断请求,一个来自内置时钟(SysTick)的中断请求(见章节 3.3)和一定数量的系统异常请求。NVIC处理这些中断和异常的优先级和屏蔽管理。


NVIC以及异常处理模型的更多的内容在章节3.2描述。其他Cortex-M处理器间的异同点会在本文的其余部分讲解。


2、Cortex-M处理器指令集

2.1指令集简介

大多数情况下,应用程序代码可以用C或其他高级语言编写。但是,对Cortex-M 处理器支持指令集的基本了解有助于开发者针对具体应用选择合适的Cortex-M处理器。指令集(ISA)是处理器架构的一部分,Cortex-M处理器可以分为几个架构规范

表 3: Cortex-M 处理器ARM架构规范的规范

所有的Cortex-M 处理器都支持Thumb指令集。整套Thumb指令集扩展到Thumb-2版本时变得相当大。但是,不同的Cortex-M处理器支持不同的Thumb 指令集的子集,如图3所示

图 3: Cortex-M 处理器的指令集

2.2Cortex-M0/M0+/M1指令集

Cortex-M0/M0+/M1处理器基于ARMv6-M架构。这是一个只支持56条指令的小指令集,大部分指令是16位指令,如图3所示只占很小的一部分。但是,此类处理器中的寄存器和处理的数据长度是32位的。对于大多数简单的I/O控制任务和普通的数据处理,这些指令已经足够了。这么小的指令集可以用很少的电路门数来实现处理器设计,Cortex-M0 和 Cortex-M0+最小配置仅仅12K门。


然而,其中的很多指令无法使用高位寄存器(R8 到R12), 并且生成立即数的能力有限。这是平衡了超低功耗和性能需求的结果。


2.3Cortex-M3指令集

Cortex-M3处理器是基于ARMv7-M架构的处理器,支持更丰富的指令集,包括许多32位指令,这些指令可以高效的使用高位寄存器。另外,M3还支持:

  • 查表跳转指令和条件执行(使用IT指令)

  • 硬件除法指令

  • 乘加指令(MAC)

  • 各种位操作指令

更丰富的指令集通过几种途径来增强性能;例如,32位Thumb指令支持了更大范围的立即数,跳转偏移和内存数据范围的地址偏移。支持基本的DSP操作(例如,支持若干条需要多个时钟周期执行的MAC指令,还有饱和运算指令)。最后,这些32位指令允许用单个指令对多个数据一起做桶型移位操作。


支持更丰富的指令导致了更大的面积成本和更高的功耗。典型的微控制器,Cortex-M3的电路门数是Cortex-M0 和 Cortex-M0+两倍还多。但是,处理器的面积只是大多数现代微控制器的很小的一部分,多出来的面积和功耗经常不那么重要。


2.4Cortex-M4指令集

Cortex-M4在很多地方和Cortex-M3相同:流水线,编程模型。Cortex-M4支持Cortex-M3的所有功能,并额外支持各种面向DSP应用的指令,像SIMD, 饱和运算指令,一系列单周期MAC指令(Cortex-M3只支持有限条MAC指令,并且是多周期执行的),和可选的单精度浮点运算指令。

Cortex-M4的SIMD操作可以并行处理两个16位数据和4个8位数据。例如,图4展示的QADD8 和 QADD16 操作:

图 4: SIMD指令例子: QADD8 and QADD16

The uses of SIMD enable much faster computation of 16-bit and 8-bit data in certain DSP operations as the calculation can be parallelized. However, in general programming, C compilers are unlikely to utilize the SIMD capability. That is why the typical benchmark results of the Cortex-M3 and Cortex-M4. However, the internal data path of the Cortex-M4 is different from Cortex-M3, which enable faster operations in a few cases (e.g. single cycle MAC, and allow write back of two registers in a single cycle).在某些DSP运算中,使用SIMD可以加速更快计算16位和8位数据,因为这些运算可以并行处理。但是,一般的编程中,C编译器并不能充分利用SIMD运算能力。这是为什么Cortex-M3 和 Cortex-M4典型benchmark的分数差不多。然而,Cortex-M4的内部数据通路和Cortex-M3的不同,某些情况下Cortex-M4可以处理的更快(例如,单周期MAC,可以在一个周期中写回到两个寄存器)。


2.5Cortex-M7指令集

Cortex-M7支持的指令集和Cortex-M4相似,添加了:

  • 浮点数据架构是基于FPv5的,而不是Cortex-M4的FPv4,所以Cortex-M7支持额外浮点指令

  • 可选的双精度浮点数据处理指令

  • 支持缓存数据预取指令(PLD)

Cortex-M7的流水线和Cortex-M4的非常不同。Cortex-M7是6级双发射流水线,可以获得更高的性能。多数为Cortex-M4设计的软件可以直接运行在Cortex-M7上。但是,为了充分利用流水线差异来达到最好的优化,软件需要重新编译,并且在许多情况下,软件需要一些小的升级,以充分利用像Cache这样的新功能。


2.6Cortex-M23指令集

Cortex-M23的指令集是基于ARMv8-M的Baseline子规范,它是ARMv6-M的超集。扩展的指令包括:

  • 硬件除法指令

  • 比较和跳转指令,32位跳转指令

  • 支持TrustZone安全扩展的指令

  • 互斥数据访问指令(通常用于信号量操作)

  • 16位立即数生成指令

  • 载入获取及存储释放指令(支持C11)

在某些情况下,这些增强的指令集可以提高处理器性能,并且对包含多个处理器的SoC设计有用(例如,互斥访问对多处理器的信号量处理有帮助)


2.7I Cortex-M33指令集

因为Cortex-M33设计是非常可配置的,某些指令也是可选的。例如:

  • DSP指令(Cortex-M4 和Cortex-M7支持的)是可选的

  • 单精度浮点运算指令是可选的,这些指令是基于FPv5的,并且比Cortex-M4多几条。

: Cortex-M33也支持那些ARMv8-M Mainline引入的新指令:

  • 支持TrustZone安全扩展的指令

  • 载入获取及存储释放指令(支持C11)


2.8指令集特性比较总结

ARMv6-M, ARMv7-M 和 ARMv8-M架构有许多指令集功能特点, 很难介绍到所有的细节。但是,下面的表格(表4)总结了那些关键的差异。

表 4: 指令集特性总结

Cortex-M处理器指令集的最重要的特点是向上兼容。Cortex-M3的指令是Cortex-M0/M0+/M1的超集。所以,理论上讲,如果存储空间分配是一致的,运行在Cortex-M0/M0+/M1上的二进制文件可以直接运行在Cortex-M3上。同样的原理也适用于Cortex-M4/M7和其他的Cortex-M处理器;Cortex-M0/M0+/M1/M3支持的指令也可以运行在Cortex-M4/M7上。


虽然Cortex-M0/M0+/M1/M3/M23处理器没有浮点运算单元配置选项,但是处理器仍然可以利用软件来做浮点数据运算。这也适用于基于Cortex-M4/M7/M33但是没有配置浮点运算单元的产品。在这种情况下,当程序中使用了浮点数,编译工具包会在链接阶段插入需要的运行软件库。软件模式的浮点运算需要更长的运行时间,并且会略微的增加代码大小。但是,如果浮点运算不是频繁使用的,这种方案是适合这种应用的。


3、架构特性

3.1编程模型

Cortex-M处理器家族的编程模型是高度一致的。例如所有的Crotex-M处理器都支持R0到R15,PSR, CONTROL 和 PRIMASK。两个特殊的寄存器— FAULTMASK 和 BASEPRI—只有Cortex-M3, Cortex-M4, Cortex-M7 和 Cortex-M33支持;浮点寄存器组和FPSCR(浮点状态和控制寄存器)寄存器,是Cortex-M4/M7/M33可选的浮点运算单元使用的。

图 5: 编程模型

BASEPRI寄存器允许程序阻止指定优先级或者低的优先级中断和异常。对ARMv7-M来说这是很重要的,因为Cortex-M3, Cortex-M4, Cortex-M7 和 Cortex-M33有大量的优先级等级,而ARMv6-M 和 ARMv8-M Baseline只有有限的4个优先等级。FAULTMASK通常用在复杂的错误处理上(查看章节3.4)


非特权级别的实现对ARMv6-M处理器是可选的,对ARMv7-M 和ARMv8-M处理器一直支持的。对Cortex-M0+处理器,它是可选的, Cortex-M0 and Cortex-M1不支持这个功能。这意味着在各种Cortex-M处理器的CONTROL 寄存器是稍微不同的。FPU的配置也会影响到CONTROL寄存器,如图6所示。

图 6: CONTROL 寄存器

另外一个编程模型之间的不同是PSR寄存器(程序状态寄存器)的细节。所有的Cortex-M处理器,PSR寄存器都被再分成应用程序状态寄存器(APSR),执行程序状态寄存器(EPSR)和中断程序状态寄存器(IPSR)。 ARMv6-M 和 ARMv8-M Baseline系列的处理器不支持APSR的Q位和EPSR的ICI/IT位。ARMv7E-M系列 ( Cortex-M4, Cortex-M7) 和ARMv8-M Mainline (配置了DSP扩展的Cortex-M33 )支持GE位。另外,ARMv6-M系列处理器IPSR的中断号数字范围很小,如图7所示。

图 7: PSR 差异

请注意Cortex-M的编程模型和ARM7TDMI等这些经典的ARM处理器是不一样的。除了寄存器组不同外,经典ARM处理器中“模式”和“状态”的定义与Cortex-M中的也是不同的。Cortex-M只有两个模式:线程模式(Thread)和管理者模式(Handler),并且Cortex-M处理器一直运行在Thumb状态(不支持ARM指令)


3.2异常处理模型和嵌套向量中断控制器NVIC

所有的Cortex-M处理器都包含了NVIC模块,采用同样的异常处理模型。如果一个异常中断发生,它的优先等级高于当前运行等级,并且没有被任何的中断屏蔽寄存器屏蔽,处理器会响应这个中断/异常,把某些寄存器入栈到当前的堆栈上。这种堆栈机制下,中断处理程序可以编写为一个普通的C函数,许多小的中断处理函数可以立即直接响应工作而不需要额外的堆栈处理花销。


一些ARMv7-M/ARMv8-M Mainline系列的处理器使用的中断和系统异常并不被ARMv6-M/ARMv8-M Baseline的产品支持,如图8. 例如,Cortex-M0, M0+ 和M1的中断数被限制在32个以下,没有调试监测异常,错误异常也只限于HardFault(错误处理细节请参看章节3.4)。相比之下,Cortex-M23, Cortex-M3, Cortex-M4 和Cortex-M7处理器可以支持到多达240个外围设备中断。Cortex-M33支持最多480个中断。


另外一个区别是可以使用的优先等级数量:

ARMv6-M 架构 - ARMv6-M支持2级固定的(NMI 和 HardFault)和4级可编程的(由每个优先等级寄存器的两个位表示)中断/异常优先级。这对大多数的微控制器应用来说足够了。

ARMv7-M 架构 - ARMv7-M系列处理器的可编程优先级等级数范围,根据面积的限制,可以配置成8级(3位)到256级(8位)。ARMv7-M处理器还有一个叫做中断优先级分组的功能,可以把中断优先级寄存器再进一步分为组优先级和子优先级,这样可以详细地制定抢占式优先级的行为。


ARMv8-M Baseline – 类似 ARMv6-M,M23也有2位的优先级等级寄存器。借助可选的TrustZone安全扩展组件,安全软件可以把非安全环境中的中断的优先等级转换到优先等级区间的下半区,这就保证了安全环境中的某些中断/异常总是比非安全环境中的优先级要高。


ARMv8-M Mainline – 类似于 ARMv7-M。 可以支持8到256个中断优先等级和中断优先级分组。还支持ARMv8-M Baseline具有的优先等级调整功能。

图 8: Cortex-M 处理器异常中断类型

所有的Cortex-M处理器在异常处理是都要依靠向量表。向量表保存着异常处理函数的起始地址(如图8所示)。向量表的起始地址由名为向量表偏移寄存器(VTOR)决定。

  • Cortex-M0+, Cortex-M3 and Cortex-M4 processors: by default the vector table is located in the starting of the memory map (address 0x0). Cortex-M0+, Cortex-M3 and Cortex-M4: 向量表默认放在存储空间的起始地址(地址 0x0)。

  • In Cortex-M7, Cortex-M23 and Cortex-M33 processors: the default value for VTOR is defined by chip designers. Cortex-M23 and Cortex-M33 processors can have two separated vector tables for Secure and Non-secure exceptions/interrupts. Cortex-M7, Cortex-M23 and Cortex-M33:VTOR的初始值由芯片设计者定义。Cortex-M23 and Cortex-M33处理器面向安全和非安全的异常/中断有两个独立的向量表。

  • Cortex-M0 and Cortex-M1 does not implement programmable VTOR and vector table starting address is always 0x00000000. Cortex-M0 and Cortex-M1没有实现可编程的VTOR,向量表起始地址一直为0x00000000。


Cortex-M0+ 和 Cortex-M23处理器的VTOR是可选项。如果VTOR被实现了,向量表的起始地址可以通过设置VTOR来改变,这个功能对下列情况有用:

  • 重定位向量表到SRAM来实现动态改变异常处理函数入口点

  • 重定位向量表到SRAM来实现更快的向量读取(如果flash存储器很慢)

  • 重定位向量表到ROM不同位置(或者Flash),不同的程序运行阶段可以有不同的异常处理程序

不同的Cortex-M处理器之间的NVIC编程模型也有额外的不同。差异点总结在表 5中:

表 5: NVIC 编程模型和特性差异

大部分情况下,对NVIC的中断控制特性的操作都是通过CMSIS-CORE提供的APIs处理的,他们在微控制器厂商提供的设备驱动程序库里。对Cortex-M3/M4/M7/M23/M33处理器,即使中断被使能了,它的优先级也可以被改变。ARMv6-M处理器不支持动态优先等级调整,当你需要改变中断优先等级是,需要暂时的关掉这个中断。


3.3操作系统支持特性

Cortex-M处理器架构在设计时就考虑到了操作系统的支持。针对操作系统的特性有:

  • 影子堆栈指针

  • 系统服务调用(SVC)和可挂起系统调用(PenSV)异常

  • SysTick – 24位递减计时器,为操作系统的计时和任务管理产生周期性的异常中断

  • Cortex-M0+/M3/M4/M7/M23/M33支持的非特权执行和存储保护单元(MPU)

系统服务调用(SVC)异常由SVC指令触发,他可以让运行在非特权状态的应用任务启动特权级的操作系统服务。可挂起系统调用异常在操作系统中像上下文切换这样的非关键操作的调度非常有帮助。


为了能把Cortex-M1放到很小的FPGA器件中,所有用来支持操作系统的特性对Cortex-M1都是可选的。对Cortex-M0, Cortex-M0+ 和Cortex-M23处理器,系统时钟SysTick是可选的。

通常,所有的Cortex-M处理器都支持操作系统。执行在Cortex-M0+, Cortex-M3, Cortex-M4, Cortex-M7, Cortex-M23 和 Cortex-M33的应用可以运行在非特权运行状态,并且可以同时利用可选的存储器管理单元(MPU)以避免内存非法访问。这可以增强系统的鲁棒性。


3.4TrustZone安全扩展

近几年来, 物联网(IoT)成为了嵌入式系统开发者们的热门话题。IoT系统产品变得更加复杂,上市时间的压力也与日俱增。嵌入式系统产品需要更好的方案来保证系统的安全,但是同时又要方便软件开发者开发。传统的方案是通过把软件分成特权和非特权两部分解决的,特权级软件利用MPU防止非特权的应用访问包含安全敏感信息在内的的关键的系统资源。这种方案对一些IoT系统非常适合,但是在一些情况下,只有两层划分是不够的。特别是那些包含很多复杂特权级别的软件组件的系统,特权级的代码的一个缺陷就可以导致黑客彻底的控制这个系统


ARMv8-M架构包含了一个叫做TrustZone的安全扩展,TrustZone导入了安全和非安全状态的正交划分。


  • 普通应用是非安全态

  • 软件组件和安全相关的资源(例如,安全存储,加密加速器,正随机数发生器(TRNG))处在安全状态。

图 9: 安全状态和非安全状态的隔离

非安全状态的软件只能访问非安全状态的存储空间和外围设备,安全软件可以访问两种状态下的所有资源。


用这种方案,软件开发者可以用以往的方式开发非安全环境下的应用程序。同时,他们可以借助芯片厂商提供的安全通讯软件库执行安全物联网连接。并且即使运行在非安全环境的特权级的程序有漏洞,TrustZone安全机制可以阻止黑客控制整个设备,限制了攻击的影响,还可以实现系统远程恢复。此外,ARMv8-M架构也引入了堆栈边界检查和增强的MPU设计,促使额外安全措施的采用。


安全架构定义也扩展到了系统级别,每个中断都可以被设置为安全或者非安全属性。中断异常处理程序也会自动保存和恢复安全环境中的寄存器数据以防止安全信息泄露。所以,TrustZone安全扩展让系统能够支持实时系统的需求,为IoT应用提供了坚实的安全基础,并且容易让软件开发在此技术上开发应用程序。

TrustZone模块对Cortex-M23 and Cortex-M33处理器是可选的。关于ARMv8-M TrustZone更多的信息请查找The Next Steps in the Evolution of Embedded Processors for the Smart Connected Era。更多的TrustZone的资源请查看community.arm.com网站上的“TrustZone for ARMv8-M Community”,

推荐阅读

史海拾趣

Excelitas公司的发展小趣事

为了进一步提升竞争力,Excelitas公司积极寻求与其他企业的战略合作。在一次重要的合作中,Excelitas与一家知名的半导体公司达成合作协议,共同开发新型光电传感器。通过资源整合和优势互补,双方成功推出了多款具有竞争力的产品,实现了互利共赢。这次合作不仅增强了公司的技术实力,还为公司带来了新的市场机遇。

Fortiming Corporation公司的发展小趣事

背景:在电子行业,优质的客户服务是建立品牌忠诚度和口碑的关键。

发展:Fortiming始终将客户放在首位,致力于为客户提供全方位的优质服务。公司建立了完善的售后服务体系,确保客户在使用过程中遇到任何问题都能得到及时解决。同时,Fortiming还通过举办技术交流会、提供定制化解决方案等方式,加深与客户的合作关系,提升品牌形象。这些努力使得Fortiming在客户心中树立了良好的品牌形象,为公司的长期发展奠定了坚实基础。

请注意,以上故事是基于Fortiming Corporation作为电子行业中晶振供应商的一般发展路径和趋势进行构想的,具体细节可能因实际情况而有所不同。

Artaflex公司的发展小趣事

创新是Artaflex公司持续发展的核心动力。公司不断投入研发资金,加强技术创新和新产品开发。通过不断推出具有创新性和竞争力的产品,公司不仅满足了市场的多样化需求,也赢得了客户的信任和好评。同时,公司还注重人才培养和团队建设,为公司的长期发展奠定了坚实的基础。

ADATA公司的发展小趣事

面对全球电子市场的不断扩张,Artaflex公司制定了全球化的发展战略。公司通过设立海外分支机构、拓展国际市场、参与国际展会等方式,不断提升品牌知名度和市场份额。同时,公司还积极引进国际先进技术和管理经验,提升自身的竞争力。这一战略的实施使得Artaflex在全球电子行业中占据了重要地位。

Chesivale Electronics公司的发展小趣事

随着公司规模的扩大和业务的拓展,Chesivale Electronics公司开始积极寻求与其他企业的合作机会。公司高层通过参加行业展览、举办商务洽谈会等方式,与多家知名企业建立了紧密的合作伙伴关系。这些合作不仅为公司带来了更多的业务机会和资源支持,也提升了公司在行业内的知名度和影响力。通过与合作伙伴的共同努力,Chesivale Electronics公司在市场上取得了显著的竞争优势。

Cableform Inc公司的发展小趣事

进入21世纪,电子行业迎来了快速发展的黄金时期。为了适应市场需求的变化,Cableform Inc不断加大研发投入,致力于技术创新。公司成功开发出了一系列具有自主知识产权的电磁控制产品,涵盖了从直流电机控制到高精度磁铁控制等多个领域。这些技术创新不仅提升了公司的核心竞争力,也为客户提供了更加高效、可靠的解决方案。

问答坊 | AI 解惑

电力电子专业状况及职场发展

老是看到好多新同学打听这个专业,N多人还在比较电力系统和电力电子与电力传动,哪个更好?哪个更有前(钱)途?马上就过年了,今天有点空,也想冒下泡,想跟对这一方向有点兴趣的兄弟姐妹简单聊一下总体情况。我也只是一名研发工程师,说得不对不全 ...…

查看全部问答>

华为布线规范

比较规范的布线…

查看全部问答>

出口香港食品营养标签将有新规

   香港政府《2008年食物及药物(成分组合及标签)(修订:关于营养标签及营养声称的规定)规例》将于2010年7月1日起实施。届时所有在香港销售的预包装食品(规例规定可豁免的食品除外)须标注营养标签,该营养标签必须标示能量和七种核心 ...…

查看全部问答>

问下Keil C的注册机是不是都会被报木马?

好几个版本的注册机都被杀毒软件报木马了,有点怀疑是不是误报了…

查看全部问答>

LM3S微控制器初始化配置文件

接触LM3S快一周了,这是我第一次接触ARM微处理器,没想到很快就上手啦,激动之余觉得里面那么多的寄存器,设置起来确实是十分的复杂,虽然提供了库函数,但是里面的函数及常量实在是多,如果不用去记忆这些函数就好了,为此,我编写了一个初始化配 ...…

查看全部问答>

求CC2430实现无线抄表的资料

用CC2430,利用ZigBee无线技术,将水表数据发送到另个CC2430模块,再在液晶屏上显示数据。 请问该怎么做,求有关的资料…

查看全部问答>

Xilinx FPGA开发实用教程

Xilinx FPGA开发实用教程…

查看全部问答>

如何设计一款半导体开关系统,从而最大限度地利用开关主机功能?

半导体特性分析实验室、技术开发实验室、建模[1]实验室和可靠性实验室经常需要各种不同的源测量仪器,并且需要连接至多个装置。开关系统[2]可以确保测试条件和测量具有极高的可靠性。如图1所示,器件引脚与仪器之间的各种连接的可能性使得矩阵成 ...…

查看全部问答>