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

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

的 Matlab Coder 代码生成工具箱,将 Matlab 经典图像处理代码转换成高效、可移植的 C 代码静态库文件,成功移植到
ARM9 开发系统下运行。对比实验表明,用本文提出的方法生成的软件代码,在嵌入式目标系统中运行状况良好,其易
维护性和执行效率等方面也优于手工编写的代码,实现了嵌入式系统软件代码的快速生成。
176
计算机与现代化
2013 年第 3 期
最后将 ARM 板上的图像处理输出效果与 Matlab 代 码的输出效果做比较,在目标软件开发方面与手工编 写代码的代码量和运行效率、效果进行比较,最终验
证了借助 Matlab Coder 代码生成工具可以加速嵌入 式软件开发和应用的目的,代码生成、移植环境过程 如图 1 所示。
图 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 种算子的图像边缘检测结果,每组对照图中,左边
关键词: Matlab Coder; 嵌入式系统; S3C2440; ARM9
中图分类号: TP311
文献标识码: A
doi: 10. 3969 / j. issn. 1006-2475. 2013. 03. 045
Research and Application of C Code Generated by Matlab Coder
图 2 Matlab Coder 工作流程图 表 1 Matlab Coder 支持的内容
矩阵和数组
类和数据类型
编程结构
函数
矩阵运算 N 维数组 下标操作
帧 持续变量 全局变量
复数 整形数据匹配 单精度双精度
定点运算 字符
结构体 数值类 变长度数据 系统对象
数学运算 逻辑关系操作符 程序控制语句( if,for,while,switch) 和结构
由 Matlab Coder 生成的嵌入式 C 语言代码,在结
图 8 ARM 板运行的 Sobel 得到的边缘检测图
生成的代码文件不能直接调用到 Linux 环境下 去编译,还需要做一些处理: ( 1) main 主程序需要手
178
计算机与现代化
2013 年第 3 期
工编写; ( 2) 数据结构最好编写成自己熟悉的结构和 定义[14]; ( 3) 去除一些不必要的冗余代码文件。
收稿日期: 2012-10-26 作者简介: 廖灿灿( 1986-) ,男,贵州六盘水人,暨南大学信息科学技术学院硕士研究生,研究方向: 信号与信息处理; 张树群 ( 1964-) ,女,广东广州人,副教授,研究方向: 嵌入式系统和信号处理; 雷兆宜,男,广东人,高级实验师,研究方向: 计算机应 用与嵌入式系统技术应用。
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 的
1. 1 准备阶段
根据 Linux 下软件环境要求,编写 Matlab 代码。 以图像边缘检测为例设计编写 Matlab 代码,并指定 这些 Matlab 文件输入的数据类型。在这个过程中需 要了解 Matlab Coder 工具支持生成 C 代码的 Matlab 函数类型,如表 1 所示。
图 3 MEX 功能验证 C 代码过程图
根据错误报 告 的 提 示 修 正 错 误,通 过 不 断 地 修 正 错 误、生成 MEX 函数。通过这种迭代测试 Matlab 算法 是否满足代码生成要求,生成需要的 C 代码。
Step2 首先在 Matlab 中使用 Coder 命令得到代 码产生工程管理界面( 如图 4 所示) ,在管理界面的 设置界面( 如图 5 所示) 设置如下参数: ( 1) 定义 Mat-
一幅为 Matlab 代码运行效果,右边一副为生成的 C 代码在 ARM9 上运行效果。
图 6 Matlab 函数与 MEX 函数的边缘检测图对比
1. 3 代码生成
通过前面 两 个 阶 段 的 代 码 迭 代 调 试,使 用 命 令 “Codegen-Config-report* . Config( ‘lib’) * ”生成最终 的 C 代码和报告,生成了静态库* . C 文件,它符合 C89 / C90 的 ANSI 代码标准,具有很高的可读性和可 移植性。
图 4 工程管理界面 图 5 工程设置界面
图 7 生成的 C 代码文件目录
在 Linux 操作系统下建立好软件环境———图像 处理输入和输出接口[10],调用生成的 C 代码静态库, 使用“arm-linux-gcc”编译器[11]对程序进行编译,并生 成可以在 ARM 板上运行的程序[12-13],即图像处理系 统中的图像边缘检测功能程序,运行图像边缘检测程 序,如图 8 所示。
本文使 用 Matlab 2012a 版 本 中 的 Matlab Coder 工具箱,基于 S3C2440 系列 ARM9 的目标系统软件 开发,尝试利用 Matlab Coder 工具箱生成经典图像处 理的 C 代码静态库文件,在目标系统中调用生成的 C 代码静态库文件,交叉编译并移植到 ARM 板上运行,
子函数和部分 Matlab 函数 可变长度参数列表 函数处理 支持的算法:
400 个 Matlab 运算符和函数 200 个系统对象( 通信系统、DSP 系统、计算机视觉)
1. 2 测试阶段
MEX 功能函数验证 C 代码工作过程如图 3 所示。 Step1 在 Matlab 函数的第一行结尾加入关键词 “% #Codegen”,它告诉 Matlab 正在使用的函数是用 于代码生成,需要使用 Matlab Coder 工具。当代码生 成中产生错误时,Matlab Coder 会生成一个错误报告,
构上非常规范和精巧,但是缺少了一些关键性的框架 代码,如: 输入输出端接口函数、主程序、头文件等。
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 所示。
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 所示,执 行图像边缘检测效果基本一致。
优越性在于不需要先建立模型。借助 Matlab Coder, 软件工程师不需要将设计的算法进行 C 编程,而是 利用 Matlab 中强大的函数库,建立 Matlab 函数,通过 设置目标语言需要的参数,生成能脱离 Matlab 环境 独立运行的 C 代码,这样大大减轻了软件工程师的 编码工作量。工程师们只需要在嵌入式系统中搭建 好软件环境,通过函数调用 Matlab Coder 生成的 C 代 码,由 Linux 嵌入式交叉编译工具编译,就能直接到 目标机 ARM 上运行程序,大大缩短了软件产品的研 发周期。
2013 年第 3 期 文章编号: 1006-2475( 2013) 03-0175-04
计算机与现代化 JISUANJI YU XBaidu NhomakorabeaANDAIHUA
总第 211 期
Matlab Coder 生成 C 代码的研究与应用
廖灿灿,张树群,雷兆宜
( 暨南大学信息科学技术学院,广东 广州 510632)
摘要: 借助 Matlab Coder 可以缩短软件开发从方案到实现的时间,加速软件开发。本文提出一种方法: 利用 Matlab 2012a
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
相关文档
最新文档