如果变量类型设置错误,在转C时,会出现以下报错:
Error using XX_mex (line 0)
Incorrect class for expression 'studentHeight': expected 'single' but found 'double'.
或者报这个错:
This assignment writes a 'double' value into a 'single' type. Code generation does not support changing types through assignment. Check preceding assignments or input type specifications for type mismatches.
意思是说,你期望把studentHeight这个变量在C语言中转成float,但是matlab源代码中studentHeight的类型却是double,这是不允许的。
解决方案也很简单,直接把报错的变量的类型在matlab中就定义为float即可,例如:studentHeight = single([1.72 1.80]);其余解决方案,详见下文。
一、同时把多个matlab函数转成C语言函数
要实现这一功能,那么我们要把所有想转的matlab函数,都写成一个独立的文件。然后如下图所示:点击添加新的函数->并选择函数文件.m即可。
二、转成的C语言浮点变量为double还是float?
常用的设置有两种:1、和matlab源代码中变量的类型保持一致,2、全部都用float。细节如下图所示:
1、上图中,如果设置成none,那么转成的C代码中的变量类型,会和matlab源代码中的变量类型保持一致,matlab中变量的类型可以在工作区查看,如下图:
附:如何在matlab代码中设置变量类型?
答:在matlab中,变量的默认类型一般是double(除了某些内置函数的返回值,可能是整形或者bool等),手动设置类型,可以这么写:
a=[1 2 3 4];%a为double类型
b=single([1 2 3 4]);%b为float类型
2、设置转C语言的变量全部为float
这种设置时,matlab中的double变量转成C语言时,会被自动改成float,这对于ram紧张的嵌入式设备,非常有用。
三、修改m文件后,重新生成C代码的步骤
修改m文件后,很有可能m文件的函数的形参的尺寸会发生变化,因此,建议按以下步骤进行:
1、先重新自动检测一下变量类型(其实是类型及其尺寸)
2、清除之前的生成,再check
3、genreate