易码技术论坛

 找回密码
 加入易码
搜索
查看: 324396|回复: 16

谁帮我测试一下这个程序?(tc808)

[复制链接]
发表于 2006-9-30 13:42:53 | 显示全部楼层
等我有时间帮你测试啊
发表于 2006-9-30 13:43:20 | 显示全部楼层
感谢楼主的精神啊~
发表于 2006-9-30 18:11:42 | 显示全部楼层
加油 加油
我帮你
麻烦你编译好发给我 OK?
我手头有808和NC2600,TC800在4号可以拿到.
发表于 2006-9-30 18:23:21 | 显示全部楼层
那个内部使用的编译器在gvmaker专区有下载啊,楼主可以去看看
发表于 2006-10-1 15:02:43 | 显示全部楼层
我试试,不会有伤害吧
发表于 2006-10-1 15:24:55 | 显示全部楼层
错误:语句结尾无;发生在d:\My Documents\Sample1.c的111行
发表于 2006-10-1 16:05:13 | 显示全部楼层
你的原代码有问题,不过我修改了
发表于 2006-10-1 16:14:02 | 显示全部楼层
一处少了;
一处的write_uart 写反了。

但808显示无法建立连接,我是用800的闪存管理器连接的。

是不是波特率设置有问题?
发表于 2006-10-1 16:23:13 | 显示全部楼层
把这个给大家用用

PS:ggv原来的论坛还有

gvmaker4tc808.rar

122 KB, 下载次数: 12

808的GVmakerIDE

发表于 2006-10-1 16:24:03 | 显示全部楼层
忘了说,原来必须有GVmakerIDE,这放在同一文件夹
发表于 2006-10-1 17:31:48 | 显示全部楼层
编译好了发上来.我来测试和NC2600的通讯
 楼主| 发表于 2006-10-7 15:24:50 | 显示全部楼层
不好意思那个int nthstrinstr()有点问题,但没太大影响。
以前我在我的NC2600上实现过30%(与一pc2300),用的是汇编(太不好调试了!!!)。
不过当时的那个有点问题,执行到创建目录对方就出错了,完了大家都死循环了。
这个至少说明NC2600与其他类似型号间通信只是个软件问题。我可以保证我对FTPLINK通讯协议的理解上是没什么问题的。

我现在有个想法,想想实现也很简单,就是为老型号的机器加入基本的通讯函数,方法就是改解释器,我想很多人都会。至于伪指令可以兼容TC800的那几个通讯函数,有现成的就拿来用吧。
由于本人的星星挂了好几个月了,直到有同学买了个TC800我才偶尔能玩玩。
发表于 2006-10-8 13:44:48 | 显示全部楼层
把你的函数直接该为神月的程序应该行吧!!
我原来的想法就是用808的函数编成800的函数,直接使用。
 楼主| 发表于 2006-10-9 16:08:30 | 显示全部楼层
800串口定义貌似与其他型号不同,我试过了。
发表于 2006-11-20 22:53:02 | 显示全部楼层
是不一样,要是一样 就不能接 机器人 和 编码机了!(纯属揣测)
发表于 2006-11-21 12:46:56 | 显示全部楼层
我与nc3000试的,不好使。
 楼主| 发表于 2006-9-30 13:25:37 | 显示全部楼层 |阅读模式
由于我没有TC808和那个所谓内部使用的编译器,只好贴出来了。
  1. //这个是按照PC端的FTPLINK文件下载的协议编写的
  2. //目的是使WQX能与装有SYS-TOOLS.bin的WQX有线通讯
  3. //对方使用“文件传输”,已方使用这个程序
  4. //TC800上编译的,与PC2300的尝试失败,好像是硬件的原因,总是在对方断掉了才收到几个数
  5. //现在改成了TC808的
  6. //做得有些简陋
  7. //注意对方是使用SYS-TOOLS的文件传输
  8. #define TRUE      -1
  9. #define FALSE      0
  10. #define _EXEC      0
  11. #define _SHOW_TEXT  1
  12. #define _CH_DIR    2
  13. #define _FILE_OPEN_W 3
  14. #define _FILE_WRITE  4
  15. #define _FILE_CLOSE  5
  16. #define _END      6
  17. #define _FILE_OPEN_R 7
  18. #define _FILE_RD_UP  8
  19. #define MAX_RETRY   100
  20. #define MAX_FAILURE  100
  21. #define CANT_CONNECT 1
  22. #define FAILED     2
  23. #define CANCELED    3
  24. char buffer[4096];  //缓冲
  25. void die(int n)
  26. {
  27. close_uart();
  28. SetScreen(1);
  29. if(n==CANT_CONNECT) printf("\n无法建立接连!");
  30. if(n==FAILED) printf("\n通迅失败!");
  31. if(n==CANCELED) printf("\n通迅被取消!");
  32. getchar();
  33. exit(0);
  34. }
  35. void wait(int s)
  36. {
  37. while(s--)
  38. {
  39.   if(Inkey()==27) die(CANCELED);
  40.   putchar('.');
  41.   Delay(1000);
  42. }
  43. }
  44. int nthstrinstr(int s1,int s2,int n) //返回s2中s1第n次出现的位置,n<0返回最后一个的位置,n=0返回出现次数
  45. {
  46. int cur,next,count;
  47. if(!n) n=-1;
  48. next=strstr(s2,s1);
  49. while(next&&(n--))
  50. {
  51.   cur=next;
  52.   next=strstr(cur+strlen(s1),s1);
  53.   count++;
  54. }
  55. if(n!=-1) return count;
  56. else return cur-s2+1;
  57. }
  58. long choose(int path) //path至少应初始化为"/"
  59. {
  60. char tmp[15];
  61. ChDir("/");
  62. for(;;)
  63. {
  64.   if(!FileList(tmp)||!strcmp(tmp,".."))
  65.   {
  66.   if(nthstrinstr("/",path,0)==1) return FALSE;
  67.   else
  68.   {
  69.    ChDir("..");  //上级目录
  70.    *(path+strlen(path)-1)=0;  //去掉最后一个"/"
  71.    *(path+nthstrinstr("/",path,-1)-1)=0; //同上
  72.    continue;
  73.   }
  74.   }
  75. strcat(path,tmp);
  76. if(ChDir(tmp)) strcat(path,"/");
  77. else return TRUE;
  78. }
  79. }
  80. long fsize(int path)
  81. {
  82. char fp;
  83. long sz;
  84. fp=fopen(path,"ab+");
  85. sz=ftell(fp);
  86. fclose(fp);
  87. return sz;
  88. }
  89. char getXorVal(int data,int sz)
  90. {
  91. char xor;
  92. int i;
  93. for(i=0;i<sz;i++)
  94.   xor=xor^(*(data+i));
  95. return xor;
  96. }
  97. void ComRead(int ptr,int sz)
  98. {
  99. int i,tmp,failure;
  100. while(i<sz&&failure<MAX_FAILURE)
  101. {
  102.   tmp=read_uart()
  103.   if(tmp>0xff) *(ptr+i++)=tmp&0xff;
  104.   else failure++;
  105. }
  106. if(failure>=MAX_FAILURE) die(FAILED);
  107. }
  108. void ComWrite(int ptr,int sz)
  109. {
  110. int i;
  111. for(i=0;i<sz;i++)
  112.   uart_write(*(ptr+i));
  113. }
  114. void start()
  115. {
  116. int retry;
  117. memset(buffer,0,4);
  118. open_uart(1); //baud rate is set to 115200
  119. for(retry=0;retry<MAX_RETRY;retry++)
  120. {
  121.   ComRead(buffer,3);
  122.   if(strcmp(buffer,"WQX")==0)
  123.   {
  124.   write_uart(0x4c);
  125.   break;
  126.   }
  127. }
  128. if(retry>=MAX_RETRY) die(CANT_CONNECT);
  129. }
  130. void reset()
  131. {
  132. write_uart(0xcf);
  133. write_uart(0xcb);
  134. }
  135. void sendCommandData(char command,int data,int sz)
  136. {
  137. char xor;
  138. int failure;
  139. xor=getXorVal(data,sz);
  140. for(failure=0;failure<MAX_FAILURE;failure++)
  141. {
  142.   if(read_uart()&0xff!=5)
  143.   {
  144.   reset();
  145.   continue;
  146.   }
  147.   write_uart(command);
  148.   write_uart(sz%256);
  149.   write_uart(sz/256);
  150.   if(sz==0) break;
  151.   else
  152.   {
  153.   ComWrite(data,sz);
  154.   write_uart(xor);
  155.   if(read_uart()&0xff==&#39;O&#39;) break;
  156.   else reset();
  157.   }
  158. }
  159. if(failure>=MAX_FAILURE) die(FAILED);
  160. }
  161. void sendText()
  162. {
  163. char text[100];
  164. strcpy(text,"                              开始通迅                          by ttheaven ");
  165. sendCommandData(_SHOW_TEXT,text,100);
  166. }
  167. void sendFolderName(int path)//逐层发送目录名
  168. /*如"/xxx/yyy/zzz.bin"将依次发送"/xxx","/yyy"*/
  169. {
  170. char foldername[15],i;
  171. i=nthstrinstr("/",path,0);
  172. for(;i>1;i--)
  173. {
  174.   memset(foldername,0,15);
  175.   memcpy(foldername,path,nthstrinstr("/",path,2)-1);
  176.   memmove(path,path+nthstrinstr("/",path,2)-1,strlen(path));
  177.   sendCommandData(_CH_DIR,foldername,15);
  178.   putchar(&#39;.&#39;);
  179. }
  180. }
  181. void sendFile(int path)
  182. {
  183. char fp;
  184. long fsz,sent,csz;
  185. fsz=fsize(path);
  186. fp=fopen(path,"r");
  187. sendCommandData(_FILE_OPEN_W,path,strlen(path)+1);
  188. while(sent<fsz)
  189. {
  190.   csz=fread(buffer,1,4096,fp);
  191.   sent=sent+csz;
  192.   sendCommandData(_FILE_WRITE,buffer,csz);
  193.   putchar(&#39;.&#39;);
  194. }
  195. fclose(fp);
  196. sendCommandData(_FILE_CLOSE,0,0);
  197. }
  198. void end()
  199. {
  200. loop:
  201. sendCommandData(_END,0,0);
  202. if(read_uart()&0xff!=&#39;E&#39;) goto loop;
  203. close_uart();
  204. }
  205. void SEND()
  206. {
  207. char fullname[60];
  208. strcpy(fullname,"/");
  209. if(choose(fullname))
  210. {
  211.   SetScreen(1);
  212.   printf("即将开始发送文件");
  213.   wait(3);
  214.   start();
  215.   sendText();
  216.   printf("\n发送目录名称");
  217.   sendFolderName(fullname);
  218.   printf("\n发送文件");
  219.   sendFile(fullname);
  220.   end();
  221.   printf("\n通迅结束...");
  222. }
  223. else die(CANCELED);
  224. }
  225. void main()
  226. {
  227. SEND();
  228. }
复制代码
您需要登录后才可以回帖 登录 | 加入易码

本版积分规则

Archiver|手机版|小黑屋|EMAX Studio

GMT+8, 2025-5-1 12:29 , Processed in 0.015087 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表