当前位置:文档之家› MatlabCoder生成C代码的研究与应用

MatlabCoder生成C代码的研究与应用


一幅为 Matlab 代码运行效果,右边一副为生成的 C 代码在 ARM9 上运行效果。
图 2 Matlab Coder 工作流程图 表 1 Matlab Coder 支持的内容
矩阵和数组
类和数据类型
编程结构
Байду номын сангаас函数
矩阵运算 N 维数组 下标操作
帧 持续变量 全局变量
复数 整形数据匹配 单精度双精度
定点运算 字符
结构体 数值类 变长度数据 系统对象
数学运算 逻辑关系操作符 程序控制语句( if,for,while,switch) 和结构
0引言
目前,嵌入式系统的应用逐渐渗透到各行各业的 电子产品中,因此市场对电子产品软件开发的需求呈 现快速增长的趋势,软件开发面临着高速、高效的挑 战。针对这一现状,嵌入式开发的工程师们一直致力 于寻求更加高效的软件开发手段。MathWorks 公司 拥有的 Matlab 是一款高效软件开发工具[1],在它的 产品族中,Simulink Coder[2]、Matlab Coder[3]可以直接 将 Simulink 的模型框图和 Matlab 函数转换成高效优 化的 C 程序代码[4]。这两种 C 代码生产工具各具特 色: Simulink Coder 直接建立 Simulink 模型再转换成 C 代码; Matlab Coder 工具是 MathWorks 公司在 2011 年推出的 Matlab2011a 版本中推陈出新的产品,它可 以将 Matlab 函数直接生成 C 代码。Matlab Coder 的
子函数和部分 Matlab 函数 可变长度参数列表 函数处理 支持的算法:
400 个 Matlab 运算符和函数 200 个系统对象( 通信系统、DSP 系统、计算机视觉)
1. 2 测试阶段
MEX 功能函数验证 C 代码工作过程如图 3 所示。 Step1 在 Matlab 函数的第一行结尾加入关键词 “% #Codegen”,它告诉 Matlab 正在使用的函数是用 于代码生成,需要使用 Matlab Coder 工具。当代码生 成中产生错误时,Matlab Coder 会生成一个错误报告,
由 Matlab Coder 生成的嵌入式 C 语言代码,在结
图 8 ARM 板运行的 Sobel 得到的边缘检测图
生成的代码文件不能直接调用到 Linux 环境下 去编译,还需要做一些处理: ( 1) main 主程序需要手
178
计算机与现代化
2013 年第 3 期
工编写; ( 2) 数据结构最好编写成自己熟悉的结构和 定义[14]; ( 3) 去除一些不必要的冗余代码文件。
优越性在于不需要先建立模型。借助 Matlab Coder, 软件工程师不需要将设计的算法进行 C 编程,而是 利用 Matlab 中强大的函数库,建立 Matlab 函数,通过 设置目标语言需要的参数,生成能脱离 Matlab 环境 独立运行的 C 代码,这样大大减轻了软件工程师的 编码工作量。工程师们只需要在嵌入式系统中搭建 好软件环境,通过函数调用 Matlab Coder 生成的 C 代 码,由 Linux 嵌入式交叉编译工具编译,就能直接到 目标机 ARM 上运行程序,大大缩短了软件产品的研 发周期。
2013 年第 3 期 文章编号: 1006-2475( 2013) 03-0175-04
计算机与现代化 JISUANJI YU XIANDAIHUA
总第 211 期
Matlab Coder 生成 C 代码的研究与应用
廖灿灿,张树群,雷兆宜
( 暨南大学信息科学技术学院,广东 广州 510632)
摘要: 借助 Matlab Coder 可以缩短软件开发从方案到实现的时间,加速软件开发。本文提出一种方法: 利用 Matlab 2012a
的 Matlab Coder 代码生成工具箱,将 Matlab 经典图像处理代码转换成高效、可移植的 C 代码静态库文件,成功移植到
ARM9 开发系统下运行。对比实验表明,用本文提出的方法生成的软件代码,在嵌入式目标系统中运行状况良好,其易
维护性和执行效率等方面也优于手工编写的代码,实现了嵌入式系统软件代码的快速生成。
2013 年第 3 期
廖灿灿等: Matlab Coder 生成 C 代码的研究与应用
177
lab 函数中的数据类型和大小; ( 2) 设置目标硬件为 ARM9; ( 3) 选择生成 C 代码标准为 C89C / C90; ( 4 ) 代码风格、终 端 初 始 化 的 选 择 等。 也 可 以 使 用 命 令 “Codegen* ”( * 代表文件名) 生成 MEX 功能函数, Matlab 通过 MEX 功能函数直接调用 Matlab Coder 生 成的 C 代码,并比较编译测试生成的 C 代码与 Matlab 原函数的执行结果是否一致,这里以一个 Sobel 算子 的图像边缘检测测试结果作为示例,如图 6 所示,执 行图像边缘检测效果基本一致。
1. 1 准备阶段
根据 Linux 下软件环境要求,编写 Matlab 代码。 以图像边缘检测为例设计编写 Matlab 代码,并指定 这些 Matlab 文件输入的数据类型。在这个过程中需 要了解 Matlab Coder 工具支持生成 C 代码的 Matlab 函数类型,如表 1 所示。
图 3 MEX 功能验证 C 代码过程图
构上非常规范和精巧,但是缺少了一些关键性的框架 代码,如: 输入输出端接口函数、主程序、头文件等。
2 生成 C 代码的可移植性的实现
本文的目标系统是 Redhat Enterprise Linux 5 操 作系统[5-9],目标板是天嵌推出的基于 S3C2440 芯片 的 ARM9。Matlab Coder 代码 生 成 工 具 生 成 C 代 码 后,就要将这些代码移植到特定的 ARM 板上,实时验 证程序的正确性和稳定性。为了能有效地利用 Matlab Coder 工具,就需要熟悉它生成的 C 代码的文件 内容,文件内容主要包含: ( 1) rtwtype. h 包含了宏定 义数据结构; ( 2) * . c 包含了算子的 C 代码; ( 3) * . h 包 含了算子的头文件命名和引用; ( 4) * initialize. c,* initialize. h 等。以 Sobel 的例子给出如图 7 所示。
图 6 Matlab 函数与 MEX 函数的边缘检测图对比
1. 3 代码生成
通过前面 两 个 阶 段 的 代 码 迭 代 调 试,使 用 命 令 “Codegen-Config-report* . Config( ‘lib’) * ”生成最终 的 C 代码和报告,生成了静态库* . C 文件,它符合 C89 / C90 的 ANSI 代码标准,具有很高的可读性和可 移植性。
收稿日期: 2012-10-26 作者简介: 廖灿灿( 1986-) ,男,贵州六盘水人,暨南大学信息科学技术学院硕士研究生,研究方向: 信号与信息处理; 张树群 ( 1964-) ,女,广东广州人,副教授,研究方向: 嵌入式系统和信号处理; 雷兆宜,男,广东人,高级实验师,研究方向: 计算机应 用与嵌入式系统技术应用。
图 1 代码生成、移植环境和过程图
1 Matlab Coder 代码生成
目标系统软件代码生成主要包括 3 个过程: Matlab 代码编写与测试、代码生成和平台移植。Matlab Coder 工 具 可 以 将 Matlab 函 数 直 接 生 成 C 代 码。 Matlab Coder 代码生成工具生成 C 代码工作流程如 图 2 所示,图 2 中 Y 表示通过验证,N 表示未通过验 证。
3 实验结果
本文选择 Matlab 中 4 种经典图像处理算法: Sobel 算子、Prewitt 算子、Roberts 算子、Canny 算子的图 像边缘检测[15]作为实例,分别对比它们在 Matlab 环 境和在嵌入式 Linux 环境下调用 C 代码静态库的图 像处理效果。如图 9 所示为对比结果,共 4 组图对应 4 种算子的图像边缘检测结果,每组对照图中,左边
LIAO Can-can,ZHANG Shu-qun,LEI Zhao-yi
( College of Information Science and Technology,Jinan University,Guangzhou 510632,China)
Abstract: The function library of Matlab provides a bridge to realize the design-scheme in embedded systems and helps to accelerate software development. In the present work,by using Matlab Coder,Matlab functions are converted to C code in static library files,then the generated C code are successfully transplanted and run in the embedded ARM board by using a cross-compiler in Linux. The experimental results show that,it running well in the target systems by using this generating software code,its ease of maintenance and execution efficiency are better than manually written code,realize the rapid generation of embedded system software code. Key words: Matlab Coder; embedded system; S3C2440; ARM9
相关主题