主题:我也发现etr186有重启我问题,巧合吗?

  共有38676人关注过本帖    
caseto
1楼


我也发现etr186有重启我问题,巧合吗?  发帖心情 Post By:2005-11-30 22:30:00   [只看该作者]

我用etr186第一次运行后如果出现watchdog引起的自动重启后,系统就无法进入,因为我的CAN总线的其他节点还在运行,总线上一直有数据发送,重启的etr186无法进入正常运行,但是把CAN总线上的数据发送停止后,就可以进入。我的ETR186在启动时必须向串口发送数据进入CAN总线,以进行节点登记。
所以也用到了int PutOutputData( int ComIdx, char abyte )函数。

  单帖管理 | 引用 | 回复 回到顶部
zhl
2楼


  发帖心情 Post By:2005-12-1 8:50:00   [只看该作者]

请用我们提供的232DEMO程序运行测试,看看是否出一样的现象。

  单帖管理 | 引用 | 回复 回到顶部
caseto
3楼


  发帖心情 Post By:2005-12-3 10:28:00   [只看该作者]

我的硬件底板是自己做的,LCD也是自选的,没有使用你们的套件。你们的232demo程序无法运行,我需要修改其中初始化的部分,目前还没确定的结果。

  单帖管理 | 引用 | 回复 回到顶部
dust
4楼


  发帖心情 Post By:2005-12-5 11:00:00   [只看该作者]

是啊,我看过你们的232demo程序,这个程序前提是收到上位机的数据后,再把收到的数据发送到主机,但是我的情况是:下位机在检测到有数据变化时,就发送数据给上位机,无法用你们的demo来运行,因为我的这个要求是脱机的,不连接232串口线的,请问到底是什么问题?楼主也和我一样出现问题,但同样使用etr100就没有此类问题,是否因为他们有什么硬件的区别?麻烦技术支持回答?

  单帖管理 | 引用 | 回复 回到顶部
zhl
5楼


  发帖心情 Post By:2005-12-5 11:04:00   [只看该作者]

建议先在我们提供的评估底板上做这样的测试,以排除主板ETR186的问题。

  单帖管理 | 引用 | 回复 回到顶部
CASETO
6楼


  发帖心情 Post By:2005-12-5 11:27:00   [只看该作者]

评估板怎么购买,我们老板可是个抠门精,什么价?
发到我邮箱里吧。

  单帖管理 | 引用 | 回复 回到顶部
x10
7楼


  发帖心情 Post By:2005-12-5 12:25:00   [只看该作者]

对每个客户来讲,我们售出的第一套模块总是带评估低板的,你们应当能找到。

  单帖管理 | 引用 | 回复 回到顶部
caseto
8楼


  发帖心情 Post By:2005-12-5 14:52:00   [只看该作者]

因为原先是外包开发的,现在我进行接手完善,人换了好几茬,东西也找不到了。他们开发后移交的东西根本就没给那一套评估板。

  单帖管理 | 引用 | 回复 回到顶部
caseto
9楼


  发帖心情 Post By:2005-12-5 15:24:00   [只看该作者]

我的一个小观点:
我仔细地看了你们的rs232.cpp,并且把第一次的版本和后一次你们寄的光盘资料库里的rs232.cpp进行了比较,发现了一些小问题。
我总觉得在void interrupt  COM2_ISR(__CPPARGS)和COM3_ISR(__CPPARGS)中需要关中断(disable())在程序结束后开中断( enable());这样才安全,否则在COM2_ISR,COM3_ISR同时发生会出现PutInputData()重入的问题。这个对DOS来说是危险的吧。
以上观点没有经过严格考证,仅是一种猜测。不知emtronix工程师可否解释一下?
一下是两个程序的部分源码:
/////////////()
void interrupt COM_ISR(__CPPARGS)
{
   int             i1;
   unsigned int   status;

   enable( );

   status = inport(tport+LSR);     //caseto:
   if( status&0x0080 )             
   //caseto:检测RDC8822中串口0状态寄存器82h的RDR位是否为1,既有没有接收到数据
      {
      PutInputData( (char)(inport( tport+RDR )&0x00ff) );
      }
   if( status&0x0040 )
    //caseto:检测RDC8822中串口0状态寄存器82h的THRE位是否为1,既是否可以发送数据
      {
      i1 = GetOutputData( );
      if( i1 != -1 ) outport( tport+THR, i1 );
      else           outport( tport, inport(tport)&0xfeff );
       //caseto:置RDC8822中串口0控制寄存器80h的TXIE位为0
      }

   switch( tport )
      {
      case 0xff80:
   outport( 0xff22, 0x0014 ); // specific EOI command of COM2
   break;
      case 0xff10:
   outport( 0xff22, 0x0011 ); // specific EOI command of COM3
   break;
      }
}

//////////////////////
void interrupt COM2_ISR(__CPPARGS)
{
   int             i1;
   unsigned int   status;

   enable( );

   status = inport(COM2PORT+LSR);
   if( status&0x0080 )
      {
      PutInputData( COM2, (char)(inport( COM2PORT+RDR )&0x00ff) );
      }
   if( status&0x0040 )
      {
      i1 = GetOutputData( COM2 );
      if( i1 != -1 ) outport( COM2PORT+THR, i1 );
      else           outport( COM2PORT, inport(COM2PORT)&0xfeff );
      }

   outport( 0xff22, 0x0014 ); // specific EOI command of COM2
}

  单帖管理 | 引用 | 回复 回到顶部
zhl
10楼


  发帖心情 Post By:2005-12-5 16:28:00   [只看该作者]

在中断服务程序中加上 enable()的目的是允许比该中断级别更高的中断打断它,在它没有发正确的EOI之前,该中断是不会再次中断的。

  单帖管理 | 引用 | 回复 回到顶部

返回首页

我也发现etr186有重启我问题,巧合吗?

用户名:
            验证码: 验证码,看不清楚?请点击刷新验证码
内容: