문제 설명 파일에서 읽을

D

DCO_81

Guest
안녕 모두,

난 지금껏이 코드를 몇 가지 문제."POSIX의 시스템을위한 직렬 프로그래밍 가이드"있어 이것을에서 운영.하지만 이것은 작동하지 않습니다 - 버퍼가 비어 있습니다 항상.어디에 내 실수?전 치료제가 없어.

코드 :int 응답 ()

(

int nbytes;

char *로의 bufptr;

번째 문자 버퍼 [255];(전략중 쓰기는 "AT \ r이", 3);잠 (1);bufptr = 버퍼;((nbytes은 = (전략중, bufptr, 버퍼 sizeof (버퍼) - bufptr - 1))> 0) 읽는 동안

(

bufptr = nbytes;

(bufptr면 [-1] == '\ n'을 | | bufptr [-1] = '\ r이')

휴식;

)* bufptr = '\ 0';법원은 <버퍼를 <<endl <; / / 버퍼가 비어 있습니다!
- 왜요?!?버퍼 (strncmp (해당되는 경우, "OK"를, 2))

반환 0;반환 -1;

)

 
당신이 포트 시리얼 읽기에서, 당신은 버퍼의 입력으로 들어가 모든 바이트.하지만 이후 PC의가 빠르고, 거기 바이트 일 수도 없다

<img src="http://www.edaboard.com/images/smiles/icon_wink.gif" alt="눈짓" border="0" />

.

전 시스템을 추측하여, 포트를 보냅니다 무언가를 통해 직렬 및 답변을받을려고합니다.하지만 이후 PC가 빠르게하므로, 해당 점검 시간에 정보가 없습니다 노

<img src="http://www.edaboard.com/images/smiles/icon_wink.gif" alt="눈짓" border="0" />

.

아마도 당신은 블로킹 작업을해야 할 읽기 일부 설정을하게?
, fcntl 전략중 (F_SETFL, 0);
열린 직렬) 옵션 포트를 가진 당신은 (하지 않는 한 기본 설정을해야하지만 이것은 차단을 해제해야합니다

근데 거기 접수 바이트는 귀하의 프로그램을 중단 때까지 유지되는 다른 문제

<img src="http://www.edaboard.com/images/smiles/icon_wink.gif" alt="눈짓" border="0" />

.그래서 당신은 시간 제한을해야 점프 중에하는 동안 루프를 설정하면 얻을이나 데이터가.

아마도 당신은 전화 시스템 선택에 대한 읽어야 부분을!
http://www.easysw.com/ ~ 마이크 / 시리얼 / serial.html # 5_2_1

Antharax

 
고마 Antharax,

항상 같은 대답 빨리.

내가 명시); 초기화 0 모뎀을, 내가 사용하는 fcntl (전략중, F_SETFL.그러니 문제가되지 않을이됩니다.
루프 이후로 내 - 동안 프로그램이 없었던 안에, 내가 밖으로 가지고 얻을 아직 문제를

<img src="http://www.edaboard.com/images/smiles/icon_wink.gif" alt="눈짓" border="0" />읽기 작업 중 하나를 해주는 차단 걸립니다 2-3 초 생각, 그렇게.Unfortunatley 내 문제는 아직 해결되지 않습니다.다른 방법은?

 
괜찮아, 난 참조하십시오.
그럼 가능성이 있습니다 2 :
가능성 1 :
당신은 그러나 기다리는 데이터가오고 있어요 데이터가 없습니다!
그리고 읽기가 제한 함께 블로킹 :
코드 :

options.c_cc [VTIME] = 10; / / 무슨 의미죠 1 초
 
안녕하세요,

내가 생각하는 루프에서 실행 할 수있을 결코 프로그램은 확실히.내가 "넣어 몇 가지"법원에 - s를 신체에있는 루프와 나는 아무것도 사용이 인쇄된 ( "endl", 그래서 버퍼) 플러시해야합니다.보오드가 B9600을 사용하여 설정됩니다 이미 9600하십시오.전), GPS를, UMTS를 사용할 수의 GSM 옵션 퓨전 카드는 콤보 카드 (.나도 연결 연결된 2 데이터는 GSM PC를 통해가.그것은 여전히 작동하지 않습니다.
말하려면 : 모든 제안을 내가 뭘] -1해야 써주 대신 bufptr [?

미리 감사드립니다.

 
인용구 :

어떤 제안을 내가 대신 bufptr [-1] 작성해야합니까?
 
내가 프로그램을 실행하면 내, 내가) 프로그램은 터미널 (답변을의에서는 볼 - 명령에 minicom 수 있습니다.내가받은 대답은 확인 시에 보내주시기 바랍니다.내가 nbytes의 길이를 밖으로 인쇄했습니다 전에 이것은 0입니다 확실히.하지만 지금은 할 수 케이블 nulmodem의와 또한 그것을 시도.등록일 분 후에 49 :이

코드 :법정 <<16 진수 <<(int) 버퍼 endl <<;

법원은 <버퍼를 <<endl <;

 
죄송합니다, 실수, 당신이 작성해야

법정 <<16 진수 <<(int) (* 버퍼) <<endl;
(난 가치에 관심이 아니에요 주소, 전용의 버퍼

<img src="http://www.edaboard.com/images/smiles/icon_wink.gif" alt="눈짓" border="0" />

)

그리고 네, 도움이!

이것은) 즉 n을받을 cariage 반환 ( '\ 당신이'와 루프 동안의 휴식 시간 중에.

난 후 점심 식사를하는 데 도움이됩니다 빠른 루틴을 작성하면Antharax

 
맛있게 드세요.

이제 반응이 이렇게 보입니다 :

0
- 빈 라인 -
ffffffff

 
실래요 이것은 당신을해볼까요?

코드 :

BUFFERSIZE를 정의 # 256int 응답 ()

(

int 나;

int nbytes;

서명되지 않은 int의 writePos = 0;

메기 응답 [BUFFERSIZE];(전략중 쓰기는 "AT \ x0D \ x0A", 4);잠 (1);((nbytes은 = (전략중 읽고, & 응답 [writePos], BUFFERSIZE - readPos))> 0) 동안

(

은 (i = writePos에 대한; 나는 <writePos nbytes; 난 )

법정 << "는 바이트 수신 :"<<16 진수 <<(int) 응답 [나] <<endl;writePos = nbytes;

(해당되는 경우 writePos> = BUFFERSIZE)

휴식;

/ /이 아마 당신이 "\ x0D \ x0AOK \ x0D \ x0A"가 나타납니다

((writePos> 2) & & (응답 [writePos - 1] == 0x0A))하는 경우

휴식;

)법원은 <응답을 <<endl <;, "\ x0D \ x0A", 6)) x0D \ x0AOK를 \ (strncmp (응답하는 경우

반환 0;반환 -1;

)
 
당신은) readPos ,...,의 전략중 readPos를 지정하지 않았기 (전에 사용하는 함수를 참조하십시오.0으로되어있는 initialised가?등록일 분 후 9 :하지만 난이없고 치료법 당신이 뭘했는지이 코드가 어떻게 작동합니까!어디 트릭은?감사합니다!

 
만약에 내가 마지막으로보다 아니라 잘못된 응답해야 괜찮을 rraither 앞에 다음과하여 당신이 체크 <LF> <CR> 루프 만약 CR 발생의 처음으로 인해 그리고 나가 사람을 위해.따라서 Antharax 쓴
writePos가 발생 먼저 2>에서 실행 될 일들을 방지.

 
다시 안녕하세요,

난 즐기고 생각하는 나의 어린 나는 무모와 비트.

당신의 함수의 반환은 0입니다 - 최고!
하지만이 프로그램은 신체 루프 실행 결코에.
법원은 endl <<응답을 <<; 이것 인쇄된 :
h_ @ @ u @
하지만 strncmp이 작업을 수행합니다.

 
참으로
그리고 BUFFERSIZE이 - readPos
BUFFERSIZE해야합니다 - writePos
(죄송합니다, 아무것도 컴파일 안

<img src="http://www.edaboard.com/images/smiles/icon_wink.gif" alt="눈짓" border="0" />

)

나는 또한 루프를하는 동안 밖으로 뒤에 오는 응답을 종료할 잊었을 null로!
답변 [0을 writePos] =;

난 약간 희망이 도움이됩니다.
아마 당신은 디버거를 사용하여 버퍼 수도 밖으로 인쇄에 라인 중단점을 설정?
아니면 쓸 수코드 :

printf (응답)
 
안녕하세요,

하지만 지금은, 추가 변경 사항을 프로그램이 여전히 루프에서 실행하지 않습니다.그래서 strncmp 차례에 자신있다, 그것은 필드 - 것입 비교 빈 메기.

이 문장은 확인을 할 수 있습니까?

, 용 ((nbytes은 (= 읽기 전략중 & 응답 [writePos], BUFFERSIZE - writePos))> 0)

 
도움되지 않는 대체에이 / 동안.그것은 매우 이상했지만 일단은 "좀"바이트 receiced :
41, 54, 디, 디,, 4 층, 지하 4 층에서, 디, (16 진수)
->, 티, <CR>, <CR>, <LF>, 오, 케이, <CR>, <LF>

여기)의에있는 코드가 (대한 킷에는 UART 생성자 :

코드 :시리얼 : : 시리얼 (char *로의 device_name)

(

전략중 = 열 (device_name, O_RDWR | O_NOCTTY | O_NDELAY);

(<0 전략중)하는 경우

(

출구 (1);

)(전략중 fcntl F_SETFL, 0);tcgetattr (전략중, & old_settings);bzero (& new_settings, sizeof (new_settings);new_settings.c_cflag | = (CLOCAL | CREAD);

& = ~ (ICANON | ECHO | ECHOE | ISIG) new_settings.c_lflag;

& = ~ OPOST new_settings.c_oflag;

new_settings.c_cc [VMIN] = 0;

new_settings.c_cc [VTIME] = 50;(& new_settings, B9600) cfsetspeed;(TCIFLUSH을 전략중) tcflush;tcsetattr (전략중, TCSANOW, & new_settings);

)
 
<img src="http://www.edaboard.com/images/smiles/icon_smile.gif" alt="미소" border="0" />
 
다시 안녕하세요,

프로그램이 실행되는 카드 PCMCIA를, 괜찮아요, 내 옵션 융합의 GSM -.하지만 내가이 작동하지 않습니다 그것은 ttyS0 엠씨 45T에 대한 시도를 사용 지멘스와 함께.초기화가 이루어집니다 잘 난 명령을 보낼 수 있습니다.하지만 이것이 오는

코드 :((nbytes은 = (전략중 읽고, & 응답 [writePos], BUFFERSIZE - readPos))> 0) 동안
 

Welcome to EDABoard.com

Sponsor

Back
Top