主题:我也发现etr186有重启我问题,巧合吗? 共有38683人关注过本帖 |
---|
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之前,该中断是不会再次中断的。
|
|
单帖管理 | 引用 | 回复 |