毫无疑问,ARM Cortex-M7 - 拥有强大的内存和处理能力 –以即使在几年前都难以想象的方式扩展了微控制器的功能。该处理器被定位成为物联网(IOT)的核心构建模块的事实,更是夺人眼目。
本文引用地址:http://www.eepw.com.cn/article/264892.htm
事实上,意法半导体的STM32 F7系列在9月的ARM科技论坛上荣获了最佳表现奖。这是第一款采用ARM的Cortex-M7内核的32位MCU家族,拥有320KB SRAM和1024KB闪存。爱特梅尔采用Cortex-M7内核的处理器还没有公布,预计将有384KB SRAM和2MB闪存,这种内存规格高出典型的MCU 10倍以上。
但是,Cortex-M7是否拥有“完成任务”所需的必要资源基本上还是要取决于开发者。本质上:今天的嵌入式开发人员,有时是在似乎几乎不受约束的设计空间上,绞尽脑汁地在硬件、软件和系统设计上做出如毛线团似的大量繁杂的决定和取舍。
“对于来自Windows,Linux,iOS,Web服务编程和商用逻辑编程领域的开发人员,Cortex-M7有太多限制和性能上的扼杀。但是,对于曾在8051等任何8位微处理器上,或Cortex-M0到M3上的开发者而言,他们眼中的Cortex-M7资源丰富、性能强大。” Matt Liberty说。他是Jetperch LLC的创始人,该公司提供DSP和嵌入式软件咨询服务。
一个实时I / O处理的强者
“这是一个实时I/ O处理的强者。事实上,像很多在8位单片机上编写的小型嵌入式程序那样不带操作系统裸机运行在目标硬件上的循环程序,它们高效、简单易懂且易于调试,可能很难使用这么多的性能配置和存储器。”
Liberty强调,在物联网的应用场景中,为了更有效地管理复杂的网络和多个外围设备,采用一个实时操作系统(RTOS)变得非常关键。但是,过去几年来,随着开发社区努力寻找更佳的方案,RTOS的数量也在激增,现在,选择“最好”的RTOS已经成为开发人员的一大挑战。
“快速浏览维基百科的“实时操作系统列表”就足以让嵌入式软件工程师头大”,Liberty强调。 “虽然C和C ++仍然司空见惯,但在考虑多线程、安全性以及可靠性时,这两种语言都显得捉襟见肘。D和Rust语言具有填补这些空白的潜力,但它们今天都没有做好用于嵌入式应用的准备。”
Frank Hunleth,一名专注于视频处理和嵌入式Linux开发的嵌入式软件开发人员,他也认为,实时操作系统行业需要证明在这些平台上使用高级语言的可能性,并帮助定义它们的库。
“我敢肯定,如果明年我在一个项目上使用M7,我还是会使用C或C ++,因为它们有大部分工具和库的广泛支持,”他说。 “我希望这种情形保持下去吗?不是的,因为如果这样,我们将错失可以从Rust语言得到的静态检查内存安全,从Python语言得到的易开发特性,和来自Erlang和Elixir的容错性和并发性。”
内存有点小
其他人觉得,对物联网而言,即使有旨在最大限度地利用M7内存的功能特性,M7的内存依然稍显不足。一个例子是ST针对内部嵌入式闪存和L1高速缓存的自适应实时加速器,它可以从内部和外部存储器同时执行指令和访问数据。
“对一个微控制器而言,这是一个很大的内存和存储空间。但是,哪怕是最小的Java虚拟机[即解释Java字节码,使处理器执行程序指令的环境]至少也需要2MB才能运行起来,一时半会我们还不太可能会看到Java或任何其他基于虚拟机的平台上运行在这些小的CPU内核上。” PTR集团的首席技术官和首席科学家Michael Anderson说。“如果你增加一个通信协议栈和一个可执行程序或诸如ARM的mbed、Micrium的μC/ OS-III或FreeRTOS之类的实时操作系统,你的程序空间会显得非常小。”
Anderson强调,内存使用率是很多这些物联网新应用的命脉。“内存是宝贵的。类库内部封装的API会吃掉内存,尽管它在通用计算机上表现良好。这些年,在计算机行业,我们的代码只有少数存在不知情内存膨胀的案例。如果我们不认真思考正在进行的开发任务,并继续以我们在大容量内存环境下已经习惯的方式编写代码,我们就永远无法使用这些小内存的微控制器进行物联网应用开发,并发掘出其令人惊艳的可能性。”