免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1288 | 回复: 1
打印 上一主题 下一主题

让我郁闷了一个月的问题(附源码和反汇编代码) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-07-14 11:32 |只看该作者 |倒序浏览
在上位机上作一个与一固定外设的通信程序。通过串口通信模拟程序测试,该程序收发数据正常。但就是不能与该外设通信。改外设有一简单的时序要求:通过CTS handshake信号控制数据收发。CTS为Low时可通过RX接收上位机的命令。接收后100ms上开始通过TX向上位机发送数据。

我程序中的做法是:

监听CTS管脚状态
  if(CTS==1)
      发送命令
    任务等待100ms
for(;;){

      接收数据
    将接收到的数据输出到指定文件
}

还有一个可能就是大端小端的问题。我使用的上位机是小端的,这是否会有影响。比如发送命令0x52 0x04
本人愚笨,还请高人指教,不胜感谢!

论坛徽章:
0
2 [报告]
发表于 2005-07-15 10:38 |只看该作者

让我郁闷了一个月的问题(附源码和反汇编代码)

如下是我写的源代码,附件中是反编译的汇编代码(有两段,一段是全部的,一段是从执行readRFID开始的)

头文件test.h

  1. #ifdef DEBUG
  2. #include <util/tmonitor.h>;
  3. #endif

  4. #include <basic.h>;
  5. #include <sys/consio.h>;
  6. #include <tk/util.h>;
  7. #include <btron/tkcall.h>;
  8. #include <device/rs.h>;
  9. #include <device/serialio.h>;
  10. #include <stdio.h>;
  11. #include <stdlib.h>;
  12. #include <string.h>;
  13. #include <sys/svc/ifconsio.h>;
  14. #include <machine.h>;
  15. #include <signal.h>;

  16. struct watermelon{
  17. int dd,asiz,er ;
  18. RsMode rsmode;
  19. RsFlow rsflow;
  20. RsStat rsstat;
  21. FILE *fp;
  22. unsigned char sbuf[1024],rbuf[2048];
  23. };
  24. typedef struct watermelon * watermelon_p;
复制代码


test.c


  1. #include "test.h"

  2. #ifdef DEBUG
  3. #include <util/tmonitor.h>;
  4. #endif


  5. int rsInit(watermelon_p wp){

  6. ER er;

  7. /*clear struct*/
  8. memset(&(wp->;rsmode),0,sizeof(wp->;rsmode));
  9. memset(&(wp->;rsflow),0,sizeof(wp->;rsflow));
  10. memset(&(wp->;rsstat),0,sizeof(wp->;rsstat));

  11. /*set rsmode*/
  12. wp->;rsmode.parity=0;
  13. wp->;rsmode.datalen=3;
  14. wp->;rsmode.stopbits=0;
  15. wp->;rsmode.baud=38400;
  16. er=tk_swri_dev(wp->;dd,DN_RSMODE,&(wp->;rsmode),sizeof(wp->;rsmode),&(wp->;asiz));
  17. if(er<0) return wp->;er = -104;

  18. /*set rsflow*/
  19. wp->;rsflow.csflow = 1; wp->;rsflow.rxflow = 1;/*not set XON,XOFF yet*/
  20. er=tk_swri_dev(wp->;dd,DN_RSFLOW,&(wp->;rsflow),sizeof(wp->;rsflow),&(wp->;asiz));
  21. if(er<0) return wp->;er = -105;

  22. return 0;
  23. }

  24. int rsOpen(watermelon_p wp){
  25. wp->;dd = tk_opn_dev("rsa",TD_UPDATE);
  26. if(wp->;dd<0) return wp->;er = -106;
  27. return 0;
  28. }

  29. int readRFID(watermelon_p wp){

  30. ER er;
  31. wp->;sbuf[0]=0x52;
  32. wp->;sbuf[1]=0x04;

  33. er = serial_ctl(0,-DN_RSSTAT,(UW*)&(wp->;rsstat));
  34.   if(er<0){wp->;er = -112;}

  35.   if(wp->;rsstat.CS == 1){
  36.     er = serial_out(0,wp->;sbuf,2,&(wp->;asiz),-1);
  37.     if(er<0){wp->;er = -110;}
  38.   }

  39.   tk_slp_tsk(100);

  40. for(;;){
  41.    
  42.   //tk_slp_tsk(100);

  43.     er = serial_in(0,wp->;rbuf,1,&(wp->;asiz),-1);
  44.     if(er<0){wp->;er = -111;}
  45.   
  46.     er = fprintf(wp->;fp,"%s",wp->;rbuf);
  47.    
  48.     if(er<0){wp->;er = -113;}
  49.     fflush(wp->;fp);
  50.   
  51. }
  52. return 0;
  53. }

  54. EXPORT W main(INT ac, char *av[]){
  55. #ifdef DEBUG
  56. tm_monitor();
  57. #endif

  58. int er;
  59. watermelon_p wp;

  60. tk_slp_tsk(2000);

  61. if((wp = malloc(sizeof(struct watermelon)))==NULL){
  62.   wp->;er = -100;
  63.   goto E;
  64. }

  65. wp->;fp = fopen("/SYS/file","a+");
  66. if(wp->;fp==NULL){
  67.   wp->;er = -107;
  68.   goto E;
  69. }

  70. er = rsOpen(wp);
  71. if(er<0)goto E;

  72. er = rsInit(wp);
  73. if(er<0)goto E;

  74. er=readRFID(wp);
  75. if(er<0)goto E;

  76. er = tk_cls_dev(wp->;dd,0);
  77. if(er<0){wp->;er = -120;goto E;}

  78. er= fclose(wp->;fp);
  79. if(er<0);{wp->;er = -121; goto E;}

  80. return 0;
  81. E:
  82. fprintf(wp->;fp,"error:%dn",wp->;er);
  83. return 0;
  84. }
复制代码


汇编代码在附件中

tty.gif

0 Bytes, 下载次数: 257

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP