- 论坛徽章:
- 0
|
让我郁闷了一个月的问题(附源码和反汇编代码)
如下是我写的源代码,附件中是反编译的汇编代码(有两段,一段是全部的,一段是从执行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;
- }
复制代码
汇编代码在附件中 |
|