GPS 프로그래밍에 관한 질문입니다.
해솔
gps 프로그래밍 할 때 버퍼에 저장된 문자열을 읽어오는 것에 관한 질문입니다.
nmea 프로토콜로 저장된 데이터를 구분자(,)를 이용해서 파싱하는데 그러기 위해서
인터럽트 방식으로 버퍼에 저장된 문자열을 $gpxxx단위로 읽어 오는 타이밍과 방법에 관한 아이디어가
궁금합니다. 질문 내용 : mcu에서 gps 프로그래밍 하는 방법에 관해서 궁금한 것이 있습니다.
보통 nmea 프로토콜에 따라 gpgga, gpvtg....등등이 있고 그에 따라 여러 가지 정보들이 구분자(,)를 통해 각각 파싱하여
원하는 정보를 획득하는 것으로 알고 있습니다.
mcu에서 gps데이터를 인터럽트 방식으로 데이터를 버퍼에 쓰고 쓰여진 정보를 추출하여 원하는 정보를 얻어내려고 합니다.
이경우 데이터를 추출하는 타이밍을 언제로 하여야할지 잘 모르겠습니다.
버퍼에서 $gpxxx 한묶음 뽑아낸후 문자열에 저장하고 여기서 정보를 추출하는 것이 좋을까요? 버퍼의 크기를 최대한 줄이고
데이터를 추출하기전에 수신 인터럽트가 덮어써버리거나 수신인터럽트가 데이터를 업데이트 하기 전에 데이터를 추출하는
경우가 없게 하고 싶습니다.
프로그래밍 초보라서 좋은 아이디어가 잘 떠오르지 않아서 이렇게 글을 올립니다.
테일, 헤더 포인터만 이용하는 것은 한계가 있는것 같더라고요...좋은 의견 부탁드립니다.
감사합니다.
-
나슬
좀 어렵긴하지만 참고해서 다시 해보겠습니다. 답변 정말로 감사합니다
-
키다리
완전한 패킷이 왔다는 가정을 어떻게 세우느냐? 이게 관건이네요.
보통은 하나의 패킷을 구성할때 사이즈+코드+데이타형태로 앞에 데이타 4바이트를 읽어서 다음의 데이타를 완전하게 읽었다고 생각해서 코딩을 합니다. 그런데 스트림으로 주면 끝을 구분하는게 ,이면 이 콘마가 올때상황과 안올때 받고 있을때 이렇게 3가지 상황별로 네트워크 상황을 만들어서 코딩하면 blocking/noblocking이든지 가능하지 않을까 생각합니다. 그럼 수고하세요. -
보예
2. C로 구성할 경우 c는 noblocking 방식입니다. 즉 콜백함수 형태로 이벤트 방식이니까 시스템에게 등록한 콜백함수에 도착하면 알려주니까... 그 콜백함수에서 데이타를 어느정도 읽어들입니다. 이때 이 읽어드린 데이타를 큐로 구성해서 큐에데이타를 쌓아둡니다. 쌓아둔 데이타를 메인 프로세서가 매순간 체킹하는데 완전한 패킷이 왔다는 가정하에서 처리하고 읽어는 들였지만 완전환 패킷이 도착하지 안했다면 아직 다운로드중이라는 메세지를 출력해주면 되고요.
-
반혈
GPS는 잘몰라서 2가지 java/c형태에서 말씀드리면
1. java형태는 blocking 방식 즉 프로세서가 돌아가다가 네트워크가 접속되어 있으면 네트워크 I/O를 접근해서 데이타가 들어왔는가? 즉 시스템에 데이타가 있는가?라는 검사하는 함수를 사용해서 읽을 데이타가 있으면 쭉 읽어들여서 readbuf에 보관합니다. 이readbuf를 큐로만들어서 rear에 데이타를 쓰고 front에서 꺼내가면 됩니다. 이때 데이타를 읽어들이는 방식이 thread방식
번호 | 제 목 | 글쓴이 | 날짜 |
---|---|---|---|
2676182 | 숫자 순서대로 배열하는법 | 권뉴 | 2024-11-24 |
2676152 | 기본적인거 하나 질문드립니다. | 개미 | 2024-11-24 |
2676124 | 함수선언관련 질문이에요~...털썩..수정완료 (2) | 가지 | 2024-11-24 |
2676092 | C언어 책 (2) | 아서 | 2024-11-24 |
2676065 | 웹사이트 또는 메신저 등에서 원하는 텍스트를 검사하는방법?? (1) | 모든 | 2024-11-23 |
2676033 | 배열 기초연습중 발생하는 에러 ㅠㅜ... | Creative | 2024-11-23 |
2676005 | keybd_event 게임 제어 | 영글 | 2024-11-23 |
2675900 | 진짜기본적인질문 | 글길 | 2024-11-22 |
2675845 | 수정좀해주세요ㅠㅠㅠ | 해골 | 2024-11-21 |
2675797 | 병합 정렬 소스 코드 질문입니다. (2) | 도래솔 | 2024-11-21 |
2675771 | 큐의 활용이 정확히 어떻게 되죠?? | 해긴 | 2024-11-21 |
2675745 | 도서관리 프로그램 질문이요 | 도리도리 | 2024-11-20 |
2675717 | 2진수로 변환하는것! (3) | 동생몬 | 2024-11-20 |
2675599 | for문 짝수 출력하는 법 (5) | 널위해 | 2024-11-19 |
2675575 | Linux 게시판이 없어서.. | 첫삥 | 2024-11-19 |
2675545 | 구조체 이용할 때 함수에 자료 넘겨주는 것은 어떻게 해야 하나요? | 아연 | 2024-11-19 |
2675518 | 사각형 가로로 어떻게 반복해서 만드는지좀.. 내용 | 신당 | 2024-11-18 |
2675491 | !느낌표를 입력하는것은 어떻게합니까~~?ㅠㅠ (5) | 사지타리우스 | 2024-11-18 |
2675411 | 파일입출력으로 받아온 파일의 중복문자열을 제거한 뒤 파일출력 | 앨버트 | 2024-11-17 |
2675385 | 링크드리스트 주소록 질문드립니다. (1) | 겨루 | 2024-11-17 |