線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:3096
推到 Plurk!
推到 Facebook!

ARM RS232方面問題

缺席
a910937
一般會員


發表:3
回覆:3
積分:1
註冊:2008-10-28

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-10-28 22:18:27 IP:140.126.xxx.xxx 訂閱
各位大大好~    
小妹最近再碰ARM的硬體(s3c2410)    
我有兩個ARM板,想透過RS-232來互相傳輸    
...我的TX端的程式是這樣的 :    
int main() 
{    
    int fd;    
    char buffer[]="0123456789";    
    int Length=255;    
    int nByte;    
    fd=open("/dev/ttyS1",O_RDWR | O_NONBLOCK);        
    while(fd!=0)
    {    
        nByte = write(fd,buffer,Length);    
        printf(" buffer is= %s nByte=%d",buffer,nByte);        
    }    
    close(fd); 
}    
RX端:    
int main() 
{    
    int fd;    
    int nByte=0;    
    char buf[255];    
    fd=open("/dev/ttyS1",O_RDWR );    
    if (fd==NULL) printf("open error\n");        
    while (nByte !=NULL)    
    {    
        nByte = read(fd,buf,255);    
        printf("nByte=%d\n",nByte);        
        printf("buffer is: %s nByte=%d", buf ,   nByte);    
    }    
     close(fd); 
}    
可是不知道為什麼接收端的ARM板,好像收不到TX端要傳的字串,都顯示不出來
不知道有沒有大大們用過ARM板,我是用C語言去寫code,我已經確認rs232事可以互相傳輸的,
不過不知道為甚麼使用迴圈會發生錯誤,是接收端buffer問題嗎~? 希望有經驗的大大解答^^
希望有使用過rs232經驗的大大們解答^^   謝謝~~~~~
編輯記錄
taishyang 重新編輯於 2008-10-29 09:44:36, 註解 修改標題,將[求救]拿掉‧
taishyang 重新編輯於 2008-10-29 09:46:58, 註解 無‧
暗黑破壞神
版主


發表:9
回覆:2301
積分:1627
註冊:2004-10-04

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-10-29 23:44:04 IP:122.118.xxx.xxx 未訂閱
請問.你的程式會進入 while (nByte != NULL) 這個迴圈嗎?

Linux 的 RS232 是這樣寫接收的嗎?

===================引 用 a910937 文 章===================
RX端:    
int main() 
{    
    int fd;    
    int nByte=0;    
    char buf[255];    
    fd=open("/dev/ttyS1",O_RDWR );    
    if (fd==NULL) printf("open error\n");        
    while (nByte !=NULL)    
    {    
        nByte = read(fd,buf,255);    
        printf("nByte=%d\n",nByte);        
        printf("buffer is: %s nByte=%d", buf ,   nByte);    
    }    
     close(fd); 
}    
可是不知道為什麼接收端的ARM板,好像收不到TX端要傳的字串,都顯示不出來
不知道有沒有大大們用過ARM板,我是用C語言去寫code,我已經確認rs232事可以互相傳輸的,
不過不知道為甚麼使用迴圈會發生錯誤,是接收端buffer問題嗎~? 希望有經驗的大大解答^^
希望有使用過rs232經驗的大大們解答^^   謝謝~~~~~
a910937
一般會員


發表:3
回覆:3
積分:1
註冊:2008-10-28

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-10-30 11:55:40 IP:140.126.xxx.xxx 訂閱
恩 是的,我已經有測試過了

現在我只是想要在RX端 不斷接收封包進來

但是接收端那邊從超級終端機那邊可以看得出來 封包會遺失...

不知道是不是rx端的程式在做修改~??

希望有rs232經驗大大給點建議^^
bernie_w39
資深會員


發表:3
回覆:199
積分:280
註冊:2007-10-07

發送簡訊給我
#4 引用回覆 回覆 發表時間:2008-10-30 22:50:33 IP:118.166.xxx.xxx 訂閱
這樣的收發程式, 要是測的出正確的結果, 就真是怪事了.
先改 TX 部份, 用超級終端機測到整個字串完整收到, 再來改 RX.
如果收不到, 可能要考慮設一下 ioctl

int main()
{
int fd;
char buffer[]="0123456789";
int Length=strlen(buffer);
int Shift = 0;
int nByte;
fd=open("/dev/ttyS1",O_RDWR | O_NONBLOCK);
if (fd >= 0)
{
while(Length > 0)
{
nByte = write(fd,buffer Shift,Length);
if (nByte < 0)
break;
Shift = nByte;
Length -= nByte;
printf(" buffer is= %s nByte=%d",buffer,nByte);
}
close(fd);
}
}
暗黑破壞神
版主


發表:9
回覆:2301
積分:1627
註冊:2004-10-04

發送簡訊給我
#5 引用回覆 回覆 發表時間:2008-10-30 23:38:51 IP:122.118.xxx.xxx 未訂閱
怪事年年有.今年特別多.
這樣的程式.要是能正常.那真的.就不會有那麼多失敗的案子了.

http://www.easysw.com/~mike/serial/serial.html

去看看人家寫的 Linux 下 serial port 要怎麼用吧.
抄一下.應該不難吧.
===================引 用 bernie_w39 文 章===================
這樣的收發程式, 要是測的出正確的結果, 就真是怪事了.
先改 TX 部份, 用超級終端機測到整個字串完整收到, 再來改 RX.
如果收不到, 可能要考慮設一下 ioctl

int main()
{
int fd;
char buffer[]="0123456789";
int Length=strlen(buffer);
int Shift = 0;
int nByte;
fd=open("/dev/ttyS1",O_RDWR | O_NONBLOCK);
if (fd >= 0)
{
while(Length > 0)
{
nByte = write(fd,buffer Shift,Length);
if (nByte < 0)
break;
Shift = nByte;
Length -= nByte;
printf(" buffer is= %s nByte=%d",buffer,nByte);
}
close(fd);
}
}
a910937
一般會員


發表:3
回覆:3
積分:1
註冊:2008-10-28

發送簡訊給我
#6 引用回覆 回覆 發表時間:2008-10-31 10:58:13 IP:140.126.xxx.xxx 訂閱
好的~
謝謝各位高手的教導
我等等就把程式修改 先測看看TX程式能不能work~
thanks~~~~
系統時間:2024-05-03 15:56:29
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!