过去数年,关于单内核平台标准化的讨论不计其数,目的是让设计从一家MCU供货商的产品移植到另一家的产品变得容易。有趣的是,所有讨论均从未涉及外设。然而,外设恰恰就是将应用从一家MCU供货商移植至另一家的真正核心。
一切归于外设
工程师在着手新设计之前,通常会先审视一下功能需求。希望系统做什么?用户怎样与之交互? 诸如此类的一些问题。据此决定要采用什么电路以及控制这些电路所需的MCU片内外设。例如,工业级的HMI(人机界面)设备将需要支持LCD、按钮和/或触摸屏,与机器的通信、LED,以及扬声器/蜂鸣器等。所有这些功能将需要MCU上的某些外设,如:CAN控制器用于通信、ADC用于触摸屏及PWM定时器用于蜂鸣器等。外设具有的功能越多,所需的外部电路就越少。在某些情况下,还会减少需要编写的代码量。例如,使用特殊的蜂鸣器模式比为达到同样目的而不得不设置PWM要简单得多。
内核需求通常是显而易见的。虽然内核很重要,但对于设计人员来说,关系不大。事实上,内核必须满足两个基本条件。速度是否足以执行创建最佳用户体检所需的所有软件任务? 是否能高效执行所有任务?只要满足这两点性能要求, 内核的类型无关紧要。
当然,内核还与固件/软件相关。既有代码是工程师必须考虑的一个问题。使用现成代码能节省多少工作量?这个问题并非与内核直接相关,而与外设有关。因为大多数32位MCU代码用C语言编写,因此可重新编译至任何内核。每家 MCU生产商的外设特性及编程模型均特定于其自家的产品,而与所采用的内核无关,这便是代码难以移植的原因所在。
固件库
为了给工程师提供便利,每家MCU生产商均提供一个固件库,其中包含设置和使用各种MCU片内外设的代码。由于不同厂家实现其外设的方式各不相同,甚至具有不同的特性,将应用程序从一种MCU移植至另一种MCU并非轻而易举。
ARM一直以来都在为简化应用程序的移植努力着,它定义了一种称为Cortex™单片机软件接口标准(CMSIS)的固件抽象层标准。采用Cortex-M系列内核的MCU生产商的固件库均已采纳了这一标准。遗憾的是,这个标准仍不能克服移植外设遇到的困难,对于变量或函数也未制定标准的命名约定。因此,将代码从一种固件库移植到另一种固件库没有捷径,必须做大量工作。事实上,对于在ARM MCU供货商之间移植应用程序,该标准几乎没有什么帮助。毕竟,对于MCU生产商来说,将应用程序轻而易举移植到其他供应商的产品一点好处也没有。
设计时考虑可移植性
由于MCU生产商不愿简化其产品到其他供应商产品的可移植性,因此只能由设计工程师来使设计具有可移植性。通过实现一个抽象层,由该层创建硬件(即MCU外设)和应用程序代码之间的标准编程接口即可实现这一点。至少可用以下两种方法:
开发一个中介层或包装器,从而实现在MCU生产商外设库和您的代码之间转换。这可能是最快速高效的解决方案,但会在命令和数据路径中添加较多代码。
定义一个标准的函数和变量命名机制,并将其应用于所有外设库。不必添加代码,但却很费时,具体取决于外设用法的复杂度。
实现移植性是个大工程,贯穿开发过程的始终。除了固件/软件兼容性,还有引脚兼容的问题。将应用从一个MCU供应商的产品移植到另一个往往要重新布置PCB,而且可能还需要不同的外部器件,比如电容和稳压器。
总结
无论使用何种内核,在32位MCU供应商的产品间移植均相当复杂。一切都取决于外设和相关的固件库。每家MCU生产商均提供固件库和应用笔记,尽力使设计过程尽可能地简单。他们也将努力减轻其器件在其系列间移植的工作。但是他们却不愿意使移植到竞争对手的解决方案变得过于容易。这是设计工程师要解决的问题,应该在每个项目开始时评估这样做的成本和好处。
审核编辑:彭菁
-
电路
+关注
关注
172文章
5849浏览量
171909 -
mcu
+关注
关注
146文章
16992浏览量
350310 -
控制器
+关注
关注
112文章
16203浏览量
177404 -
代码
+关注
关注
30文章
4748浏览量
68353
发布评论请先 登录
相关推荐
评论