Cortex-M

如果CPU没有中断,你能想象是什么情况吗?

就是一个while循环,且不能中断处理及时的任务,更别说有现在的RTOS了(RTOS也是需要中断才能实现)。

下面就来说说关于Cortex-M中断在RTOS应用及注意事项。

关于Cortex-M处理器

这里先介绍一点Cortex-M处理器相关的内容,本文结合内核为Cortex-M3的STM32来讲述。

STM32属于ARM中Cortex-M系列处理器,比如:STM32F1数据Cortex-M3,STM32F7数据Cortex-M7。

1.jpg

可以参看我之前分享文章《从Cortex-M到Cortex-A认识ARM处理器》,了解一下关于ARM处理器的种类。

本文主要结合Cortex-M3下面STM32F1系列处理器为例来讲述中断控制相关内容。而Cortex-M其它系列,或者说STM32其它系列关于中断的内容类似。

Cortex-M3只是STM32F1的一个内核。反过来说STM32F1是在Cortex-M3基础上增加了一些外设(如:USART、AD等)的芯片。

Cortex-M中断控制

NVIC:Nested Vectored Interrupt Controller,即嵌套向量中断控制器。

STM32中NVIC我们比较熟悉,编程的时候使用中断都会对NVIC进行配置。

而STM32F1中的NVIC是属于Cortex-M3中的一部分,而不是STM32增加的外设。

NVIC向量中断控制器是Cortex‐M3不可分离的一部分,它与 CM3 内核的逻辑紧密耦合,有一部分甚至水乳交融在一起。

所以,NVIC相关的寄存器位于Cortex-M手册中。讲述STM32的中断控制,还得从Cortex-M3的NVIC讲起,

1.中断输入向量表

Cortex-M3的NVIC支持1至240个中断输入,比如STM32中xxxIRQs,也就是中断向量表,具体的数值由芯片厂商在设计芯片时决定。

比如STM32F1的中断和异常向量表:

2.jpg

3.jpg

2.中断和异常区别很多初学的朋友不知道什么是中断?什么是异常?甚至有人直接把中断和异常笼统称为“中断”。

中断和异常其实有差异,也有关联,我们常说的中断其实是包含了异常。异常可以理解为MCU,或者程序处于了某种异常状态。

这么区分吧,看上面向量表,上部分有灰色背景的为异常,下部分白色的为中断。

异常属于Cortex‐M3内核的一部分,而中断属于MCU(STM32)的一部分(由厂家决定)。

所以:1.站在Cortex‐M3内核角度,像STM32中USART这类中断,属于外部中断。

2.站在STM32角度,EXTI外部引脚中断才属于中断。

3.优先级对于Cortex-M3来说,每个外部中断都有一个对应的优先级寄存器。

每个寄存器占用8位,但是允许最少只使用最高3位,在STM32F1中使用了高4位。(也就是我们可以分16个优先级)

优先级可以被分为高低两个位段,分别是抢占优先级和亚(响应)优先级。

4.jpg

提示:

1.STM32中断优先级数值越小,优先级越大。

2.优先级分组:Cortex-M3,M4具有分组功能,即存在抢占优先级和响应优先级,如下图:

5.jpg

而有的内核就没有,如Cortex-M0就没有。

3.参考资料

可以参看《Cortex-M3权威指南》

STM32的内核编程手册:http://www.st.com/stonline/products/literature/pm/15491.pdf

RTOS中断优先级配置

本节内容讲述一下FreeRTOS最大中断优先级配置问题,也就是FreeRTOSConfig.h配置文件中的:

configMAX_SYSCALL_INTERRUPT_PRIORITY

6.jpg


你们知道配置数值的含义吗?这里就需要结合NVIC相关的内容来理解。

上面说了,在STM32中,使用了NVIC优先级的高4位,而我们配置时需要对高4位进行配置(低4位未使用)。

7.jpg

看上图,明白了吗,上面这个数值就是95,但代表的优先级为5。

这个配置数值的含义,大概意思是:你代码中使用的中断(比如USART1_IRQn)优先级需要大于5才可行。

如下面配置,优先级为2就不行(当然,有分组的还牵涉到分组问题)。

8.jpg

关于FreeRTOS最大优先级配置的内容可以参考:https://www.freertos.org/RTOS-Cortex-M3-M4.html

最后再次提示:FreeRTOS任务优先级是数值越大,优先级越高,需要和CM3中断优先级区分开来。

来源:strongerHuang

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 22

问题

最近在使用 STM32F3 芯片的时候,遇到这样一个问题:如果外部中断来的频率足够快,上一个中断没有处理完成,新来的中断如何处理? 在调试时,发现有中断有 挂起、激活、失能等状态,考虑这些状态都是干啥用的呢!他们是 Cortex-M 核所共有的,因此,这里不针对与具体用的 STM32 MCU,直接上升到 Cortex-M 内核来了解一下!

简介

中断(也称为“异常”)是微控制器一个很常见的特性。中断一般是由硬件(例如外设、外部引脚)产生,当中断产生以后 CPU 就会中断当前的程序执行流程转而去处理中断服务中指定的操作。

所有的 Cortex-M 内核都会包含一个用于中断处理的组件:NVIC(Nested Vectored Interrupt Controller,嵌套向量中断控制器)。它处理处理中断,还处理其他需要服务的事件(例如 SVC 指令),通常称为异常(按照 ARM 的说法,中断也是一种异常)。

1.png

Cortex-M3 和 Cotex-M4 的 NVIC 最多支持 240 个 IRQ(中断请求)、1 个不可屏蔽中断(NMI)、1 个 Systick(滴答定时器)定时器中断和多个系统异常。而 Cortex-M0 最多支持 32 个 IRQ、1 个不可屏蔽中断(NMI)、1 个 Systick(滴答定时器)定时器中断和多个系统异常。

  • IRQ: 多数由定时器、IO 端口、通信接口等外设产生

  • NMI: 通常由看门狗定时器或者掉电检测器等外设产生

  • 其他: 主要来自系统内核

注意,本文所说的 Cortex-M 主要指定是 Cotex-M3 和 Cotex-M4。

2.png

Cortex-M0、Cortex-M0+、Cortex-M1 基于 ARMv6-M。与 Cotex-M3 和 Cotex-M4 相比,他们的指令集较小。而且,Cortex-M1 是专门为FPGA 应用设计的,没有独立 MCU。

异常类型

Cortex-M 处理器的异常中,编号 1~15 的为系统异常,16 及以上的则为中断输入。所有中断级别的异常都具有可编程的优先级。部分系统异常具有固定优先级。ARM 给出了以下一张表:


未标题-1.jpg

针对 Cortex-M 系列的内核,ARM 提供了一套叫做 CMSIS 的东西。目前,所有的 MCU 均使用 CMSIS 作为编程基础。在 CMSIS-Core 中,中断标识有中断枚举实现,从数值 0 开始(代表中断 #0)。其中,系统异常的编号为负数。具体如下:

3.png

CMSIS-Core 之所以使用另外一种编号系统,是因为这样可以稍微提高部分 API 的效率。中断的编号和枚举定义是同设备相关的,他们位于微控制器供应商提供的头文件中,在一个名为 IRQn 的 typedef 段中。

中断处理(异常处理)

当某种内部或外部事件发生时,MCU 的中断系统将迫使 CPU 暂停正在执行的程序,转而去进行中断事件的处理,中断处理完毕后,又返回被中断的程序处,继续执行下去。

主程序正在执行,当遇到中断请求(Interrupt Request)时,暂停主程序的执行转而去执行中断服务例程(Interrupt Service Routine,ISR),称为响应,中断服务例程执行完毕后返回到主程序断点处并继续执行主程序。多个中断是可以进行嵌套的。正在执行的较低优先级中断可以被较高优先级的中断所打断,在执行完高级中断后返回到低级中断里继续执行。

4.png

中断管理

管理中断所使用的大部分寄存器都位于 NVIC(Nested Vectored Interrupt Controller,嵌套向量中断控制器)和 SCB(System Control Block,系统控制块)中。实际上,SCB 是作为 NVIC 的一部分来实现的,不过在 CMSIS-Core 中,将其定义在了独立的结构体中。除此之外,处理器内核中还有用于中断屏蔽寄存器:PRIMASK、FAULTMASK、BASEPRI。

NVIC 和 SCB 位于系统控制空间,地址从 0xE000E00 开始,大小 4KB。SCB 中还有 SysTick 定时器,存储器保护单元等。

优先级

这部分暂且不说!

中断输入和挂起

在 Cortex-M 内核中,每个中断都具有多个属性:

  • 每个中断都可以被禁止(默认)或者使能

  • 每个中断都可以别挂起或者解除挂起

  • 每个中断都可以处于活跃或者非活跃

这些状态属性具有多种可能的组合。例如,在处理中断时,可以将其禁止,若在中断退出前产生了同一个中断的新请求,由于该活跃中断被禁止了,那就会处于挂起状态。

NVIC 在设计上既支持产生 脉冲中断请求 的外设,也支持产生 高电平中断请求 的外设。无需配置任何一个 NVIC 寄存器以选择其中一种中断类型。对于脉冲中断请求,脉冲宽度至少要为一个时钟周期;而对于电平触发的请求,在 ISR 中的操作清除请求之前,请求服务的外设要一直保持电平信号(如写入寄存器以清除中断请求) 。尽管外部中断请求在 I/O 引脚上的电平可能是低电平有效,但是 NVIC 收到的请求信号为高有效!

中断的挂起状态被存储在 NVIC 的可编程寄存器中,当 NVIC 的中断输入被确认后,它就会引发该中断的挂状态。即便中断请求被取消,挂起状态仍会为高。这样,NVIC 就可以处理脉冲中断请求了。

挂起状态的意思是,中断被置于一种等待处理器处理的状态。有些情况下,处理器在中断挂起时就会进行处理。不过,若处理器已经在处理另外一个更高或同优先级的中断,或者中断被某个中断屏蔽寄存器给屏蔽掉了,那么在其他的中断处理结束前或者中断屏蔽被清除前,挂起请求会一直保持。

在传统 ARM 处理器中,如果外设产生了中断,那么它们得到处理前必须一直保持中断请求信号。

当中断开始处理中断请求时,中断的请求信号会被自动清除。当中断正在被处理时,它就会处于活跃状态。

5.png

当中断处于活跃状态时,处理器无法再中断完成和异常返回前再次处理同一个中断请求。

中断的挂起状态位于中断挂起状态寄存器中,软件可以复位这些寄存器。因此,可以手动清除或者设置中断的挂起状态。若中断请求产生时处理器正在处理另一个具有更高优先级的中断,而在处理器对该中断请求做出响应之前,挂起状态被清除掉了,则该中断会被取消且不会再得到处理。

6.png

若持续保持某个中断请求,那么及时软件尝试清除该挂起状态,挂起状态还是会再次被置位的。

7.png

若中断已经得到了处理,中断源仍然在继续保持中断请求,那么这个中断就会再一次进入挂起状态且再次得到处理

8.png

对于脉冲中断请求,若在处理器开始处理前,中断请求信号产生了多次,他们会被当做一次中断请求处理

9.png

中断挂起状态可以在其正在被处理时再次置位。之前的中断请求正在被处理时产生了新的请求,这样机会引发新的挂起状态。处理器在前一个 ISR 结束后需要再次处理这个中断。

10.png

即使中断被禁止了,他的挂起状态仍然可置位。 这种情况下,若中断稍后被使能了,它仍然可以被触发并被得到处理。这种情况可能不是我们需要的,因此需要在使能 NVIC 中断前手动清除挂起状态。

总结

NVIC 中对于每个中断需要设置 抢占优先级 和 响应优先级(又称子优先级)。多个中断会先比较 抢占优先级,抢占优先级相同的比较响应优先级。高抢占优先级能够打断低抢占优先级的,但是相同抢占优先级的高响应优先级不能打断低响应优先级。

  1. 高优先级的抢占优先级是可以打断正在进行的低抢占优先级中断的。

  2. 抢占优先级相同的中断,高响应优先级不可以打断低响应优先级的中断。

  3. 抢占优先级相同的中断,当两个中断同时发生的情况下,哪个响应优先级高,哪个先执行。

  4. 如果两个中断的抢占优先级和响应优先级都是一样的话,则看哪个中断先发生就先执行。

参考

  1. The Definitive Guide to ARM Cortex-M3 and Cortex-M4 Processors, 3rd Edition

  2. The Definitive Guide to the Cortex-M0

————————————————

版权声明:本文为CSDN博主「ZC·Shou」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/ZCShouCSDN/article/details/85029696

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 358

位带操作可能现在用的比较少了,但在以前MCU性能不是很好的时候,位带操作却是众多软件工程师常用操作。

本文主要结合Cortex-M3内核(STM32F1)来讲述,相信许多朋友在初学的时候都被绕晕过。

1、关于位带操作

Bit-banding简称位带,有人也叫位段。支持位带操作后,可以使用普通的加载/存储指令来对单一的比特进行读写。

很多朋友是从学习51单片机过来的,都知道P1.1这个引脚可以单独控制,我们操作的这个引脚就是一个Bit位。

我们都知道在STM32中不能直接操作寄存器的某一个Bit位,比如单独控制PA端口输出数据寄存器中的ODR1,如下图:

1.jpg

STM32F1内核Cortex-M3早就考虑到了这个问题,为了能达到直接操作ODR1这类Bit位,就在内核中开辟了一块地址区域(位带别名):可以将ODR1这类Bit位(位带区)映射到位带别名区域对应的地址,只需要操作映射后的地址,就可以实现操作这个ODR1位了。

简单来说就是映射操作,只是这个映射操作有许多约定要遵循。

2、位带操作中的映射关系

在Cortex-M3中有两个区实现了位带操作,其中一个是 SRAM区的最低 1MB 范围,第二个则是片内外设区的最低 1MB 范围。

这两个区域如下图红色标注的区域:

2.jpg

这两个1MB将分别映射到另外两个地址区域:1.SRAM区的最低1MB(0x2000 0000 --- 0x200F FFFF) 映射到(0x2200 0000 --- 0x23FF FFFF)。

2.片内外设区的最低1MB(0x4000 0000 --- 0x400F FFFF)映射到(0x4200 0000 --- 0x43FF FFFF)。

其实就是映射到偏移(距离自身)0x0200 0000外的32MB空间(位带别名区),如下图SRAM区映射关系:

3.jpg

提示:看图中的有颜色的8Bit,它是映射到偏移0x0200 0000外的32Bit(4Byte)空间上。我们读写0x2200 0000这个地址,其实就是操作0x2000 0000中的Bit0位。

这就是所谓的“比特的膨胀对应关系”,1Bit膨胀到32Bit(4字节)。4字节对应的就是那1Bit位的地址,而这个地址中的数据只有最低一位才有效(LSB)。

解释上面多处出现的关键词:位带区:支持位带操作的地址区;位带别名:对别名地址的访问最终作用到位带区的访问上;

3、位带区->别名区计算公式

位带操作的主要目的:通过Bit位地址(A)计算得到别名区地址(AliasAddr)。

1.SARM区计算公式

AliasAddr = 0x22000000 + ((A‐0x20000000)*8+n)*4 = 0x22000000+(A-0x20000000)*32 + n*4

2.片上外设区计算公式

AliasAddr = 0x42000000 + ((A-0x40000000)*8+n)*4 = 0x42000000+(A-0x40000000)*32 + n*4

由于映射关系一样,所以公式原理也一样,只是地址不一样。计算公式需要结合上图比特的膨胀对应关系来理解。

*8:1个字4个字节;

*4:1个字节8Bit;

4、代码实现

利用上面计算公式,代码实现的过程就很简单,我们的目的就是对“AliasAddr”这个地址进行读写操作。

1.RAM位带操作宏定义

#define BITBAND_RAM(RAM, BIT) (*((uint32_t volatile*)(0x22000000u + (((uint32_t)&(RAM) - (uint32_t)0x20000000u)<<5) + (((uint32_t)(BIT))<<2))))

2.外设寄存器位带宏定义

#define BITBAND_REG(REG, BIT) (*((uint32_t volatile*)(0x42000000u + (((uint32_t)&(REG) - (uint32_t)0x40000000u)<<5) + (((uint32_t)(BIT))<<2))))

方便大家对比,给一个截图:

4.png

A.RAM地址0x20001000的Bit1位写0

BITBAND_RAM(*(uint32_t *)0x20001000, 1) = 0;

B.读取RAM地址0x20001000的Bit1位

uint8_t Val;Val=BITBAND_RAM(*(uint32_t *)0x20001000, 1);

C.对PA1数据输出寄存器输出1

BITBAND_REG(GPIOA->ODR, 1) = 1;

D.读取PA1数据输出寄存器

uint8_t Val;Val=BITBAND_REG(GPIOA->ODR, 1);

这里就是操作某一个地址,类似于操作指针一样;

5、位带操作优缺点

1.优点

相比直接操作寄存器代码更简洁,运行效率更高。避免在多任务,或中断时出现紊乱等。

2.缺点

操作不当(传入地址参数不对),容易出现总线Fault。

6、最后

关于Cortex-M3的位带操作,更多详情可以参看Cortex-M3技术参考手册(权威指南)。
这后面的Cortex-M处理器已经不再支持位带操作了,从兼容未来软件的角度来说,不是很建议大家再继续使用了。

只是位带操作是一种经典,这里分享给大家了解一下,希望对你们有帮助。

来源:嵌入式专栏

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 175

随着汽车行业不断加速发展,Arm Cortex-M CPU 成为车内微控制器 (MCU) 的理想之选。本文将为您详细阐述背后的原因。

在软件定义汽车 (SDV)[1]  的新时代,为了应对供应安全方面的挑战,汽车行业正在经历一场前所未有的变革。这使得整个行业的计算架构和供应链也随之演变。

核心计算组件

SDV 的计算平台由三个核心组件组成。用于高级驾驶辅助系统 (ADAS) 的中央计算,可提高自动驾驶能力,并实现一般的车辆计算功能;多个区域控制器,可充当配电和数据连接枢纽,并支持各种实时汽车功能;最后,还有多个集成到电子控制单元 (ECU) 中的终端微控制器,可支持整个计算平台的单功能操作,包括传感器、驱动和硬件控制。

1.png

汽车计算平台内部一览

所有 MCU 控制器将成为汽车计算平台中重要的一环,而采用 Arm Cortex-M CPU[2] 的 MCU 在这之中将发挥决定性作用。这些 MCU 将提供所需的功能、功耗、可扩展性和通用架构,为汽车行业的计算转型提供支持。

软件定义汽车

在深入研究 MCU 和 Cortex-M CPU 的作用之前,有必要先思考一下 SDV 的决定因素。我们预计 SDV 提供汽车软件更新的方式将类似于如今在智能手机上进行的定期更新,其中包括对系统的更新通知,或是可能由驾驶员要求的车辆功能改进。例如,可以升级转向系统以实现更灵敏的“运动型”操控,也可以向 ADAS 添加新功能以获得更多驾驶辅助,或者升级电池管理系统以增加汽车的续驶里程。为了实现这些更新,SDV 还将需要一个云原生环境,能够先在云端创建和测试软件,然后再将其部署到汽车中。

2.png

展望未来 SDV 的内部情况

MCU 的崛起

尽管新车的电子/电气 (EE) 架构趋于集中化,但在整个汽车行业中,MCU 的销量和功能都将有所增加。据 Strategy Analytics[3] 分析,在 2021 年至 2026 年期间,MCU 的销量将增长约 8%,超过汽车产量的增速。这些 MCU 将推动远程边缘传感点的部署,以低功耗和高效率控制车内的特定操作,并适配 SDV 的新软件架构。

MCU 的功能和计算能力一直在更新迭代。随着需求的持续扩大,MCU 已从 8 位扩展到 16 位,随后又扩展到 32 位。事实上,有许多最小节点在不断地发展并迁移到 32 位控制器,同时,Arm 的汽车合作伙伴也致力于在 2023 年推出新的 32 位产品 (敬请期待后续相关发布)。

由于无线更新 (OTA) 贯穿未来 SDV 的整个生命周期,MCU 需要不断提供可信的执行环境和更强大的安全功能,以防止恶意软件非法访问隐私、法律或财务等方面的重要信息,或导致可能致命的严重事故。功能安全也是汽车的重要标准。对于可能提供关键测量和作动功能的终端 MCU 而言,功能安全更是至关重要,因此,这些 MCU 必须具备功能安全特性。

Cortex-M 的作用

Cortex-M CPU 可提供未来汽车计算平台中 MCU 所需的各项功能。汽车合作伙伴之所以为其 MCU 选择 Cortex-M,是因为该产品系列能够提供通用架构、功能安全、先进的信息安全以及广泛的生态系统支持。例如,Elmos[4]就计划在其新一代汽车 MCU 中采用一系列 Cortex-M 产品。

通用架构

近期的全球供应状况已经对汽车行业产生影响。有时,终端 MCU 的供应不足会导致汽车无法出货。由于替代控制器的选择很少,汽车需要等到这些关键组件有货后才能出货。因此,部署标准化 MCU 计算架构有助于提高灵活性,可填补供应缺口。

凭借 30 年来与汽车行业伙伴的合作经验,Arm 拥有多样化且可扩展的计算核心产品组合,从高性能中央计算到高能效终端 MCU,可满足各种汽车应用的需求。这就提供了一种通用架构,设计公司和开发者得益于各种汽车应用中所使用的可扩展硬件和软件,节省了工程时间和成本。展望新的 SDV,拥有这种通用架构将有助于实现软件开发和部署以及 OTA 更新。

功能安全

功能安全能够为汽车系统中的安全关键型应用提供支持,通过侦测和报告可能导致危险情况的故障,帮助降低对人和环境造成的风险。随着自动驾驶等新技术的出现,功能安全愈发重要,同时继续为确立已久的安全关键型需求提供支持。对功能安全的需求还扩展到了工业、航空航天和轨道交通等汽车以外的其他应用市场。

Cortex-M 系列可为嵌入式控制器的所有性能点提供安全功能,使 Arm 的合作伙伴能够开发可扩展的安全关键型系统。合作伙伴可借助 Cortex-M85[5]、Cortex-M55[6] 和 Cortex-M23[7] 自带的诸多功能安全特性,有效地实现安全方面的目标。

来自广泛软件生态系统的支持则为基于 Cortex-M CPU 的安全关键型开发提供了大量经安全认证的软件和工具。而 Arm 的合作伙伴以及更广泛的开发者社区可以轻松获取这些软件和工具。Arm 还为安全工具和软件提供原生支持,例如 Arm 的功能安全运行时系统 (FuSa RTS)[8]、软件测试库[9]和 Arm 嵌入式编译器[10]

3.png

信息安全

正如功能安全一样,市场对加强网络安全的需求也在与日俱增,以防范对乘用车构成严重威胁的恶意软件攻击。如今,黑客攻击已经造成严重的安全隐患,尤其随着汽车自动驾驶水平的提高,情况更是如此。在防止未经授权的信息访问方面,信息安全同样必不可少。Upstream 发布的《2022 年全球汽车网络安全报告》[11]指出,在 2020 年和 2021 年报告的安全事故中,有 87.7% 源于车辆数据和代码受到的威胁。

联网 SDV 遭到的攻击面有所增加,因此需要考虑整个车辆的信息安全,而不仅仅是高性能节点的信息安全。必须在汽车的整个生命周期内考虑对边缘 MCU 的保护,同时还需考虑汽车的其他部分,包括软件更新在内。

在处理器层面,这意味着要能够信任正在执行的代码,并具备信息安全以减少虚假软件攻击。Cortex-M CPU 被越来越多地用于在中央和区域计算架构中执行安全系统管理和启动管理服务。通过 Armv8-M 架构,TrustZone[12] 被引入整个 Cortex-M 系列中。Cortex-M23 和 Cortex-M33[13] 是率先支持由 TrustZone 提供的硬件强制分离及安全性的处理器。这可确保包括软件、CPU、互连、存储器和外围设备在内的整个系统的安全。

通过 Armv8.1-M 架构,处理器中还添加了更多增强型的信息安全功能。Cortex-M85 中包含指针身份验证代码 (PAC) 和分支目标识别 (BTI),有助于抵御返回导向和跳转导向的软件攻击。

4.png

Arm 生态系统

随着 SDV 继续在汽车行业发挥更加重要的作用,一级供应商、车厂和开发者正在设法优化软件开发时间和成本。Arm 架构迄今已完成逾 2,000 亿次部署,这一庞大规模促使工具、操作系统和软件库供应商在其产品中增加 Arm 支持,从而实现经济高效的软件开发。对于 Cortex-M 处理器,Arm 的生态系统合作伙伴可为 IDE、编译器、调试和追踪工具及软件提供广泛支持。Arm 还制定了通用微控制器软件接口标准 (CMSIS)[14],从而提供一致且标准化的软件构建块。基于上述这些,汽车开发者可以从众多选项中进行选择,以缩短上市时间并降低开发风险。

推动汽车行业发展

新型 SDV 的计算要求将促使汽车行业对于在车辆计算平台中部署大量 MCU 提出更加广泛且持续的需求,并要做到“所有控制器齐头并进”。Cortex-M CPU 所具备的高能效计算、可扩展性、功能安全和信息安全等功能将为 MCU 的广泛普及提供助力。除产品功能以外,Arm 还拥有全球最大的软件生态系统之一,可为实现无缝集成和出色开发体验提供更广泛的支持。基于 Cortex-M 的 MCU 有助于推动 SDV 等新型汽车的发展,这将使 Arm 成为汽车行业未来发展的重要基石。

备注:[1] - [14] 的来源可参见原文,欢迎点击阅读原文:https://www.arm.com/blogs/blueprint/cortex-m-automotive-microcontrollers

本文作者:Arm 汽车事业部产品管理总监 James Scobie

来源:Arm社区

免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 49

近日,在Renesas和RT-Thread工程师协作下,完成瑞萨Cortex-M内核RA产品家族MCU的RT-Thread BSP框架和制作教程发布,这意味着使用RA MCU(RA2系列、RA4系列、RA6系列)的开发者可以根据教程快速制作自己的BSP,使用RT-Thread丰富的组件和软件包进行产品应用开发,提高开发效率。

“瑞萨Cortex-M内核RA

RA MCU的RT-Thread BSP结合了瑞萨电子的灵活配置软件包(下文简称FSP)配置工具,FSP的图形化工具界面(RASC,RA智能配置器)可以让使用者可视化地选择所用的芯片,并配置选用任一引脚、外设,能减轻底层开发工作量,节约时间。

“瑞萨Cortex-M内核RA

RA MCU的RT-Thread BSP框架不仅大大提高了代码复用率,降低了BSP的维护成本,而且可以更方便地给开发者提供更丰富的驱动文件,让开发者可以更容易地找到自己需要的资源。其主要特性如下:

  • 使用FSP生成的RA模板工程,降低新BSP的添加难度

  • 通用的驱动文件,开发者可以方便地使用所有驱动

  • 使用FSP配置工具对芯片外设进行图形化配置

每一个BSP主要由两部分组成,分别是通用驱动库、特定开发板BSP,下面的表格是以CPK-RA6M4的BSP为例:

“瑞萨Cortex-M内核RA

RA MCU RT-Thread BSP制作教程请点击链接查看:https://github.com/RT-Thread/rt-thread/tree/master/bsp/renesas

“瑞萨Cortex-M内核RA

下面对RA MCU产品做简要介绍,以便开发者更好地了解RA产品家族MCU,并选择合适的型号使用。

RA产品家族MCU

Renesas Advanced(RA)32位MCU采用Arm® Cortex®-M33、Arm® Cortex®-M23和Arm® Cortex®-M4处理器内核,瑞萨 RA 产品家族单片机包括四个系列——已经发布的RA2系列,适用于低功耗应用;RA4系列,适用于需要低功耗、高性能和高安全性的设备;RA6系列,具有卓越的连接性能和安全性能。瑞萨还计划发布RA8系列。

关于瑞萨电子RA MCU产品线路图可参考如下:

“瑞萨Cortex-M内核RA

已经发布的RA2、RA4和RA6系列特色如下:

RA2系列

低功耗:基于Arm Cortex-M23内核,最高频率48MHz,拥有高达512KB的闪存和64KB的SRAM。电源电压范围为1.6V到5.5V。外设包括全速USB、CAN、24位∑-△模数转换器(ADC)、12位数模转换器(DAC)、电容式触摸感应以及安全功能。

RA4系列

高性能和出色的功耗:基于支持TrustZone的Arm Cortex-M33内核或Arm Cortex-M4F内核构建,最高频率100MHz。高达1MB的闪存和128KB的SRAM。电压范围为1.6V到5.5V。外设包括电容式触摸感应、段码式LCD控制器、全速USB、CAN、安全功能以及数据转换器和定时器。RA4W1系列器件还额外配备了Bluetooth®低功耗(BLE)5.0。

RA6系列

高性能:基于支持TrustZone的Arm Cortex-M33内核或Arm Cortex-M4F内核。最高频率240MHz。高达2MB的闪存和640KB的SRAM。电压范围为2.7V到3.6V。外设包括数据转换器、定时器、外部存储总线、以太网、全速和高速USB、CAN、安全功能、电容式触摸感应和用于TFT显示的图形LCD控制器,以及2D图形加速引擎。RA6Tx系列器件带有用于电机控制的增强型外设,如高分辨率PWM定时器或高级模拟模块。

来源:瑞萨MCU小百科
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 106

如果CPU没有中断,你能想象是什么情况吗?

就是一个while循环,且不能中断处理及时的任务,更别说有现在的RTOS了(RTOS也是需要中断才能实现)。

下面就来说说关于Cortex-M的中断,及FreeRTOS中断优先级配置原理。

1、关于Cortex-M3处理器

写本文之前,先写点相关的扩展内容,本文结合内核为Cortex-M3的STM32来讲述。

STM32属于ARM中Cortex-M系列处理器,比如:STM32F1数据Cortex-M3,STM32F7数据Cortex-M7。

“Cortex-M中断及FreeRTOS中断优先级配置原理"

本文主要结合Cortex-M3下面STM32F1系列处理器为例来讲述中断控制相关内容。而Cortex-M其它系列,或者说STM32其它系列关于中断的内容类似。

Cortex-M3只是STM32F1的一个内核。反过来说STM32F1是在Cortex-M3基础上增加了一些外设(如:USART、AD等)的芯片。

2、Cortex-M中断控制

NVIC:Nested Vectored Interrupt Controller,即嵌套向量中断控制器。

STM32中NVIC我们比较熟悉,编程的时候使用中断都会对NVIC进行配置。

而STM32F1中的NVIC是属于Cortex-M3中的一部分,而不是STM32增加的外设。

NVIC向量中断控制器是Cortex‐M3不可分离的一部分,它与 CM3 内核的逻辑紧密耦合,有一部分甚至水乳交融在一起。

所以,NVIC相关的寄存器位于Cortex-M手册中。讲述STM32的中断控制,还得从Cortex-M3的NVIC讲起,

1)中断输入向量表

Cortex-M3的NVIC支持1至240个中断输入,比如STM32中xxxIRQs,也就是中断向量表,具体的数值由芯片厂商在设计芯片时决定。

比如STM32F1的中断和异常向量表:

“Cortex-M中断及FreeRTOS中断优先级配置原理"

“Cortex-M中断及FreeRTOS中断优先级配置原理"

2)中断和异常区别

很多初学的朋友不知道什么是中断?什么是异常?甚至有人直接把中断和异常笼统称为“中断”。

中断和异常其实有差异,也有关联,我们常说的中断其实是包含了异常。异常可以理解为MCU,或者程序处于了某种异常状态。

这么区分吧,看上面向量表,上部分有灰色背景的为异常,下部分白色的为中断。

异常属于Cortex‐M3内核的一部分,而中断属于MCU(STM32)的一部分(由厂家决定)。

所以:

1.站在Cortex‐M3内核角度,像STM32中USART这类中断,属于外部中断。

2.站在STM32角度,EXTI外部引脚中断才属于中断。

3)优先级

对于Cortex-M3来说,每个外部中断都有一个对应的优先级寄存器。

每个寄存器占用8位,但是允许最少只使用最高3位,在STM32F1中使用了高4位。(也就是我们可以分16个优先级)

优先级可以被分为高低两个位段,分别是抢占优先级和亚(响应)优先级。

“Cortex-M中断及FreeRTOS中断优先级配置原理"

提示:

1.STM32中断优先级数值越小,优先级越大。

2.优先级分组:Cortex-M3,M4具有分组功能,即存在抢占优先级和响应优先级,如下图:

“Cortex-M中断及FreeRTOS中断优先级配置原理"

而有的内核就没有,如Cortex-M0就没有。

3.参考资料

可以参看《Cortex-M3权威指南》

STM32的内核编程手册:

http://www.st.com/stonline/products/literature/pm/15491.pdf

3、FreeRTOS中断优先级配置

本节内容讲述一下FreeRTOS最大中断优先级配置问题,也就是FreeRTOSConfig.h配置文件中的:

configMAX_SYSCALL_INTERRUPT_PRIORITY

“Cortex-M中断及FreeRTOS中断优先级配置原理"

你们知道配置数值的含义吗?这里就需要结合NVIC相关的内容来理解。

上面说了,在STM32中,使用了NVIC优先级的高4位,而我们配置时需要对高4位进行配置(低4位未使用)。

“Cortex-M中断及FreeRTOS中断优先级配置原理"

看上图,明白了吗,上面这个数值就是95,但代表的优先级为5。

这个配置数值的含义,大概意思是:你代码中使用的中断(比如USART1_IRQn)优先级需要大于5才可行。

如下面配置,优先级为2就不行(当然,有分组的还牵涉到分组问题)。

“Cortex-M中断及FreeRTOS中断优先级配置原理"

关于FreeRTOS最大优先级配置的内容可以参考:

https://www.freertos.org/RTOS-Cortex-M3-M4.html

最后再次提示:

FreeRTOS任务优先级是数值越大,优先级越高,需要和CM3中断优先级区分开来。

来源:嵌入式专栏
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。

围观 545

今天分享一点之前在调试代码过程中遇到的知识点:关于__get_CONTROL的用法,及xQueueSend和xQueueSendFromISR的区别;

1、问题来源

我之前在FreeRTOS系统上移植了部分别人写的代码,移植前仔细看了下源码,确认没问题后,编译,下载,运行,突然“死机了”······

于是,我又再次确认了移植的代码,没有发现Bug所在。此时,我开启了在线调试功能,发现程序死在了“vPortEnterCritical”函数中的断言语句里。如下:

“如何判断Cortex-M处理器正在执行中断函数?"

2、解决问题的过程

我解决问题还是按照常规思维,一步一步跟踪,很多问题其实都是类似道理,有规律可循。

1)查看configASSERT断言做了什么事?

跟踪代码:

#define configASSERT( x ) if( ( x ) == 0 ) { taskDISABLE_INTERRUPTS(); for( ;; ); }

其中,里面taskDISABLE_ INTERRUPTS();就是关中断的意思。紧跟着后面执行了for( ;; );

看到这里,我明白了一点,就是死在for( ;; );里面了。

2)进一步查找问题

我又开始了思考,为什么会执行到这里来呢? 为什么会执行:

portDISABLE_INTERRUPTS(); uxCriticalNesting++;   if( uxCriticalNesting == 1 )

这些语句呢?

这就是我们常说的“临界段”,这一点我学习RTOS的时候已经明白了,这一个函数肯定会被调用。于是,我把目标锁定了portNVIC_INT_CTRL_REG这个参数:

#define portNVIC_INT_CTRL_REG     ( * ( ( volatile uint32_t * ) 0xe000ed04 ) )

0xe000ed04? 这个地址,相信之前了解过NVIC的都知道,就是Interrupt control state register.即中断控制状态寄存器。

3)确定问题点

从上面的分析,其实问题都已经浮现出来了。于是查看了【Cortex-M3权威指南】中相关的内容。(PS:这本手册真的能解决很多问题,翻译成中文,对大部分朋友来说是一件好事)

其实,有这个一个寄存器:控制寄存器(CONTROL),里面讲述的非常清楚:

“如何判断Cortex-M处理器正在执行中断函数?"

看上图,大概意思就是:在中断模式下,CONTROL[1]为0。于是,又把思路转向了core_cm3.c文件中的源码:

__ASM uint32_t __get_CONTROL(void)
{
  mrs r0, control
  bx lr
}

懂一点汇编的,相信在这里都已经明白,大概意思就是过去控制寄存器状态,这也是我开篇说的,让大家了解的__get_CONTROL。

4)在线调试,分析结论

上面分析出来控制寄存器CONTROL,那么我们需要验证是否符合我们预期的效果,通过在线调试,断电就可得出,如下面两图:

a.在非中断情况下的值0x02

“如何判断Cortex-M处理器正在执行中断函数?"

b.在中断情况下的值0x00

“如何判断Cortex-M处理器正在执行中断函数?"

至此,问题已经查明就是CONTROL。

3、get_CONTROL的应用

一般在RTOS实时操作系统中,常常使用队列来处理我们的数据,也就是常说的FIFO(先入先出)。

比如:我们在FreeRTOS系统中,要将UART发送、或者接收的数据加入队列:在中断里加入队列,在非中断里加入队列。这个时候,就需要使用get_CONTROL来判断当前是否处于中断函数里。

当然,类似的情况很多,像CAN、I2C、SPI等一样的道理。

举例,CAN总线发送数据加入队列:

“如何判断Cortex-M处理器正在执行中断函数?"

以上就是今天的内容,希望对你有所帮助。

来源:嵌入式专栏
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:
cathy@eetrend.com)。

围观 257

单片机、Cortex-M、Linux它们和嵌入式有什么区别?

跑 Linux 操作系统需要什么处理器?ARM9、ARM11?

Cortex-M比ARM9更新,为什么不能跑Linux?

相信很多小伙伴都有类似这样的疑问,下面围绕Cortex-M、 ARM、 Linux来讲讲相关内容。

ARM和Cortex-M

ARM处理器的体系结构定义了指令集(ISA)和基于这一体系结构下处理器的模型。ARM的指令集从ARMv1发展到今天的ARMv9,每一次体系结构的修改都会添加实用技术。

“Cortex-M可以跑Linux操作系统吗?"

在ARMv6之前,其内核指令集架构都是单一款式,但在ARMv7开始,其指令集架构变成3种款式,即目前大家熟知的Cotex-M、 Cotex-R、 Cotex-A,或者ARMv7-A、ARMv7-R、 ARMv7-M这三款。

  • Cotex-M:主要指微处理器;

  • Cotex-R:主要指实时性处理器;

  • Cotex-A:主要指应用型处理器;

值得注意的是,Cortex-M下的处理器没有内存管理单元MMU。

内存管理单元MMU

MMU:Memory Management Unit,内存管理单元。

内存管理单元主要负责从虚拟地址到物理地址的映射,并在硬件层对内存访问权限的检查。

在Linux等多用户、多进程的操作系统中,MMU使得各个用户进程都有独立的地址空间,以防止内存越界。

“图2
图2 MMU的地位

MCU都有一个地址集和,被称为虚拟地址范围。以Cortex-M 32为机为例,虚拟地址范围为0 ~ 0xFFFFFFFF (4G地址空间)。

当该控制器寻址一个256M的内存时,它的可用地址范围被限定为0 ~ 0x0FFFFFFF(256M)。

1.在没有内存管理的处理器中,虚拟地址被直接发送到内存总线上,以读写该地址下的物理存储器。

这里拓展阅读:无MMU抢占式操作系统的抢占工作原理

2.在有内存管理的控制器中,虚拟地址首先被发送到MMU中,被映射为物理地址后再发送到内存总线上。

“图3
图3 内存管理机制

注:上图仅简单反映内存管理的映射机制,其他暂不做讨论。

MMU虚拟内存管理最主要的作用是让每个进程有独立的地址空间。

不同进程中的同一个虚拟地址被MMU映射到不同的物理地址,并且在某一个进程中访问任何地址都不可能访问到另外一个进程的数据,这样使得任何一个进程由于执行错误指令或恶意代码导致的非法内存访问都不会意外改写其它进程的数据,不会影响其它进程的运行,从而保证整个系统的稳定性。

另一方面,每个进程都认为自己独占整个虚拟地址空间,这样链接器和加载器的实现会比较容易,不必考虑各进程的地址范围是否冲突。

Liunx操作系统

操作系统通常分为实时操作系统和非实时操作系统。

1.实时操作系统大多为单进程、多线程(多任务),因此不涉及到线程间的地址空间分配,不需要使用MMU,例如ucos、 FreeRTOS、 RT-Thread等。

2.Linux系统属于非实时性操作体统,多进程是其主要特点,可以参考文章:Linux是实时系统还是分时操作系统?

以Ubuntu为例,打开一个shell并且查看bash进程的地址范围如图4,它的地址范围为0x0000000000400000~0xffffffffff600000。

“图4
图4 shell 1中的bash地址

我们打开另一个shell,查看该shell中bash进程的地址范围,如图5。不难发现,两个不同bash进程的地址范围完全相同。其实操作系统或者用户在fork()进程时完全不需要考虑物理内存的地址分配,该工作由微控制器的内存管理单元MMU来做。

“
图5 shell 2中的bash地址

既然是多进程依赖了内存管理单元,那么在使用嵌入式Linux时只开一个进程可以吗?肯定是不可行的!开机后即使用户什么都不做,可见的系统运行必须的进程已经运行了几十至上百个,如图6。

“图6
图6 进程树

总结

通过上述描述我们可以知道,Linux操作系统对MMU(内存管理单元)有极强的依赖,若在没有内存管理单元的CPU中运行Linux,恐怕整个系统只能停留在Uboot阶段了。

由于ARM的Cortex-M处理器没有内存管理单元,,一般来说不建议跑Linux操作系统。

当然,任何事情都不是绝对的,如果你重写了Linux内核且搭配足够大的内存芯片,从理论上来说是可以省掉MMU的。

但是,这样的工作量,真的值得吗?实际上,MMU就是为了解决操作系统越来越复杂的内存管理而产生的。

来源:致远电子,StrongerHuang
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:
cathy@eetrend.com)。

围观 408

导读:

调试嵌入式软件是我最不喜欢的行为,不幸地是,它却是必要的。值得庆幸地是,技术和工具链创新的进步衍生出大量的新技术,从而大大地加快了调试过程。下面让我们来看看其中一些方法,从传统的断点调试出发到更先进的仪器跟踪技术。

技巧5:使用指令追踪技术(ETM / ETB / ETM)

有时开发人员面临的调试问题,只是在处理器中所能想象到的最低层面的问题。跟踪技术的存在,可以监视处理器执行的单个指令。在测试和验证软件时这种低水平跟踪对于监测分支覆盖非常有用。用于指令跟踪的调试工具不同于那些开发人员使用的串行线查看,而且成本略高。

技巧4:RTOS跟踪

试图透过表像看清一个实时操作系统中(RTOS)的本质可以说是相当具有挑战性。开发者并不想扰乱实时系统的性能,但仍然需要一些方法来了解系统的行为。这也是Blinky LED经常使用的把戏,但最近开发者的工具箱中增加了更多惊人的跟踪工具。例如免费的商用RTOS工具,如TraceX、SystemView和tracealyzer等等。

当RTOS闲置,或是有任务进入和退出时,跟踪工具允许开发者进行追踪分析。开发人员可以监控系统的异常,响应时间,执行时间,以及正确开发一个嵌入式系统所需的许多其他关键细节。RTOS跟踪工具最酷的功能是它们能够展示系统内部发生了什么。实时地或是在日志文件中进行审查和时序图监视,能够让开发者确定一个置信水平,用以估量系统是否能够按预期正常运行,或者帮助他们发现一些小问题,否则将花费大量的时间去寻找。

技巧3:IDE值图

如今,几乎所有的现代调试器和IDE都允许开发者监视存储在内存中的变量值。开发人员可以选择内存位置以及值刷新率,然后启动调试会话。一些IDE自身就有能力监视内置到IDE的值,而另外一些IDE则需要依靠外部软件。

值监测非常有用,如果将监测到的数据与图形化表示关联到一起,其带来的价值则更大。对实时的数据绘制值图对于发现意想不到的变化和验证特定波形的生成极其有用。例如,一个三相无刷直流电机(BLDC motor)。开发人员如果想要监测每个电机支架的电流和电压,则需要驱动电机所形成的非常具体的波形。绘制每个电机支架电流和电压能够让开发人员实时看到发生的事情。

技巧2:传统的断点调试

每个开发人员都熟悉传统的调试技术,设置断点、执行代码,然后单步调试代码进行监视,同时监视寄存器和变量值。断点调试是我看到的使用最多的技术。然而,结果却不甚乐观,因为断点调试的效率较低,通常会产生次优的结果。

既然如此,为什么大家还如此频繁地使用断点调试呢?主要原因似乎是断点调试便于使用,易于理解,并且开发人员都乐观地认为,对于工作而言,断点是正确的工具。这种乐观需要校验。断点有可能破坏系统的实时性能,同时会将开发者吸进一个黑洞,使其无休止地去单步执行代码,盲目地寻找问题的一种解决方法。

技巧1:从printf到SWOIDE值图

在高端的ARM Cortex-M系列配件中,如M3/M4,它为开发人员提供了额外的调试能力,即串行线查看器(Serial Wire Viewer,SWV)。SWV还包括除串行线输出(SWO)以外的标准串行线调试。SWO可以用来做很酷的东西,如程序检索计数器,事件计数器,及数据追踪等。开发者还可以对它们进行自定义,设置自己想要在SWO中传送的信息。

许多开发者为了从他们的嵌入式系统中获取调试信息通常会设置printf。实际上则并不是在单片机中使用串口引脚,而是开发人员可以使用SWO通过调试器重新路由printf信息。以这种方式使用调试器可以保存专用串行接口的需要,同时消除了开发UART和USB设备的时间,效率更高。现在通过SWO和调试硬件将最初被应用程序所使用的开销卸去,缩减了那些有可能被应用程序代码使用的宝贵的时钟周期。

结语

调试工具和技术在过去几年里迅速发展,特别是高端微控制器。一般来讲,工程师都是视觉型生物,工具供应商正在寻找方法以刺激视觉的方式来揭示一个实时系统究竟发生什么。配置调试工具可能需要做一些前期工作,但是在设计上多花一点时间可以换来更少的调试时间,确实是一笔非常值得的时间投资。开发人员至少应该熟悉不同的调试工具和可用的功能,以便在出现问题,系统需要调试时,他们可以选择合适的工具完成任务。你有用过其它可以帮助工程师更快、更有效率地调试他们系统的技术么?

免责声明:本文系网络转载,版权归原作者所有。

围观 37

中国深圳2020年11月4日讯:

灵动微电子在慕尼黑华南电子展宣布正式启用四位数字命名规则来命名全新的MCU系列,并推出基于32位Arm Cortex-M的入门级MCU MM32F0010系列。这是一款适用于8位/16位单片机升级、支持工业级(-40℃ ~ 85℃)和扩展工业级(-40℃ ~ 105℃)温度规格的MCU;面向节点控制、无线充电、电机控制、智能玩具、照明电源、应急消防等领域。

MM32F0010在性能、功耗和外设配置方面具有显著的特点,其中包括:

  • 提供高达48MHz的CPU运行频率,在国产小封装Cortex-M0 MCU中处于领先地位
  • 2.0 – 5.5V 宽压设计,适用于各种电源供电的应用场合
  • 在20pin封装产品上,支持多达18个GPIO,为用户提供充分可用引脚资源
  • 内置死区控制定时器的小封装产品,满足中高性能入门级电机应用需要


产品供货情况和支持

MM32F0010提供TSSOP20和QFN20两种封装形式,以及可选的工业级和扩展工业级型号。随芯片同时发布MM32F0010的官方开发套件:eMiniBoard MB-032。主流开发设计工具和编程器厂家也已实现对MM32F0010的支持。

MM32F0010芯片已批量供货。有关芯片购买事宜,请洽灵动微电子的官方代理商和方案设计公司。

更多详细信息,请访问 www.mm32mcu.com

关于灵动

灵动微电子成立于2011年,是中国本土领先的通用32位MCU产品及解决方案供应商。公司基于Arm Cortex-M系列内核开发的MM32 MCU产品拥有F/L/SPIN/W/P五大系列,200多个型号,累计交付近亿颗,在本土通用32位MCU公司中位居前列。MM32 MCU被广泛应用于汽车电子、工业、电机、家电、医疗、消费玩具、手机平板周边、显示及交互等领域,每年都有数千万件配备了灵动微电子MM32 MCU的优秀产品交付到客户手中。

迄今为止,灵动微电子是同时获得了Arm-KEIL、IAR、SEGGER国际权威组织官方支持的本土MCU公司,是为数不多的建立了独立、完善的生态体系的通用MCU公司,可以为客户提供从优异芯片产品到核心算法、从完备参考设计方案到整机开发的全方位支持,真正为中国电子信息产业提供底层技术驱动和支持。

来源:灵动MM32MCU(微信号:MindMotion-MMCU)

围观 124

页面

订阅 RSS - Cortex-M