7188e3,Xserver框架下的Socket和串口读取问题 点击:880 | 回复:3



qxf

    
  • 精华:0帖
  • 求助:0帖
  • 帖子:8帖 | 2回
  • 年度积分:0
  • 历史总积分:76
  • 注册:2007年4月27日
发表于:2007-05-06 16:35:00
楼主
 在7188e3上,Xserver框架下实现:InitUser建立Socket,然后在void UserLoopFun(void)中循环查询串口1是否有数据,有的话则读取,然后通过已经建立的socket发送读到的数据,但是COM1的输入缓冲里中是否有数据的话,第一个if 的内嵌语句一直没有执行(因为返回0),但是程序几秒就终止了,按道理它应该一直在循环的呀,怎么会终止呢?是不是IsCom1函数不能相隔很短的时间执行,或者还是MiniOS什么超时了,还是void UserLoopFun(void)这个函数必须在一定时间内结束?请大虾指教!

while (1) {
       if (IsCom1()) {//判断COM1是否有数据
                  printCom1("in while!")   ;
                  ReadCom1n (typeData, 1);//读取数据
                  Ret = SendSocketBinaryCmd(Outskt,typeData, strlen(typeData));//通过Socket发送数据
                 if(iRet < 0) {
                         printCom1("Socket error!");
                 }
         printCom1 (typeData);// for debug
        ClearCom1();
        break;
        }
}



闪闪

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 90回
  • 年度积分:0
  • 历史总积分:206
  • 注册:2005年12月05日
发表于:2007-05-08 10:07:00
1楼
去掉   break 试试。。。

鱼翅膀

  • 精华:0帖
  • 求助:0帖
  • 帖子:3帖 | 11回
  • 年度积分:0
  • 历史总积分:26
  • 注册:2006年3月08日
发表于:2007-05-08 14:13:00
2楼
Xserver框架内UserLoopFun为7188以标准扫描周期自动运行的用户自定义子函数,本身就是一个死循环函数,所以没有必要使用死循环while (1).
另外,你需要判断COM是否有数据,如果数据量不大的话,推荐直接使用ReadCom1n (typeData, 1),然后执行逻辑if (typeData=="")来判断是否有数..

更详细的技术支持请访问泓格官方论坛
http://www.icpdas.com.cn/bbs/index.asp

还是老实人

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 102回
  • 年度积分:0
  • 历史总积分:119
  • 注册:2005年1月24日
发表于:2007-05-08 15:14:00
3楼
请把while (1) 循环去掉 xserver架构本身会做一个循环 每个循环都会运行一次UserLoopFun的东西,这样应该就没问题,否则程序永远卡死在一个循环里一定会出问题

热门招聘
相关主题

官方公众号

智造工程师