不可思议!!!!不可思议,一个关于数据采集的源程序费解!!!<仅有的171分都给你!!!>

Frank0233 2000-11-03 12:51:00
不可思议!!!!不可思议,一个关于数据采集的源程序费解!!!<仅有的171分都给你!!!>
下面这段代码,是在很早以前在bc3.1下写的,一个通过硬件卡采集电子衡称的数据
在普通的奔腾机器,或则486机器上的读数都正确,可是现在机器升级用P2,或者P3
读取的数据相差太大,可以帮我看看为何嘛?我现在想把他移植到vc下,各位大哥,帮帮我啊!
下面是这个采集程序的源代码.对了,这样的实现数据采集的方式,还可以吗(在win98下)
有谁可以教我另外的处理办法?
我现在通过在主程序里面开辟一个中断,让后调用这个采集程序已达到实时的目的,然后通过DDE和我的数据库程序交换数据,以前在老机器上还好,现在用奔腾3(HP),结果就不行了
采集的数据不对,现在很着急,各位给我想想办法,下面是采集的源程序:
//头文件tw.h
#define M_WAIT
//#undef M_WAIT
#define LOOPNUM 500
#ifdef M_WAIT
#define CJPL 128.0
#define TICKNUM 128
#define IOKEY 0x29
#else
#define CJPL 102.4
#define TICKNUM 512
#define IOKEY 0x27
#endif

//采集程序ybstw.c
#include "windows.h"
#include "tw.h"

#define b_adjustbase 3 // 参与台值校正的上限值 n*20公斤
#define freq_adjustbase 15 // 无车时台值校正的周期 n次
#define b_havtrk 40 // 认为有车的下限比较值 n*20公斤
#define b_trkgone 15 // 认为过车的下限比较值 n*20公斤
#define b_pulse 3 // 变化梯度/脉动幅值的比较值
#define b_minus 50 // 单调段均值与已有的当前平稳值之差额的 比较值
#define jjb_pulse 2 // 静计脉动幅值的比较值
#define jjnum_repeat 5 // 静计(近似重量)的重复次数(从而得出结果)

void inicj(void); //初始化采集
void setcj(int option); //设置采集方式 (动态,静态)
void chaiji(void);
int getcj(void);
void delaycj(void);

/*** Global Variables ***/
unsigned int sample=0;
unsigned int m_option=0;
unsigned int d_cjpl=0;
unsigned int min_smoothnum=0;
unsigned int d_base=0;
float d_adjust=0.0;
unsigned int m_taizhi=0;
int d_taizhi=0;
unsigned int m_weight=0,d_weight=0,num_weight=0,num_pick=0;
float weight=0.0,speed=0.0;

// pickwork
#ifdef M_WAIT
#else
unsigned int num_delay=0;
unsigned char high8byte=0;
#endif

unsigned int d_fromcj=0;
// prework
unsigned int d_temp[5]={0};
unsigned int d_filter=0;
unsigned int d_prework=0;
// jztz
unsigned int sum_base=0;
unsigned int cfsum_base=0;
unsigned int num_base=0;
unsigned int d_periodbase=0;
unsigned int num_repeatbase=0;
unsigned int sum_repeatbase=0;
// dtcj
unsigned char d_flag=0;
unsigned int d_seghead=0;
unsigned int d_segend=0;
unsigned int sum_singleseg=0;
unsigned int cfsum_singleseg=0;
unsigned int num_singleseg=0;
unsigned int sum_newtempseg=0;
unsigned int cfsum_newtempseg=0;
unsigned int num_newtempseg=0;
unsigned int sum_oldtempseg=0;
unsigned int cfsum_oldtempseg=0;
unsigned int num_oldtempseg=0;
unsigned int num_repeatseg=0;
unsigned int m_picksmooth=0;
unsigned int sum_smooth=0;
unsigned int cfsum_smooth=0;
unsigned int num_smooth=0;
unsigned int d_smooth=0;
// jtcj
unsigned int jjsum_period=0;
unsigned int jjcfsum_period=0;
unsigned int jjnum_period=0;
unsigned int jjd_period=0;
unsigned int jjd_tempweight;
unsigned int jjsum_repeatnear=0;
unsigned int jjnum_repeatnear=0;


// Sample segment
/**************************************************/


void delaycj(void)
{
loop_dly:
asm nop
asm loop loop_dly
}

void iniprework(void)
{
asm { // 初始化 采集卡
mov dx,13a3h
mov al,92h
out dx,al
mov cx,LOOPNUM*3
}
delaycj(); //; delay0: about n * 20
asm {
mov dx,13a2h
mov al,0efh
out dx,al
mov cx,LOOPNUM // 注意: LOOPNUM必须为预定义整数
}
delaycj(); //; delay0: about n * 20
asm {
mov dx,13a2h
mov al,0ffh
out dx,al
mov cx,LOOPNUM*3
}
delaycj(); //; delay1: about n * 20
asm {
mov dx,13a2h
mov al,0fah
out dx,al
mov cx,LOOPNUM*3
}
delaycj(); //; delay2: about n * 20
asm {
mov dx,13a0h
in al,dx
mov ah,al
mov dx,13a2h
mov al,0f5h
out dx,al
mov cx,LOOPNUM*3
}
delaycj(); //; delay3: about n * 20
asm {
mov dx,13a0h //; execute program then exit == delay4
in al,dx
}
asm {
mov cl,4
shr ax,cl
mov di,offset d_temp
mov cx,5
}
l_ini_prew:
asm {
mov [di],ax
inc di
inc di
loop l_ini_prew
}
return;
}



void inicj(void)
{
d_base=GetProfileInt("FCMS","BaseWeight",920);
d_adjust=((float)GetProfileInt("FCMS","AdjustParameter",1000)) / 1000.000;
d_cjpl=2*(int)(CJPL);
min_smoothnum=(int)(CJPL);

asm { // 初始化 采集卡
mov dx,13a3h
mov al,92h
out dx,al
}

return;
}


void setcj (int option )
{
m_option=option; // 置采集方式

d_weight=0; // 复位结果传送变量
m_weight=0;
num_weight=0;
num_pick=0;
iniprework(); // 初始化预处理部分
sum_base=0; // 复位台基值有关变量
cfsum_base=0;
num_base=0;
d_periodbase=0;
num_repeatbase=0;
sum_repeatbase=0;

d_flag=0; // 复位动态计量部分的有关变量
num_repeatseg=0;
m_picksmooth=0;
d_smooth=0;
sum_smooth=0;
cfsum_smooth=0;
num_smooth=0;

jjsum_period=0; // 复位静态计量部分的有关变量
jjcfsum_period=0;
jjnum_period=0;
jjd_period=0;
jjd_tempweight=0;
jjsum_repeatnear=0;
jjnum_repeatnear=0;
sample=1;

return;
}


void chaiji(void)
{
asm push si
asm push di
/******************** pickwork **************************/
#ifdef M_WAIT
asm {
mov dx,13a2h
mov al,0efh
out dx,al
mov cx,LOOPNUM // 注意: LOOPNUM必须为预定义整数
}
delaycj(); //; delay0: about n * 20
asm {
mov dx,13a2h
mov al,0ffh
out dx,al
mov cx,LOOPNUM*3
}
delaycj(); //; delay1: about n * 20
asm {
mov dx,13a2h
mov al,0fah
out dx,al
mov cx,LOOPNUM*3
}
delaycj(); //; delay2: about n * 20
asm {
mov dx,13a0h
in al,dx
mov ah,al
mov dx,13a2h
mov al,0f5h
out dx,al
mov cx,LOOPNUM*3
}
delaycj(); //; delay3: about n * 20
asm {
mov dx,13a0h //; execute program then exit == delay4
in al,dx
mov d_fromcj,ax
}
#else
asm {
cmp num_delay,2
ja testabove
je equ2
cmp num_delay,0
jne delay1
mov dx,13a2h
mov al,0efh
out dx,al
mov num_delay,1
jmp end_chaiji //; ==delay0: about 1000/512 ms
}
delay1:
asm {
mov dx,13a2h
mov al,0ffh
out dx,al
mov num_delay,2
jmp end_chaiji //; ==delay1: about 1000/512 ms
}
equ2:
asm {
mov dx,13a2h
mov al,0fah
out dx,al
mov num_delay,3
jmp end_chaiji //; ==delay2: about 1000/512 ms
}
testabove:
asm {
cmp num_delay,3
jne delay4
mov dx,13a0h
in al,dx
mov high8byte,al
mov dx,13a2h
mov al,0f5h
out dx,al
mov num_delay,4
jmp end_chaiji //; ==delay3: about 1000/512 ms
}
delay4:
asm {
mov dx,13a0h //; execute program then exit == delay4
in al,dx
mov ah,high8byte
mov d_fromcj,ax
mov num_delay,0
}
#endif

/************************** prework *****************************/
// 预处理: 先去掉最低 4位无效位,再作均值滤波,再减去台值取相对重量
asm {
mov cl,4
mov ax,d_fromcj
shr ax,cl
mov bx,ax // 取当前数与最后五个数(在先进先出的'队'中)
mov di,offset d_temp // 作均值滤波
mov cx,5
}
l_prework:
asm {
xchg bx,[di]
add ax,bx
inc di
inc di
loop l_prework
mov cx,6
xor dx,dx
div cx
shr cx,1
cmp dx,cx
jb filt_nocf
inc ax
}
filt_nocf:
asm {
mov d_filter,ax // 绝对重量数送至d_filter
sub ax,d_base
jg exit_abs1
neg ax
}
exit_abs1:
asm mov d_prework,ax // 减去台值的相对重量数送至 d_prework

/**********************************************************************/
asm {
cmp d_weight,0
je notrack
jmp havetrack
}

/********************* there is no-track... **********************/
/*** 无车时,每两秒作一次均值,与台值的差额作为台值误差显示;
当差额大于 b_havtrk(800公斤)时, 判断为车上台,置d_weight为 b_havtrk;
如果连续有 freq_adjustbase(15)个差额小于 b_adjustbase(40公斤),则作台值校正***/

notrack:
asm {
mov ax,d_filter // 作和及个数的累加
add sum_base,ax // 注意: 此处为d_filter(绝对重量数)累加
adc cfsum_base,0
inc num_base
mov cx,d_cjpl
cmp num_base,cx
je get_perioddata
jmp end_chaiji
}
get_perioddata: // 到两秒时取出均值
asm {
mov dx,cfsum_base
mov ax,sum_base
mov cx,num_base
div cx
shr cx,1
cmp dx,cx
jb get_prdata_nocf
add ax,1
}
get_prdata_nocf:
asm {
mov sum_base,0 // 复位两秒时间段的和累加器与数目累加器
mov cfsum_base,0
mov num_base,0
mov d_periodbase,ax
sub ax,d_base
mov d_taizhi,ax // 显示台值误差
mov m_taizhi,1
jg exit_abs2
neg ax
}
exit_abs2:
asm {
cmp ax,b_adjustbase // 判断是否满足校正幅值范围
jbe adjustbase // 只要一次不满足,则复位 近似台值组
mov num_repeatbase,0 // 的和累加器与数目累加器
mov sum_repeatbase,0
cmp ax,b_havtrk // 判断是否有车
jb true_notrk
mov d_weight,ax
jmp end_chgdirect // 有车时, 转至 end_chgdirect, 初始化另一部分变量
}
true_notrk:
asm jmp end_chaiji
adjustbase:
asm {
mov ax,d_periodbase
add sum_repeatbase,ax
inc num_repeatbase
cmp num_repeatbase,freq_adjustbase // 判断是否满足校正
je get_newbase // 所要求的连续次数
jmp end_chaiji
}
get_newbase:
asm {
xor dx,dx // 取出新校正值,置换旧台值
mov ax,sum_repeatbase // 复位近似台值组的和累加器与数目累加器
mov cx,num_repeatbase
div cx
shr cx,1
cmp dx,cx
jb getnew_nocf
add ax,1
}
getnew_nocf:
asm {
mov d_base,ax
mov sum_repeatbase,0
mov num_repeatbase,0
jmp end_chaiji
}

/********************* there is have-track... **********************/
// 过车时完成重量的动态采集或静态采集...
havetrack:
asm {
cmp m_option,2 // 判断是否动态计量
je dynawork
jmp staticwork
}
/********************** dong tai chai ji ******************************/
dynawork:

asm {
inc num_pick
cmp num_pick,7fffh
jb do_next
jmp exit_cj
}
do_next:
asm {
mov ax,d_segend
cmp d_prework,ax
jne testdirect
jmp singlerect // 二者相等时按单调处理
}
testdirect:
asm {
lahf // 取其CF进位,判断是否与当前进位(d_flag)相等
and ah,01 // 相等,为保持单调性;
cmp ah,d_flag // 不等,为改变单调性;并保存此进位为下次比较进位(d_flag)
jne mustchgdirect
}

singlerect:
asm {
mov ax,d_prework // 对单调段作累加
mov d_segend,ax
add sum_singleseg,ax
adc cfsum_singleseg,0
inc num_singleseg
jmp end_chaiji
}

mustchgdirect:
asm mov d_flag,ah

chg_direct:

asm {
mov ax,d_segend
mov bx,d_seghead
sub ax,bx
jg exit_abs3
neg ax
}
exit_abs3:
asm {
mov bx,ax // 认为段高小于80公斤时
cmp ax,4 // 则此段满足段高比较的条件
jbe retry_testsmooth

shl ax,1
mov dx,ax
shl ax,1
shl ax,1
mov dx,d_segend // 改为 较高端点的1/8作比较
cmp dx,d_seghead
ja use_segend
mov dx,d_seghead
}
use_segend:
asm {
cmp ax,dx
jbe retry_testsmooth
jmp not_smooth
}
retry_testsmooth:
asm {
mov ax,bx
xor dx,dx // 取单调段每步幅值(头尾差额除以个数)
mov cx,num_singleseg // 如变化梯度大于此比较值,则认为不平滑
div cx
cmp ax,b_pulse
jbe retest_smooth
jmp not_smooth
}
retest_smooth:
asm { // 如果自上次不平滑后,所得单调段已够
cmp d_smooth,0 // 组成一个平滑组,已求得当前平滑值时;
je smooth // 求出此段均值与平滑值的差额, 并且与其限定值比较
mov dx,cfsum_singleseg
mov ax,sum_singleseg
mov cx,num_singleseg
div cx
sub ax,d_smooth
jg exit_abs4
neg ax
}
exit_abs4:
asm {
cmp ax,b_minus
jbe smooth
jmp not_smooth
}

//能作平滑累加的单调段...
smooth:
asm {
mov ax,sum_singleseg // 为平滑单调段设置二组临时缓存区:
xchg ax,sum_newtempseg // 包括和累加器(sum_),和的进位
mov sum_oldtempseg,ax // 累加器(cfsum_),个数累加器(num_)
mov ax,cfsum_singleseg
xchg ax,cfsum_newtempseg // 每来一个平滑单调段时
mov cfsum_oldtempseg,ax // 则串移此缓存区
mov ax,num_singleseg
xchg ax,num_newtempseg
mov num_oldtempseg,ax
inc num_repeatseg // 判断连续平滑单调段的个数
cmp num_repeatseg,4 // 大于 4 时,认为够组成一个平滑组
jae can_addseg
}
tempexit:
asm jmp end_chgdirect
can_addseg:
asm {
mov m_picksmooth,1 // 置采到平滑组的标志
mov ax,sum_oldtempseg // 作平滑组的累加
add sum_smooth,ax
mov ax,cfsum_oldtempseg
adc cfsum_smooth,ax
mov ax,num_oldtempseg
add num_smooth,ax
}
asm { // 如平滑数大于2048 (16秒)
cmp num_smooth,2048 // 则以当前平滑值为重量结果
jb nothave_largesmooth // 以当前采集个数的2倍为预计总采集数
mov dx,cfsum_smooth // 然后退出
mov ax,sum_smooth
mov cx,num_smooth
div cx
shr cx,1
cmp dx,cx
jb largesmooth_nocf
add ax,1
}
largesmooth_nocf:
asm {
mov d_weight,ax
mov cx,num_smooth
mov num_weight,cx
mov ax,num_pick
shl ax,1
mov num_pick,ax
jmp exit_cj
}
nothave_largesmooth:
asm {
mov dx,cfsum_smooth // 求当前平滑值
mov ax,sum_smooth
mov cx,num_smooth
div cx
shr cx,1
cmp dx,cx
jb tempsmooth_nocf
add ax,1
}
tempsmooth_nocf:
asm {
mov d_smooth,ax
mov cx,min_smoothnum // 分析 是否采到大于0.5秒长度的
shr cx,1 // 并且小于车下台下限值的数据
cmp num_smooth,cx // 如是, 退出
jae cnt_test_num_trkgone
jmp tempexit
}
cnt_test_num_trkgone:
asm {
mov ax,d_smooth
cmp ax,b_trkgone
jbe exit_cj
jmp tempexit
}
exit_cj:

asm {
cmp num_pick, 640 // 如果采集数总共不超过 5秒
ja realy_exit // 不退出
jmp do_new_smooth
}
realy_exit:

asm {
mov m_weight,1
mov sample,0
jmp end_chaiji
}


// 遇到不在平滑范围内的单调段,舍弃它;
// 算出最近平稳值,并与已有暂存重量比较,直到得到结果
not_smooth:

asm {
cmp m_picksmooth,1 // 判断是否采到平滑组
je retest_havsmoodata
jmp do_new_smooth
}
retest_havsmoodata:
asm {
mov cx,min_smoothnum // 判断平滑组时间是否超过1秒
cmp num_smooth,cx // 如小于,不作比较处理
jae have_smoothdata
jmp do_new_smooth
}
have_smoothdata:
asm {
mov dx,cfsum_smooth // 求当前平滑值
mov ax,sum_smooth
mov cx,num_smooth
div cx
shr cx,1
cmp dx,cx
jb smooth_nocf
add ax,1
}
smooth_nocf:
asm {
mov d_smooth,ax
cmp ax,d_weight // 如当前平滑值较大,则更新暂存重量
ja renew_smooth
mov bx,d_weight
sub bx,ax
cmp bx,4
jbe testnum
jmp exit_cj // 如平滑均值下降大于80公斤,则退出
}
testnum:
asm {
mov cx,num_smooth
cmp cx,num_weight // 如平滑均值下降小于80公斤
ja renew_smooth // 取数据较长者为暂存重量
jmp do_new_smooth
}
renew_smooth:
asm {
mov ax,d_smooth
mov d_weight,ax
mov ax,num_smooth
mov num_weight,ax
}
do_new_smooth:
asm { // 复位有关平滑组变量
mov d_smooth,0
mov sum_smooth,0
mov cfsum_smooth,0
mov num_smooth,0
mov m_picksmooth,0
mov num_repeatseg,0
}
end_chgdirect: // 复位有关单调段变量
asm {
mov ax,d_prework
mov d_seghead,ax
mov d_segend,ax
mov sum_singleseg,ax
mov cfsum_singleseg,0
mov num_singleseg,1
jmp end_chaiji
}
/************************* jtcj ***********************************/

staticwork:
asm {
mov ax,d_prework // 作和及个数的累加
add jjsum_period,ax
adc jjcfsum_period,0
inc jjnum_period
mov cx,d_cjpl
cmp jjnum_period,cx
je cmp_period_data
jmp end_chaiji
}
cmp_period_data:
asm { // 到2秒时取出均值
mov dx,jjcfsum_period
mov ax,jjsum_period
mov cx,jjnum_period
div cx
shr cx,1
cmp dx,cx
jb jjperiod_nocf
add ax,1
}
jjperiod_nocf:
asm {
mov jjsum_period,0 // 复位和及个数累加器
mov jjcfsum_period,0
mov jjnum_period,0
mov d_taizhi,ax // 此均值作为台值差显示,
mov m_taizhi,1 // 以表示车上台的动态过程
mov jjd_period,ax
sub ax,jjd_tempweight // 此均值与当前暂存重量比较
jg exit_abs5 // 二者偏差小于jjb_pulse时
neg ax // 认为处于停稳状态
}
exit_abs5:
asm {
cmp ax,jjb_pulse
jbe jjbe_smooth
jmp jjnot_smooth
}
jjbe_smooth:
asm {
mov ax,jjd_period
add jjsum_repeatnear,ax
inc jjnum_repeatnear // 判断连续的近似均值组个数

xor dx,dx
mov ax,jjsum_repeatnear
mov cx,jjnum_repeatnear
div cx
shr cx,1
cmp dx,cx
jb jjresult_nocf
add ax,1
}
jjresult_nocf:
asm {
mov jjd_tempweight,ax
cmp jjnum_repeatnear,jjnum_repeat //达到jjnum_repeat(10)个时
je jjhav_result // 认为采到结果
jmp end_chaiji
}
jjhav_result:
asm {
mov ax,jjd_tempweight // 取采集结果,置有关标志
mov d_weight,ax
mov m_weight,1
mov sample,0
jmp end_chaiji
}
jjnot_smooth:
asm {
mov ax,jjd_period // 只要一次不平滑,
mov jjd_tempweight,ax // 则更新暂存重量
mov jjsum_repeatnear,0 // 并复位近似均值组的累加器
mov jjnum_repeatnear,0
}
end_chaiji:
asm pop di
asm pop si
}

int getcj(void)
/***取采集结果: 返回值为 0 时, 无结果; 为 1 时, 静态计量的重量结果
为 2 时, 动态计量的重量和速度结果; 为 3 时, 台值误差结果 ****/
{
weight=0.0;
speed=0.0;
if(m_weight==1) {
m_weight=0;
d_weight=(int)(d_weight*d_adjust); // 校正处理
weight=d_weight*0.02;
if(m_option==2) {
if( num_weight < 2*min_smoothnum )
speed=9.0;
else
speed=CJPL*3.6*18.0/num_pick;
return 2;
}
else
return 1;
}
else
if(m_taizhi==1) {
m_taizhi= 0;
weight=d_taizhi*0.02;
return 3;
}
else
return 0;
}
// End Of Applications.

...全文
505 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
Frank0233 2000-12-15
  • 打赏
  • 举报
回复
不然我就给我朋友啦!
goodthingxu 2000-12-14
  • 打赏
  • 举报
回复
你给斑竹写信好了,我想你在这里念叨他,他是听不见的。忙着呢!
Frank0233 2000-12-13
  • 打赏
  • 举报
回复
斑竹.没有人回答,我想结束问题,
Frank0233 2000-12-10
  • 打赏
  • 举报
回复
斑竹.没有人回答,我想结束问题,怎么办????? 斑竹.没有人回答,我想结束问题,怎么办????? 斑竹.没有人回答,我想结束问题,怎么办????? 斑竹.没有人回答,我想结束问题,怎么办?????
Frank0233 2000-12-04
  • 打赏
  • 举报
回复
斑竹.没有人回答,我想结束问题,怎么办????? 斑竹.没有人回答,我想结束问题,怎么办????? 斑竹.没有人回答,我想结束问题,怎么办????? 斑竹.没有人回答,我想结束问题,怎么办????? 斑竹.没有人回答,我想结束问题,怎么办????? 斑竹.没有人回答,我想结束问题,怎么办????? 斑竹.没有人回答,我想结束问题,怎么办????? 斑竹.没有人回答,我想结束问题,怎么办?????
Frank0233 2000-12-04
  • 打赏
  • 举报
回复
to comm235
兄弟,首先我要批评你,你真的很无聊,你知道吗,原本的程序根本就不能用,我花了一个星期的
日日夜夜,才修改成功的,那个前辈早都跑路了,现在我遇到平台的移植问题,如果用我的个人的能力,实在是太难(我不是说根本做不到),为了在很短的时间解决问题,所以我把他贴出来,目的也不过是为了解决问题,这种代码至于公布会损害什么利益,其实根本就谈不上!
在我所在的单位,是一个研究中心,这里的程序员向走马灯似的,等我来的时候,仅仅有点tc的基础,可是在这里也能算是c的行家,你说多么好笑.没有人指导,没有资料(为了做好这个项目,我自己买书花的钱都块达到我的工资了).我唯一可以交流的地方就是上网.
所以这个采集的核心算法,虽然应该保密,但是对于我的工作性质和开发需要,贴出来并没有不尊重别人,如果你所说的那个"别人"还可以来驾驭这个程序,那就好了,可是现在只有我一个人在做,
这里和你也将不明白,你给我讲的那些见解,说实话,一点都没有和我问题相关,就比如一个感冒了
你让他改善饮食结构,哈,有意思.
其实这里的问题是,里面的代码主要是汇编部分的指令是老的,在386,486,和586下可以得到正确的运算结果,但是在奔腾2,3下有的指令是要修改的,包括其中的c的 一些函数调用
我想你也就是大概的看了一下这段代码,没有仔细看它的实现方式.
至于什么"体制就错了",这个问题你也没有真正的说清楚,什么体制?你在这里看出了我的调用了吗?这段代码是采集的核心算法,只给了调用的接口,在我的主程序里面实话给我说吧已经实现了"实时"采集,具体的实现方法估计你是没有问津过的了,不然怎么只知道windows的限制,而没有说出如何利用windows现有的支持实现"实时"采集.
像你说的这些,我想刚开始接触这些的人,翻翻书,看看资料都可以说出来,关键在于具体的实现细节,你什么也没有说,叫我说你什么好呢,嗨.................
最后就是你的那个什么方案要付费的说法,真的对不起,我的单位是一个事业单位,根本就不按照
市场规律运作,反正有的是国家经费.大家都是在混,我在这样的环境下已经被折磨的"遍体鳞伤"
我也没有老板,不过有一群专门拍上司马屁的领导,我想他不会关心你的方案.这样的环境我熬了翌年,为何要这么长的时间,主要是我想为出去多积累点要价的本钱.
很庆幸我已经出来了,原来我在那个狗批研究中心,一个月一两千块钱,现在是它的2~3倍了,还不包括我的奖金.所以这段代码的维护不知道又是哪个倒霉鬼来维护了.不过我还是对得起单位,走的时候,这个程序在586-166的机器上运行良好,移植到P3我可以不用管了.
所以,大家不用在这里浪费时间了,如果你想见识我是如何实现"实时"的采集,到是可以讨论
最近用串口在做文件传送,遇到了很多了问题也没有功夫管这个贴子了,所以想结束它
com235 2000-12-04
  • 打赏
  • 举报
回复
本人的程序控制256个串口传图片,每天串几百M,还要抗夭折
如何?
到C++Bulid去看com1-256的帖子去,有问题问我!
WP950214 2000-12-04
  • 打赏
  • 举报
回复
我解决了
随风bj 2000-12-02
  • 打赏
  • 举报
回复
要移植不如重新编一个,当然你要会写Windows NT 或98驱动程序的话也可以实现,请我吧,这种问题EASY:)
com235 2000-12-02
  • 打赏
  • 举报
回复
兄弟,首先我要批评你,你不应该把原代码贴出来,不要说对公司如何,对你的前辈如何,至少对你的饭碗不好。 你首先应该学会做人,尊重别人,别人的劳动,你自己也许同样会靠程序来养活自己。

Windows从来都不是一个实时操作系统,知道“队列”是什么意思吗?意味着什么吗?完全不在你掌握范围的延时。

凡涉及到你的类似问题,体制就错了,所以在高速串口通信中有那么多的问题!该类数据是不可再现的。现在在windows下,要么你做低速的(机器好,使延时被忽略,)。要么卡(采集设备)是进一步智能化的,处理好数据,PC只负责M & I/O ->存储,显示,人机界面,当然,一般情况下,其采集是离散的,不连续的,

你应该是幸福的了,用DSP吧。也许8031就搞定了。当然,PCI总线接口卡可不是一般公司所能涉及的领域。

让你的老板请我做一个新的方案吧。要付费的!


下回别再这样了,很不好,想必你应该已经知道自己错了!
whoo 2000-12-02
  • 打赏
  • 举报
回复
兄弟:这么长的代码,你怎么全贴出来来了。不怕有人盗版侵权。
问题应该是出在采集程序上,和分析无关。你的程序我一下子也看不过来(汇编基础太差!)不过大意好象是采集前诸多延迟。
这种处理方式是不恰当的。延迟的时间跟CPU的速度有很大关系。CPU速度快了,原来的延迟时间就变短了。建议:1,简单的方法,根据CPU调整延迟;2 彻底的方法,更改延迟的做法。用其他肯定的方法确定断口数据准备好。
Frank0233 2000-12-02
  • 打赏
  • 举报
回复
斑竹.没有人回答,我想结束问题,怎么办????? 斑竹.没有人回答,我想结束问题,怎么办????? 斑竹.没有人回答,我想结束问题,怎么办????? 斑竹.没有人回答,我想结束问题,怎么办????? 斑竹.没有人回答,我想结束问题,怎么办????? 斑竹.没有人回答,我想结束问题,怎么办????? 斑竹.没有人回答,我想结束问题,怎么办????? 斑竹.没有人回答,我想结束问题,怎么办????? 斑竹.没有人回答,我想结束问题,怎么办????? 斑竹.没有人回答,我想结束问题,怎么办????? 斑竹.没有人回答,我想结束问题,怎么办????? 斑竹.没有人回答,我想结束问题,怎么办?????
Frank0233 2000-12-02
  • 打赏
  • 举报
回复
this program is code in bc3.1 but in vc++ ,some function cannot use
how to change?
wjf 2000-12-01
  • 打赏
  • 举报
回复
现在怎么流行大段的贴代码?开的头痛!
sunhongbo 2000-11-29
  • 打赏
  • 举报
回复
你可以考虑在VC5或更低的版本下编译,你可以不用写DRIVER,最好不要用汇编.如果方便将你的错误提示说一下.
EMAIL:YFMS@263.NET

Frank0233 2000-11-29
  • 打赏
  • 举报
回复
斑竹.没有人回答,我想结束问题,怎么办?????
Frank0233 2000-11-03
  • 打赏
  • 举报
回复
急用!!!!!!!!!!!
我的信箱
mailwp@21cn.com
对了,我在vc下面出现很多错误,谁可以告诉我为何?

16,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧