关于自动生成的代码支持的硬件平台介绍

描述

自动生成的代码支持哪些硬件平台?前面我们提到了Target Support Package,今天我们再来看看另外两处引发这个问题的地方。

M配置参数中的硬件实施

硬件实施(Hardware Implementation)设置里给出了代码生成支持的各种处理器,如下图所示,我们可以选择Freescale的MPC 55xx系列的单片机,也可以选择Infineon的TriCore等等,从这个列表来看,基本上涵盖了我们平时可以接触到的大多数单片机。

处理器

不过,产品开发过程中,不少公司会跟半导体公司同步,使用半导体公司开发过程中的最新单片机,也有的时候,我们在使用一些比较小众的单片机,这样一来,这个列表就可能难以做到面面俱到。所以就有用户做翻遍了这个列表依然没有找到自己使用的芯片之后,会跟我们抱怨代码生成不支持他们使用的单片机。

我们来仔细看一下这个列表,在我们选中一款处理器之后Device details下面都有哪些内容,首先是Number of bits,这里给出了各种数据类型对应的字长,比如char,short,float,double,pointer等,不同的单片机这些数据可能是不同的,比如,对于C语言中的数据类型char,多数情况下都会定义为8个位,而TI的C2000系列的MCU却把char定义为16个位。long就更是多种多样了,有的处理器里被定义为32bits,也有的被定义为64bits,TI的C6000 DSP里long是40bits。代码生成之后,在rtwtypes.h文件里会有这些基本数据类型的定义。如下所示:

typedef signed char int8_T;

typedef unsigned charuint8_T;

typedef shortint16_T;

typedef unsigned shortuint16_T;

typedef intint32_T;

typedef unsigned intuint32_T;

typedef floatreal32_T;

typedef doublereal64_T;

Largest atomic size,最大原子尺寸,定义了整型的最大原子尺寸,同时也给出是否支持浮点类型以及单精度、双精度浮点的选项。

还有一些,类似于字节顺序之类的选项,用以选择Little Endian还是Big Endian。

如果能从上述列表中找到我们正在使用的处理器,在代码生成之前有必要将这个选项设置成跟我们一致的处理器。如果这个列表中找不到呢?是否就意味着代码生成不支持你们的处理器呢?

答案是否定的,我们可以注意一下,在Device vendor下拉菜单的最下面可以找到Custom Processor选项,我们已经知道,针对不同的处理器,在生成的代码里,有必要做出区分的也就是各种类型的字长、是否支持浮点等设置,既然如此,对于列表中不存在的处理器,只需要在选中Custom Processor之后做一些相关设置即可。

如下图,在选择了Custom Processor之后,前面我们提到的各种信息都变成可编辑状态。

通过人为设置这些选项,可以满足那些列表中不存在的处理器的要求,所以从这个意义上来讲,代码生成工具支持所有处理器,即便是在现有列表里找不到的处理器,也可以通过自己定制的方式定制字长等信息,实现对这款处理器的支持。

处理器

M配置参数中的代码替换选项

在配置参数里,还有一个可能引起用户困惑的地方,那就是代码替换选项(Code Replacement)。在有些版本的MATLAB里面,配置参数:

Configuration Parameters > Code Generation > Interface > Code replacement library

选项里,也列出了不少处理器,下图是来自于MATLAB R2016b的选项。

这里我们看到了一些ARM处理器,TI的某些处理器等等:

处理器

这个选项的目的是为了实现代码优化,比如,通常我们做除法运算都是通过除法运算符“/”实现,x/y实现x除以y的运算,而有的半导体厂商可能通过专门的除法运算接口,比如divide(x, y),通过这个接口运算,编译之后的代码在速度上可能会比x/y更快。

半导体公司如果提供类似一些指令级的优化,通常可以通过代码替换的方式实现,以刚才提到的除法运算为例,如果半导体公司对某些运算做了优化,并封装成库文件的形式,在代码生成之后,生成的代码里就没有“/”实现的除法运算,而是通过divide()实现。

除了半导体公司可能提供这类优化之外,用户也可以自己做类似的优化,对于一些运算量很大的运算,我们经常使用查表的方式实现,比如,算法中有sine运算,但速度可能难以满足我们的要求,在工程上,我们通常使用查表的方式实现sine运算,我们也可以通过制作代码替换库,并让算法代码中不出现标准数学库里的sin()运算,而是my_sine()等自己定义的由查表实现的运算。

当然,如果我们对速度没有要求,我们可以无视这个代码替换选项。

不管替换与否,我们不难看出:

从这个层面上,代码生成工具也是支持所有处理器的。

很多人关心生成的代码是否支持某某处理器的疑问,基本上是来自于上述三个原因吧。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分