![5494d4dd4f293ba851d70e3978fee500.png](https://i-blog.csdnimg.cn/blog_migrate/1f4fbeff2e4ea7a5f097a6eaee3c3a95.jpeg)
![28bf31d2e322bf775b4f9b276ffdd457.png](https://i-blog.csdnimg.cn/blog_migrate/26de8c635610bffa58d4b9e3da8de65e.jpeg)
![0801e7ebfe5f061d4f0fb965f931ff0b.png](https://i-blog.csdnimg.cn/blog_migrate/8f239b2a510ddf8423b4f4150b1fc5f0.jpeg)
本文主要参照书《SIMULINK仿真与代码生成技术入门到精通》
MATLAB®Coder™从MATLAB代码生成可读和可移植的C和C ++代码。 它支持大多数MATLAB语言和广泛的工具箱。可以将生成的代码集成到项目中作为源代码,静态库或动态库。还可以使用MATLAB环境中生成的代码,以加快MATLAB代码计算密集型部分。
命令窗口输入“coder”,会弹出图1界面:
![05737df77ec650b391f994b8503b7fec.png](https://i-blog.csdnimg.cn/blog_migrate/463051bed823e297108bfc0a88631415.png)
点击图1中红色方框可以加载.M文件,但是只能加载函数类文件,即文件中要有明确的输入输出,若一个文件中包含另一个文件,则要将其文档也一起加载。
加载完毕后点击右下角的 “NEXT”,进行下一步操作。
若在给出方程的一种引用方式,如图2中的Quater_to_Euler([1;0;0;0]),之后点击 “ Autodefine Input Types”,则系统可自动定义其为4*1的double矩阵。
同样也可以手动定义。点击图3中的红色方框,可以设置函数输入变量的类型。变量类型满足C语言的全部要求,也可以设置为矩阵形式,可以设置为结构体,结构体声明中可以直接输入结构体名字及变量名字。具体信息可详见蓝色的“learn more”。定义前最好知道函数输入的维数,若定义为不定维数的矩阵,影响其执行效率,增多代码数量。
![6b904df1f48d60b467a409718a618e5a.png](https://i-blog.csdnimg.cn/blog_migrate/9a42d49a4d7b0747e1dfd09ea225c508.png)
![5ef5ce5dea3053abffbd8d89863f14c0.png](https://i-blog.csdnimg.cn/blog_migrate/2e18b65180b1b53d288a6536519b324c.png)
设计输出后点击右下角的“NEXT”,进行下一步操作。
![b3e4bc1a4869237e1f66f79d8633af0f.png](https://i-blog.csdnimg.cn/blog_migrate/6b84f4920fb93e11718a6a9ba8dd4c19.png)
本步为源程序检测,给出函数的数值输入就可以在对话框显示出具体结果,点击图4中的“ Check For Issues”可以检测程序是否有错误不可以生成C文件,若有错误则根据提示进行修改。若无错误则会弹出图5的界面。界面下方弹出的是计算结果,程序界面显示的为调用次数。
![7dd9be68c1477fa52a379e616c86eaac.png](https://i-blog.csdnimg.cn/blog_migrate/4703f347a74ca44ab4407969357ae8a6.jpeg)
M语言转化成C语言要在使用前声明变量,在上图中已经将pitch等变量声明为结构体形式,若按照M语言的矩阵声明格式,则会报错(如图6),若先将矩阵定义为m*n的零矩阵,则可避免错误
![33ba99c76d960c838e6a8c00b7c7b5a4.png](https://i-blog.csdnimg.cn/blog_migrate/398184c2b2254bc046395cafdb3acb66.jpeg)
设计输出后点击右下角的“NEXT”,进行下一步操作
![49cc71ece012c17e37fea4281cf0ba8a.png](https://i-blog.csdnimg.cn/blog_migrate/89ecc5e81e0dd81d65ddb25cd45c6ee2.png)
点击其中的”Build type“,其中有以下几种类型可选,通常我们 选择第一项。
![cac770e5eb0a13c1c7fd4e80dd3174c9.png](https://i-blog.csdnimg.cn/blog_migrate/5e466ee0492d40104efafb92074b9130.png)
其中的”Hardware Board“选项点击后可根据实际硬件需求来选择。举例如图8:
![b06232de5faa241f4c83a6d09b7f0866.png](https://i-blog.csdnimg.cn/blog_migrate/ce46ef3698b530772f867057179fcd1f.png)
点击图中的”more settings“,可进入代码生成选项窗口。
![7e1d8b8622afb4b08711717a74f16700.png](https://i-blog.csdnimg.cn/blog_migrate/16be44be0528c99c16eb2a41cbcd4bd5.jpeg)
选项”Paths“是选择代码生成的位置
如图10中,第二选项”Speed”则包含数据溢出等保护函数,建议不勾选。
![5f28dcd8e8565470c9c9174f3e7cf007.png](https://i-blog.csdnimg.cn/blog_migrate/3925ac4bb5938c72efff1cdca4a295c4.png)
图11中, 其中”Memory“选项与处理器的能力相关,其中第一个选项框与不定长的数组有关,嵌入式开发最好不选,第二个选项则与处理器的堆栈有关,要根据处理器的堆栈大小来设置。
![7a7ae301cb352cec06950649d1ca8916.png](https://i-blog.csdnimg.cn/blog_migrate/55e570e67d2385cb290953e8701ed6a0.png)
图12中,选项“Code Appearance”与代码生成的风格有关,其中的“comments”部分建议勾选”MATLAB source code as comments“,方便代码的可读性。其他保持默认设置。
![7251a5df48fe96ac83ba07dd95f63e54.png](https://i-blog.csdnimg.cn/blog_migrate/b52f0880cb30732d6974c9624e104c6b.png)
图13中,在”Custom Code“的设置中,“Standard math library” 其中的选择C89/C90,在“Code replace library”中可以选择ARM Cortex-M3,实际上我们用的STM32F7系列的内核已经为ARM Cortex-M7,但是并没有此选项。
![e0839ec943a917ae2e941689d3c2f268.png](https://i-blog.csdnimg.cn/blog_migrate/a0490d82029dbe2bcac107318a6d7a5c.png)
最后设置完成后,点击“GENERATE”,无错误成功后为如下界面,其中的主函数为测试函数,并不执行具体的计算,其中的 initialize 函数为参数初始化函数,为空函数,可以自行添加相关初始化程序。
![303c5d9e6fccf5d946ad4707197ed1eb.png](https://i-blog.csdnimg.cn/blog_migrate/f836f0045cf4c744b946ee7cf1857feb.jpeg)
欢迎指正讨论,转载请注明,认同请点赞。