컴퓨터/프로그래밍4

모드버스 통신 오류 시 응답 방법 모드버스 통신 패킷 오류 시 응답? 무시?한 개의 통신 라인에 여러 개의 디바이스가 물린 rs485에서 통신 패킷이 깨진 데이터를 수신했을 경우 다시 보내 달라고 요청해야 할까요? 아니면 무시하고 기다려야 할까요? 답부터 말씀드리면 요청하거나 응답해서는 안 됩니다. 어? rs485 통신의 대표 프로토콜인 모드버스에는 예외 상황 코드로 응답하는 내용이 있는데?라고 반문하실 수 있습니다. 그러나 모드버스의 예외 상황 코드에는 통신 패킷 오류에 대한 내용이 없습니다.즉, 수신된 데이터가 올바른지 CRC 값을 확인했더니 틀렸다면 그 통신 패킷은 무시해야 합니다. 1:1 통신인 rs232에서는 다시 보내 달라고 요청할 수 있어도 1:N에서는 걸러내야 합니다. 이유는 통신 패킷에 오류가 있다면 슬레이브 주소가 변질.. 2022. 10. 14.
C언어 시리얼 통신 브레이크(break) 신호 전송 방법 C tcsendbreak() 시리얼 통신 break 신호 전송 함수시리얼 통신에서 브레이크(break) 신호를 보내려면 tcsendbreak() 함수를 사용하면 됩니다. 상대 쪽에서 break 신호를 주었을 때 수신 버퍼에 0x00이 있어서 0x00을 보내면 break 신호가 전송되는 줄 아는 분이 계시더군요. 이미지나 동영상처럼 바이너리 파일을 전송할 경우 0x00이 있을 수 있는데, 그때마다 break 신호가 발생해서는 안 되겠지요.헤더 : termios.h형태:  int tcsendbreak(int fd, int duration)인수: int fd 시리얼 포트와 연결된 파일 디스크립트int duration 전송 시간반환: 0 == 성공, -1 == 실패 및 errno에 에러코드 대입int durat.. 2022. 6. 25.
C언어 포인터 사용하는 이유 C언어 포인터 사용한다 vs. 사용하지 않는다C언어 포인터를 쉽게 이해하는 방법 시리즈 3부입니다. 꽤 오래전에 개발자 커뮤니티에서 댓글 싸움이 심하게 벌어진 적이 있는데요, C언어라고 해서 포인터를 반드시 사용할 필요가 없다는 글에 반박과 찬성 의견이 이어진 것이죠. C언어에서 포인터를 사용하지 않으면 왜 C언어로 코딩하느냐로 시작해서 포인터를 사용하지 않는다면 C언어 개발자라고 어디 가서 떠들지 말라며 다소 과격한 글이 올라왔고, 이에 대해 포인터 없는 언어도 많고 C로 코딩하지만, 포인터 없이도 잘만 작성한다는 공격적인 답글이 서로 엉켜 싸우듯 했습니다.연산자 []로만 사용했다고 포인터를 안 썼다고?맞습니다. 포인터 없는 언어도 많은데 C언어라고 꼭 포인터를 써야 할까요? 당연히 포인터 없이도 프로.. 2022. 3. 28.
C언어 함수 내 배열은 어디에 생성될까? C언어의 배열 생성 위치에 대한 오해C언어에 대해 어느 정도 자신이 생겼는데도 확실히 알지 못한 것이 있었습니다. 함수 내부에 생성되는 배열 변수는 어디에 생성될까에 대한 호기심입니다. char, short, int 변수는 그 크기가 작아서 스택에 생성되는 것에 대해서 의심하지 않았지만, 배열은 매우 클 수 있는데, 이 배열도 과연 스택에 생성될까 하는 것이죠. 이 문제에 대해 시원하게 설명해 주는 책이 없었고 인터넷이 없던 시절이라서 주위에 C언어라면 방귀 좀 뀐다는 프로그래머에게 물어보면 사람마다 의견이 다르고 서로 언쟁을 올리기도 했습니다.지금이야 메모리가 8GB·16GB로 매우 크지만, 당시에는 2MB, 돈 좀 쓰면 4MB라서 프로그래머는 메모리 운영에 매우 조심해야 했습니다. 잘 실행되는 프로그.. 2019. 11. 19.