Chinaunix
标题:
让我郁闷了一个月的问题(附源码和反汇编代码)
[打印本页]
作者:
元鹤
时间:
2005-07-14 11:32
标题:
让我郁闷了一个月的问题(附源码和反汇编代码)
在上位机上作一个与一固定外设的通信程序。通过串口通信模拟程序测试,该程序收发数据正常。但就是不能与该外设通信。改外设有一简单的时序要求:通过CTS handshake信号控制数据收发。CTS为Low时可通过RX接收上位机的命令。接收后100ms上开始通过TX向上位机发送数据。
我程序中的做法是:
监听CTS管脚状态
if(CTS==1)
发送命令
任务等待100ms
for(;;){
接收数据
将接收到的数据输出到指定文件
}
还有一个可能就是大端小端的问题。我使用的上位机是小端的,这是否会有影响。比如发送命令0x52 0x04
本人愚笨,还请高人指教,不胜感谢!
作者:
元鹤
时间:
2005-07-15 10:38
标题:
让我郁闷了一个月的问题(附源码和反汇编代码)
如下是我写的源代码,附件中是反编译的汇编代码(有两段,一段是全部的,一段是从执行readRFID开始的)
头文件test.h
#ifdef DEBUG
#include <util/tmonitor.h>;
#endif
#include <basic.h>;
#include <sys/consio.h>;
#include <tk/util.h>;
#include <btron/tkcall.h>;
#include <device/rs.h>;
#include <device/serialio.h>;
#include <stdio.h>;
#include <stdlib.h>;
#include <string.h>;
#include <sys/svc/ifconsio.h>;
#include <machine.h>;
#include <signal.h>;
struct watermelon{
int dd,asiz,er ;
RsMode rsmode;
RsFlow rsflow;
RsStat rsstat;
FILE *fp;
unsigned char sbuf[1024],rbuf[2048];
};
typedef struct watermelon * watermelon_p;
复制代码
test.c
#include "test.h"
#ifdef DEBUG
#include <util/tmonitor.h>;
#endif
int rsInit(watermelon_p wp){
ER er;
/*clear struct*/
memset(&(wp->;rsmode),0,sizeof(wp->;rsmode));
memset(&(wp->;rsflow),0,sizeof(wp->;rsflow));
memset(&(wp->;rsstat),0,sizeof(wp->;rsstat));
/*set rsmode*/
wp->;rsmode.parity=0;
wp->;rsmode.datalen=3;
wp->;rsmode.stopbits=0;
wp->;rsmode.baud=38400;
er=tk_swri_dev(wp->;dd,DN_RSMODE,&(wp->;rsmode),sizeof(wp->;rsmode),&(wp->;asiz));
if(er<0) return wp->;er = -104;
/*set rsflow*/
wp->;rsflow.csflow = 1; wp->;rsflow.rxflow = 1;/*not set XON,XOFF yet*/
er=tk_swri_dev(wp->;dd,DN_RSFLOW,&(wp->;rsflow),sizeof(wp->;rsflow),&(wp->;asiz));
if(er<0) return wp->;er = -105;
return 0;
}
int rsOpen(watermelon_p wp){
wp->;dd = tk_opn_dev("rsa",TD_UPDATE);
if(wp->;dd<0) return wp->;er = -106;
return 0;
}
int readRFID(watermelon_p wp){
ER er;
wp->;sbuf[0]=0x52;
wp->;sbuf[1]=0x04;
er = serial_ctl(0,-DN_RSSTAT,(UW*)&(wp->;rsstat));
if(er<0){wp->;er = -112;}
if(wp->;rsstat.CS == 1){
er = serial_out(0,wp->;sbuf,2,&(wp->;asiz),-1);
if(er<0){wp->;er = -110;}
}
tk_slp_tsk(100);
for(;;){
//tk_slp_tsk(100);
er = serial_in(0,wp->;rbuf,1,&(wp->;asiz),-1);
if(er<0){wp->;er = -111;}
er = fprintf(wp->;fp,"%s",wp->;rbuf);
if(er<0){wp->;er = -113;}
fflush(wp->;fp);
}
return 0;
}
EXPORT W main(INT ac, char *av[]){
#ifdef DEBUG
tm_monitor();
#endif
int er;
watermelon_p wp;
tk_slp_tsk(2000);
if((wp = malloc(sizeof(struct watermelon)))==NULL){
wp->;er = -100;
goto E;
}
wp->;fp = fopen("/SYS/file","a+");
if(wp->;fp==NULL){
wp->;er = -107;
goto E;
}
er = rsOpen(wp);
if(er<0)goto E;
er = rsInit(wp);
if(er<0)goto E;
er=readRFID(wp);
if(er<0)goto E;
er = tk_cls_dev(wp->;dd,0);
if(er<0){wp->;er = -120;goto E;}
er= fclose(wp->;fp);
if(er<0);{wp->;er = -121; goto E;}
return 0;
E:
fprintf(wp->;fp,"error:%dn",wp->;er);
return 0;
}
复制代码
汇编代码在附件中
tty.gif
2005-07-15 10:38 上传
点击文件名下载附件
0 Bytes, 下载次数: 24
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2