主題:我也發(fā)現(xiàn)etr186有重啟我問題,巧合嗎? 共有43265人關(guān)注過本帖 |
---|
caseto |
1樓 |
我也發(fā)現(xiàn)etr186有重啟我問題,巧合嗎? Post By:2005-11-30 22:30:00 [只看該作者]
我用etr186第一次運行后如果出現(xiàn)watchdog引起的自動重啟后,系統(tǒng)就無法進入,因為我的CAN總線的其他節(jié)點還在運行,總線上一直有數(shù)據(jù)發(fā)送,重啟的etr186無法進入正常運行,但是把CAN總線上的數(shù)據(jù)發(fā)送停止后,就可以進入。我的ETR186在啟動時必須向串口發(fā)送數(shù)據(jù)進入CAN總線,以進行節(jié)點登記。
所以也用到了int PutOutputData( int ComIdx, char abyte )函數(shù)。 |
|
單帖管理 | 引用 | 回復(fù) |
zhl |
2樓 |
Post By:2005-12-1 8:50:00 [只看該作者]
請用我們提供的232DEMO程序運行測試,看看是否出一樣的現(xiàn)象。
|
|
單帖管理 | 引用 | 回復(fù) |
caseto |
3樓 |
Post By:2005-12-3 10:28:00 [只看該作者]
我的硬件底板是自己做的,LCD也是自選的,沒有使用你們的套件。你們的232demo程序無法運行,我需要修改其中初始化的部分,目前還沒確定的結(jié)果。
|
|
單帖管理 | 引用 | 回復(fù) |
dust |
4樓 |
Post By:2005-12-5 11:00:00 [只看該作者]
是啊,我看過你們的232demo程序,這個程序前提是收到上位機的數(shù)據(jù)后,再把收到的數(shù)據(jù)發(fā)送到主機,但是我的情況是:下位機在檢測到有數(shù)據(jù)變化時,就發(fā)送數(shù)據(jù)給上位機,無法用你們的demo來運行,因為我的這個要求是脫機的,不連接232串口線的,請問到底是什么問題?樓主也和我一樣出現(xiàn)問題,但同樣使用etr100就沒有此類問題,是否因為他們有什么硬件的區(qū)別?麻煩技術(shù)支持回答?
|
|
單帖管理 | 引用 | 回復(fù) |
zhl |
5樓 |
Post By:2005-12-5 11:04:00 [只看該作者]
建議先在我們提供的評估底板上做這樣的測試,以排除主板ETR186的問題。
|
|
單帖管理 | 引用 | 回復(fù) |
CASETO |
6樓 |
Post By:2005-12-5 11:27:00 [只看該作者]
評估板怎么購買,我們老板可是個摳門精,什么價?
發(fā)到我郵箱里吧。 |
|
單帖管理 | 引用 | 回復(fù) |
x10 |
7樓 |
Post By:2005-12-5 12:25:00 [只看該作者]
對每個客戶來講,我們售出的第一套模塊總是帶評估低板的,你們應(yīng)當(dāng)能找到。
|
|
單帖管理 | 引用 | 回復(fù) |
caseto |
8樓 |
Post By:2005-12-5 14:52:00 [只看該作者]
因為原先是外包開發(fā)的,現(xiàn)在我進行接手完善,人換了好幾茬,東西也找不到了。他們開發(fā)后移交的東西根本就沒給那一套評估板。
|
|
單帖管理 | 引用 | 回復(fù) |
caseto |
9樓 |
Post By:2005-12-5 15:24:00 [只看該作者]
我的一個小觀點:
我仔細地看了你們的rs232.cpp,并且把第一次的版本和后一次你們寄的光盤資料庫里的rs232.cpp進行了比較,發(fā)現(xiàn)了一些小問題。 我總覺得在void interrupt  COM2_ISR(__CPPARGS)和COM3_ISR(__CPPARGS)中需要關(guān)中斷(disable())在程序結(jié)束后開中斷( enable());這樣才安全,否則在COM2_ISR,COM3_ISR同時發(fā)生會出現(xiàn)PutInputData()重入的問題。這個對DOS來說是危險的吧。 以上觀點沒有經(jīng)過嚴格考證,僅是一種猜測。不知emtronix工程師可否解釋一下? 一下是兩個程序的部分源碼: /////////////() void interrupt COM_ISR(__CPPARGS) {    int             i1;    unsigned int   status;    enable( );    status = inport(tport+LSR);     //caseto:    if( status&0x0080 )                 //caseto:檢測RDC8822中串口0狀態(tài)寄存器82h的RDR位是否為1,既有沒有接收到數(shù)據(jù)       {       PutInputData( (char)(inport( tport+RDR )&0x00ff) );       }    if( status&0x0040 )     //caseto:檢測RDC8822中串口0狀態(tài)寄存器82h的THRE位是否為1,既是否可以發(fā)送數(shù)據(jù)       {       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 } |
|
單帖管理 | 引用 | 回復(fù) |
zhl |
10樓 |
Post By:2005-12-5 16:28:00 [只看該作者]
在中斷服務(wù)程序中加上 enable()的目的是允許比該中斷級別更高的中斷打斷它,在它沒有發(fā)正確的EOI之前,該中斷是不會再次中斷的。
|
|
單帖管理 | 引用 | 回復(fù) |