找回密码
 注册
Simdroid-非首页
查看: 160|回复: 10

VC和MATLAB混编的工具箱问题。

[复制链接]
发表于 2009-1-7 21:40:24 | 显示全部楼层 |阅读模式 来自 上海浦东新区
本帖最后由 ljelly 于 2009-6-4 16:19 编辑

版本:VC++2005 ,MATLAB(R2006a)
目的:VC++通过MATLAB的CCSLINK工具箱启动CCS
问题:在M文件中调用CCSLINK的函数(ccsdsp),然后将M文件封装成COM组件,在VC中调用。运行后,提示找不到函数ccsdsp。我在VC和MATLAB中都没有对CCSLINK工具箱进行添加或封装等操作,是否要这样做?或者混编不支持这个工具箱?对MATLAB接触较少,请大家帮忙。
发表于 2009-1-7 21:51:20 | 显示全部楼层 来自 新加坡
Simdroid开发平台
偶没有用过CCSLink工具箱,是针对TI的微处理器的编程工具箱吧?那个ccsdsp是不是一个图形界面的工具?如果是的话,是不能通过混编的方式调用的。MATLAB不支持混编工具箱中任何带有图形界面的函数。

评分

1

查看全部评分

回复 不支持

使用道具 举报

 楼主| 发表于 2009-1-7 22:16:44 | 显示全部楼层 来自 上海浦东新区
不是图形界面。ccsdsp是MATLAB的CCSLINK中的一个命令,对,就是你说的那个TI。它用于启动CCS ,CCS是开发嵌入式固件用的编译器。调试时发现,凡是M文件中涉及CCSLINK中的函数,都不识别。MATLAB的普通命令则没有问题。
    如果不用COM,选用那种混编方式合适?我的目的是通过VC调用MATLAB的CCSLINK,启动CCS,并实现VC和CCS之间的通讯。只要能够调用CCSLINK中的函数就好了。我之前用过matlab engine,发现引擎只能够在VC单个线程中有效,如果在一个线程中开辟引擎,而在另一个线程使用,发现此时引擎已经失效,而我的软件架构决定必须是多线程调用。所以才放弃此法,选用COM。请帮忙。我已经为这个问题忙了近一个月了。这儿的帖子看了很多,但是却没有形成系统的观点。
回复 不支持

使用道具 举报

发表于 2009-1-7 22:29:26 | 显示全部楼层 来自 新加坡
原帖由 yinlii 于 2009-1-7 22:16 发表
不是图形界面。ccsdsp是MATLAB的CCSLINK中的一个命令,对,就是你说的那个TI。它用于启动CCS ,CCS是开发嵌入式固件用的编译器。调试时发现,凡是M文件中涉及CCSLINK中的函数,都不识别。MATLAB的普通命令则没有问题 ...


我记得TI有自己的CCS,那个CCSLINK启动的就是TI的CCS吗?你能不能贴一段示例m代码演示调用ccslink的方法。

如果你在matlab中调用ccslink的主要目的就是启动外部的CCS,然后把某个源文件以命令行的方式传给CCS并编译其汇编语言,你可能不用在混编的程序中调用ccslink,而是在混编的程序中通过win32的方式启动CCS,做同样的事情。这只是偶个人推测,因为没有用过CCS,很早以前用过TMS32C50的编译工具,那是类似于TC2.0的DOS下的一种IDE。CCS应该是强悍很多了。
回复 不支持

使用道具 举报

 楼主| 发表于 2009-1-8 06:35:10 | 显示全部楼层 来自 上海浦东新区
我的M文件很简单,不过都在公司里,是内网,不允许拷出,这样描述不直观,请见谅。
所有M代码如下:

1.InitGlobalVar.m

     function InitGlobalVar()

    clear
    clc
    global cc;

     cc = [];

2.StartCCSDSP

   function StartCCSDSP()

   global cc;

   cc = ccsdsp('broadnum',0,'processornum',0);

run时,第一个接口通过,到第二个接口时cc = ccsdsp('broadnum',0,'processornum',0);就跳出,在VC里返回E_FALSE。
回复 不支持

使用道具 举报

 楼主| 发表于 2009-1-8 06:42:53 | 显示全部楼层 来自 上海浦东新区
3.WriteToDsp.m
function WriteToDsp(addr,data)
global cc;
%这句就是将VC下发的数据写到DSP中
write(cc,addr,data);

4.ReadFromDsp.m
funtion [out] = ReadFromDsp(addr,data,count)
global cc;
%这句是VC从DSP中读取数据
out = read(cc,addr,data,count);
回复 不支持

使用道具 举报

 楼主| 发表于 2009-1-8 11:48:54 | 显示全部楼层 来自 上海

回复 4# taohe 的帖子

刚才我又生成了一下COM组件,仔细研究了它的编译信息,发现有几条信息,请帮我分析一下:
1.Parsing file:"E:/Program Files/MATLAB/R2006a/toolbox/ccslink/ccslink_outproc/ccsdsp.m"
这就是MATLAB自带的CCSLINK工具箱中的ccsdsp函数,看来已经封装到COM组件中?
2.Parsing file:"E:/Program Files/MATLAB/R2006a/toolbox/matlab/graphics/print.m"
还有几个M文件,都在graphics子目录下的,难道这就是你说的工具箱的绘图函数吗?这是不是MATLAB自己的?ccslink中,我只调用了三条命令:ccsdsp(启动ccs)、read、write。
另外,多谢taobe在另个贴的鼓励,我很喜欢单步跟踪调试,几乎所有的问题都会在这种看似笨拙的办法中得到解决。

评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2009-1-8 15:11:41 | 显示全部楼层 来自 新加坡
Sorry, I am afraid that I can't help in this case. I have never used ccslink in matlab.

Or would you explain what happens after you call ccsdsp in matlab?
回复 不支持

使用道具 举报

 楼主| 发表于 2009-1-8 19:46:19 | 显示全部楼层 来自 上海浦东新区

回复 8# taohe 的帖子

我用一个vc控制台的测试程序调用这个COM组件:
ICCSDSP * ptrCCS = NULL;

//初始化
.....
//获取到COM组件(即ICCSDSP对象)地址
....

//开始启动CCS
hr = (ptrCCS->StartCCSDSP());
结果是hr为E_FALSE,我查看控制台,它说没有发现command/function "ccsdsp",而这个"ccsdsp"是我在StartCCSDSP.m文件中调用的ccslink工具箱中的命令。而我在MATLAB中运行StartCCSDSP.m,则可以启动CCS。

有没有针对所有工具箱的通用办法,将其从MATLAB剥离,单独运行?
回复 不支持

使用道具 举报

发表于 2009-6-4 15:45:54 | 显示全部楼层 来自 LAN
我也发现有些函数编译成COM在VC中调用,出现类似问题,hr为E_FALSE
回复 不支持

使用道具 举报

发表于 2009-6-4 15:46:24 | 显示全部楼层 来自 LAN
这个问题搞了我好久了。。。。。。
同问解决方法
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Simapps系列直播

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-10-7 07:30 , Processed in 0.047416 second(s), 17 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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