声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 2215|回复: 2

[编程技巧] 【转贴】创建自已的Toolbox

[复制链接]
发表于 2007-5-30 14:16 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
为了增加代码或模块通用性与规范性,最好的方法便是建立自已的工具箱;我以前写程序也喜欢规纳与总结成自已的库,但是毕竟精力有限,只是做一个简单的堆积,没有规范的文档。现在很荣幸有时间投入到这项工作中,所以分享一些精验,也希望得到一些指点。
以下所述是针对matlab7.1的,主要计划是建立某个以simulink模块为主加上m文件函数的工具箱。

1. m文件函数的文档可用htm文件, 在文件头注释中可加入"参见"与"doc"链接,形如
function varargout=my(T)
% XXXXXXXXXXXXX
% 例: r=my(T)
% 参见
% <a href="matlab:help my2">my2</a>
%
% <a href="matlab:helpview('C2Q.htm')">doc C2Q</a>
这样 help my 就会在命令窗口提示链接。

2. 为每一个字目录(除了private与help)编写Contents.m文件,典型格式如下:
% ==================================================================
% Contents of XXXX
% ==================================================================
%
%<a href="matlab:help my">my</a> - XXXX model
这样 help+目录名 就可以在命令窗口提示链接,可以从主目录链接到各子目录。

3. 为工具箱编写安装程序,如install.m,内容包括路径添加,欢迎界面,特定的初始化工作,在系统工具箱中添加所需通用文件等。为了不用设次都运行install.m,可以在其中加入读写starup.m的代码。例如,运行一次install后,我的startup.m增加如下代码:
%$$
% -------------- Codes Generated from XXXX Library 1.0 ---------------
if exist('E:\XXXXX\install.m')
run('E:\XXXXX\install.m')
end
% -------------------------------------------------------------------
%$$
这样每次重启matlab后自动运行install,可以看到漂亮的欢迎界面。

4. 为工具箱编写反安装程序,如uninstall.m,把写入startup.m的内容除去,去除所添加路径,把更改系统工具箱的地方改回来。

5. Simulink模块库的搭建框架是,一个主模块文件,其结构是封装的各级目录,但不包括具体模块。每部分具体模块是一个文件,通过主在模块文件中用回调函数"openfcn"打开。

6. 要想simulink模块库在simulink browser中显示,需要在路径中添加slblocks.m文件,其具体内容可参考帮助。

7. mdl模块中不出现中文或全角字符,模块的SavedCharacterEncoding采用默认值或'GBK', Matlab的CharacterEncoding采用默认的'GBK'(参见slCharacterEncoding); m文件函数, C文件S-function可以有中文字符.

8. mdl模块文档可用htm文件, 添加方法为Edit mask->Mask help,再输入helpview('myhelp.htm').可为整个模块库建立Contents.htm文件,以树型结构链接到各模块文档。文档间的链接可以包括:类似模块文档间的链接,返回目录的链接,与演示文档的链接,邻近模块的链接等。

9. mdl模块中若有S-function最好用C语言的版本.m file的S函数不支持编译(可以加tlc文件,好象更复杂).

10. mdl模块中不应有Matlab Fcn模块,不支持编译,可以用Matlab Embedded Fcn模块.

11. mdl模块中可以有Stateflow模块,是支持编译的,但stateflow中不应有像"ml.disp"这样的matlab语言。

12. mdl模块若用到原有模型库的模型时link不能打断,这样更新某个模块,用到它的模块也同样更新。

13. 要隐藏模块的内部结构,可将其编译为c-mex S-函数(点右键Generate S-function)。

还存在的问题是C-mex function用到的公用函数的管理,以及两相s-function同时include一个c文件无法编译的问题,还有模块库的发布形式问题。欢迎有兴趣的朋友提出建议并一起讨论。

评分

1

查看全部评分

回复
分享到:

使用道具 举报

发表于 2012-7-16 16:12 | 显示全部楼层
好贴,收藏了
发表于 2012-7-16 20:04 | 显示全部楼层
收藏了!多谢分享!
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-17 22:22 , Processed in 0.078104 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表