找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

巢课
电巢直播8月计划
查看: 1198|回复: 12
打印 上一主题 下一主题

ipc C和skill异步通信问题[已解决]

[复制链接]

2

主题

41

帖子

203

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
203
跳转到指定楼层
1#
发表于 2013-8-6 09:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您!

您需要 登录 才可以下载或查看,没有帐号?注册

x
本帖最后由 wmeee 于 2013-8-7 10:07 编辑

如下是我写的程序:
cid = ipcBeginProcess("d:/wmwork/test.exe" "" handler "" "" "d:/wmwork/text.log")
handler = (lambda (cid data) printf("show: %s",data))

C程序(写在一个按钮下,按一次执行一次):

char command[10]="start!\n";
printf(command);
fflush(stdout);

load进cadence,能跳出控制C窗口,但是按下按钮,cadence没反应,但是log文件中有start字符;
重新load skill代码时,又把上次数据读出来了。

求大神!

/************ 通信成功代码 ********************/
c:
char command[10]="start\n";
printf(command);
fflush(stdout);

skill:
fcid = ipcBeginProcess("d:/wmwork/test.exe" "" "dataH")
procedure(dataH(cid com) axlShell("open"))
ipcWaitForProcess(cid)

allegro.ilinit中加入以下代码
load("d:/wmwork/myskill.il")
/******************************************/
Thank ifuture a lot!
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏3 支持!支持! 反对!反对!

2

主题

41

帖子

203

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
203
推荐
 楼主| 发表于 2013-8-6 16:17 | 只看该作者
ifuture 发表于 2013-8-6 15:04
直接函数名称啊,比如  xxxxxxx()

明天我试试,今天服务器关了。。。

大神,我想把一个这个skill一开软件就启动,我的操作时,在allegro.ilinit最后写入load("skill.il")。
软件开启式,也弹出了skill通信的那个exe,但是点击按钮就没办法执行cadence语句了;
重新load之后,就可以了。这是神马情况?

11

主题

148

帖子

1465

积分

四级会员(40)

Rank: 4Rank: 4Rank: 4Rank: 4

积分
1465
2#
发表于 2013-8-6 10:42 | 只看该作者
输出文本。似乎ipc有这个问题。
改成发命令了呢?如果可以马上开始执行命令。就说明正常了。

2

主题

41

帖子

203

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
203
3#
 楼主| 发表于 2013-8-6 11:36 | 只看该作者
ifuture 发表于 2013-8-6 10:42
输出文本。似乎ipc有这个问题。
改成发命令了呢?如果可以马上开始执行命令。就说明正常了。

你是说用ipcSkillProcess?

11

主题

148

帖子

1465

积分

四级会员(40)

Rank: 4Rank: 4Rank: 4Rank: 4

积分
1465
4#
发表于 2013-8-6 11:48 | 只看该作者
本帖最后由 ifuture 于 2013-8-6 11:51 编辑

不是这个意思。
我的意思是。你不要发printf这个输出文本的。输出一个让allegro干活的命令。可以调用现成的自己写的skill程序,最好是有面板的。如果可以马上弹出面板,就说明已经通信成功了。或者直接把printf("show: %s",data) 改成axlShell("open")。看看是否可以弹出打开文件的面板。

2

主题

41

帖子

203

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
203
5#
 楼主| 发表于 2013-8-6 13:01 | 只看该作者
本帖最后由 wmeee 于 2013-8-6 13:03 编辑
ifuture 发表于 2013-8-6 11:48
不是这个意思。
我的意思是。你不要发printf这个输出文本的。输出一个让allegro干活的命令。可以调用现成的 ...


我试过了,没有弹出框。
感觉根本没有调用那个lambda定义的函数。
我在lambda函数中加了一个printIn()函数,也没有调用,但是在第二次load skill文件的时候才运行。

11

主题

148

帖子

1465

积分

四级会员(40)

Rank: 4Rank: 4Rank: 4Rank: 4

积分
1465
6#
发表于 2013-8-6 13:23 | 只看该作者
handler = (lambda (cid data) printf("show: %s",data))
这么写肯定不对嘛。这里的handler需要是一个响应的函数,而不是变量。

defun( handler (cid data)
   ... ...

);end - defun

2

主题

41

帖子

203

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
203
7#
 楼主| 发表于 2013-8-6 13:40 | 只看该作者
ifuture 发表于 2013-8-6 13:23
handler = (lambda (cid data) printf("show: %s",data))
这么写肯定不对嘛。这里的handler需要是一个响应 ...


您对的,这个地方不对。
按照您说的,可以执行。

非常感谢!

2

主题

41

帖子

203

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
203
8#
 楼主| 发表于 2013-8-6 15:02 | 只看该作者
ifuture 发表于 2013-8-6 13:23
handler = (lambda (cid data) printf("show: %s",data))
这么写肯定不对嘛。这里的handler需要是一个响应 ...


再问一下,我调用注册过的命令都可以用axlShell
但是,调用自己写的skill函数(没有注册),该怎么调用()?

11

主题

148

帖子

1465

积分

四级会员(40)

Rank: 4Rank: 4Rank: 4Rank: 4

积分
1465
9#
发表于 2013-8-6 15:04 | 只看该作者
直接函数名称啊,比如  xxxxxxx()

2

主题

41

帖子

203

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
203
11#
 楼主| 发表于 2013-8-7 08:38 | 只看该作者
ifuture 发表于 2013-8-6 15:04
直接函数名称啊,比如  xxxxxxx()

you r right!
可以直接执行。xxxxxx()

2

主题

41

帖子

203

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
203
12#
 楼主| 发表于 2013-8-7 09:59 | 只看该作者
已解决
我在调用ipcStopProcess(o_childId)时出现uninitialized 的错误。
所以我在调用cid = ipcBegin...之后加了ipcWaitForProcess(等待cid程序完成初始化之后再接着初始化allegro程序)。
So it works well.
thank ifuture a lot.

24

主题

153

帖子

463

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

积分
463
13#
发表于 2016-9-21 13:57 | 只看该作者
大神们,这个函数可以用在c#程序吗?我调不起来,求指导
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

巢课

技术风云榜

关于我们|手机版|EDA365 ( 粤ICP备18020198号 )

GMT+8, 2024-11-26 14:28 , Processed in 0.062420 second(s), 32 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

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