求助:关于多媒体定时器调用adsapi32.dll里的函数时出现的问题 点击:2030 | 回复:8



雨下空城

    
  • 精华:0帖
  • 求助:0帖
  • 帖子:7帖 | 5回
  • 年度积分:0
  • 历史总积分:34
  • 注册:2006年11月07日
发表于:2006-11-07 11:42:00
楼主
我做的一个数据采集系统,软件程序是用VB编的,用到了研华数据采集卡818L。采集模拟量使用软件方式.因为多媒体定时器精度比较高,调用了WINDOWS API里的一个多媒体定时器,代替TIMER定时器。在定时器的回调函数里,我使用了模拟量输入函数DRV_MAIVoltageIn,来进行数据采集。我在VB调试过程中,程序运行没有问题,可以正常调用adsapi32.dll提供的函数,如DRV_MAIVoltageIn函数。但是我把工程生成可执行程序或者打包之后,运行到调用DRV_MAIVoltageIn函数时就会出错,程序自动终止。 是不是多媒体定时器里不能调用adsapi32.dll提供的所有函数?我试了一下,在多媒体定时器里调用DRV_GetAddress时就会出错了。 请指点!谢谢!



老星土

  • 精华:0帖
  • 求助:0帖
  • 帖子:6帖 | 85回
  • 年度积分:0
  • 历史总积分:110
  • 注册:2006年5月04日
发表于:2006-11-08 13:26:00
1楼

雨下空城

  • 精华:0帖
  • 求助:0帖
  • 帖子:7帖 | 5回
  • 年度积分:0
  • 历史总积分:34
  • 注册:2006年11月07日
发表于:2006-11-08 22:09:00
2楼
怎么没人来关注啊,这是切实问题啊,大家都会碰到的.

GaryLin

  • 精华:0帖
  • 求助:0帖
  • 帖子:4帖 | 1186回
  • 年度积分:0
  • 历史总积分:1263
  • 注册:2003年4月15日
发表于:2006-11-09 08:57:00
3楼
Debug 模式 OK, 但 Release 模式出問題. 看來像是 Timing 的問題. 試著把 timer interval 加長一點. 

或是在 timer callback 中, 加的判斷式來避免 callback 同時多次被調用.
if fBusy = false then
   fBusy = true
   ...
   ... do my job
   ...
   fBusy = false
end if

不能说

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 3回
  • 年度积分:0
  • 历史总积分:53
  • 注册:2006年11月09日
发表于:2006-11-09 14:45:00
4楼
windows的多媒体定时器好像是运行在自己的线程上下文中,在VB中这样做会导致线程上下文的切换,所以可能出现您所说的问题。试着把多媒体定时器改成VB自己的定时器,如果故障消失,就说明多半是这个原因。GOOD LUCK!

雨下空城

  • 精华:0帖
  • 求助:0帖
  • 帖子:7帖 | 5回
  • 年度积分:0
  • 历史总积分:34
  • 注册:2006年11月07日
发表于:2006-11-10 21:37:00
5楼
VB的TIMER定时器使用是没有问题的,但是精度不够,所以还必须用多媒体定时器来做.

Is_true

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 7回
  • 年度积分:0
  • 历史总积分:7
  • 注册:2007年6月26日
发表于:2007-06-26 11:40:00
6楼

xuzhenrui

  • 精华:2帖
  • 求助:12帖
  • 帖子:79帖 | 205回
  • 年度积分:0
  • 历史总积分:1038
  • 注册:2003年9月11日
发表于:2007-06-27 09:35:00
7楼
可以用板卡上自带的定时器啊。

Is_true

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 7回
  • 年度积分:0
  • 历史总积分:7
  • 注册:2007年6月26日
发表于:2007-06-28 11:33:00
8楼
给点代码例子啊  xuzhenrui
先谢谢了

热门招聘
相关主题

官方公众号

智造工程师