mqx操作系统之sci通信的问题

发表于:2012-11-28 10:27

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:duwufeng    来源:51Testing软件测试网采编

  由于项目中用到了mcu的sci通信,而mqx又恰恰内部集成了相关模块的驱动,那么对我编写相关模块的难度可就降低很多了,但是系统级编程的要求无疑提高了很多,有得有失嘛!

  在调试sci的时候,遇到了2个问题,跟大家分享一下:

  1、每次系统在初始化的时候,串口会自动发送2-3个字节的0x00数据,给其他相关模块造成干扰。

  2、每次sci输出之后,系统会自动添加2-3个字节的数据0x00.比如我发送了32个字节,可他收到的是33个字节。

  经过分析发现,原因如下:

  1、系统在初始化时,由于要对bsp进行初始化,串口当然也在其中,那么数据引脚也当然需要由不定状态,转换为确定状态。这就出现了错觉,以为发送了0x00的数据。

  该原因是我一个经验丰富的同事,曾遇到的问题,他跟我说以前,他们组就因为这个问题搞了2个星期,没想到是系统本身的特性。呵呵,还好这个理由我接受。

  2、这个问题就跟我的代码有关了。由于我深受linux代码影响,起初在设计发送任务时,每次接受到数据,就打开sci,当发送完毕后在关闭sci,每次发送数据都是这样。起初个人以为,当你的任务不用端口时,就要记得关闭,省得对别人造成干扰。但是这就出现了第2个问题了。接收端会受到一些无用的数据。

  后来,我就改成了sci发送任务,打开sci端口后,就不再关闭,死循环阻塞等待消息到来,当有消息时,就发送没有就阻塞。不再频繁开关sci端口。这才没有了第二个问题。

  但是心中对mqx的sci内部驱动,有些许不爽。我关闭sci端口怎么会出现无用数据呢?姑且认为是mqx的一个小bug吧,你系统初始化时,接收到了无用数据,我认了,可以理解毕竟系统都还没起来呢。可是,在使用过程中,出现了这样的问题,就有点不应该了。呵呵

  附上部分源代码:(有什么需要改进的地方,大家不要客气啊)

/* open a message queue */
   sci1_qid = _msgq_open(QNUM_SCI1_SEND_TASK, 0);
   if(sci1_qid == 0)
   {
      // printf("\nCould not open the server message queue\n");
      _mqx_exit(0);
   }
  
   //open the sci1 channel
   sci1_dev = fopen(BASEBOARD_HEATBOARD_CHANNEL, NULL);  
   if(sci1_dev == NULL)
   {
      /* device could not be opened */
      _task_block();
   }
        
   while (TRUE)
   {
      /* receive the message with block mode */
      msg_ptr = _msgq_receive(sci1_qid, 0);
     
      if (msg_ptr == NULL)
      {
         //printf("\nCould not receive a message\n");
         _mqx_exit(0);
      }
    
      /* write data to sci1 */
      write(sci1_dev, (&(msg_ptr->DATA)), (msg_ptr->BYTE_NUM));


      /* empty queue - not needed for polled mode */
      fflush(sci1_dev);
  
      /* wait for transfer complete flag */
      /* after experiment,the mqx3.70 doesn't support this ioctl command ,so remove this sentence */
      /*
      result = ioctl(sci1_dev, IO_IOCTL_SERIAL_WAIT_FOR_TC, NULL );
      if(result == IO_ERROR_INVALID_IOCTL_CMD)
      {
        // ioctl not supported, use newer MQX version
        printf("block sci send \n");
        _task_block();
      } */
     
      _msg_free(msg_ptr);  //just for the test.mabe it is error.
   }

《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号