Skip to content

기글하드웨어기글하드웨어

인터넷 / 소프트웨어 : 윈도우즈, 리눅스, 기타 운영체제, 각종 어플리케이션, 프로그램, 소프트웨어, 인터넷, 인터넷 서비스에 대한 이야기, 소식, 테스트, 정보를 올리는 게시판입니다.

Extra Form
참고/링크 https://gigglehd.com/gg/mobile/8605345

 

재작년 즈음 올렸던, 참고/링크의 글에서 이어지는 내용입니다.

 

개인적으로 댓글주셨던 '아범테크'님께 질문하고자 하였으나, 잘 생각해보니 이런 질문글을 통해 질문하고 답변해주는 과정을 공개적인 게시글로 작성하는게 사이트 유입  및 구글링 차원에서 도움이 될 것 같아 양해를 구하고 별개의 게시물로 작성합니다.

 

구글링을 통해 유입되시는 분들께 많은 도움이 되시길.

 

 

본론입니다.

 

 

아두이노에서 사용되는 Serial.read() 함수는 버퍼에 차 있는 데이터가 없을 시, 2byte의 0xFFFF를 반환합니다. 이는 공식 문서에서도 확인할 수 있습니다.

 

저는 참고/링크 란에 기재된 과제를 수행하면서 코드를 잘못 짜, Serial.available() 함수가 단 한번만 돌아가도록 했으며, 동시에 변수의 자료형도 2byte가 아닌 1byte 자료형인 byte로 선언함으로서, 0xFFFF와 0x00FF의 앞자리가 잘리도록 코드를 작성하여 -1(0xFFFF)과 255(0x00FF)의 구분을 할 수 없게 만들었고 이는 시리얼통신의 데이터 전송을 끝마치는 0x00FF 3번의 수신을 할 수 없게 만들었습니다.

 

그렇다면, 이러한 시리얼 통신의 데이터 존재 여부를 판별한다거나, 혹은 읽어들이는 함수들은 아두이노 뿐만 아니라 다른 MCU용 IDE에서도 비슷한 방식으로 특정 값을 "데이터 없음"으로 처리하는 방식으로 처리하게 되나요? (비단 0xFFFF가 아니라 정해진 2Byte의 값 내에서 적당한 값을 설정해서 데이터 수신이 없다는 의미로서 미리 정의해두는것인지?)

 

예를들면, 아두이노의 Serial.available()는 버퍼에 들어차있는 데이터를 읽었을 때, 이것이 0xFFFF라는 것이 확인되면 데이터 없음으로 처리하는 것으로 보입니다. (1byte 변수에 집어넣기 전에 Serial.available()를 먼저 실행시키면 제대로 걸러지기 때문에 이렇게 생각했습니다) 

 

아니면 별도의 신호 없음을 표현하는 값은 따로 존재하며, 그저 Serial.read() 함수가 특별하게 데이터가 없는 상황에서만 0xFFFF(-1)을 반환하도록 설정된 것 뿐인가요?

 

 

이상입니다.

 



  • profile
    BEE3E3      idolm@ster.email 2022.08.07 20:46
    available 메서드는 시리얼 버퍼에 남은(read로 읽어오지 않은) 데이터의 길이를 바이트로 반환하는 함수일텐데요...? 아무것도 없을때 read가 아니라 available이 0xFF를 반환한다구요?
  • ?
    노예MS호 2022.08.07 21:19
    그 말씀대로입니다. 글 작성에 오류가 있어 글 전반적인 내용을 수정했습니다. 지적 감사합니다.
  • profile
    Koasing      PROBLEM? 2022.08.07 22:04
    available()은 읽기 버퍼의 길이를 체크하지, 읽기 버퍼의 내용을 read()하지 않습니다. read()는 그 자체로 버퍼의 내용을 변경하므로 side effect가 생깁니다.
    버퍼가 비어 있을 때 내용물을 읽으려고 시도하면 어떻게 작동하는지는 구현따라 케바케고 그래서 레퍼런스 문서를 잘 읽어보셔야 합니다. 사전에 약속된 오류값을 반환하는 경우도 있고, exception을 던지는 경우도 있고, 값이 available하게 될 때까지 무한정 대기할 수도 있습니다.
  • ?
    노예MS호 2022.08.07 22:10
    길이를 체크한다는 뜻은 즉, 데이터가 없을 경우 길이가 0이기 때문에 if문 안에 집어넣으면 0이므로 곧 거짓이 되어 if 이하 구문이 스킵되고, 길이가 존재한다면 양수이므로 곧 참이 되어 if 이하 구문이 동작하게 되는것이라고 이해하면 될까요?
  • profile
    Koasing      PROBLEM? 2022.08.07 22:17
    지금 available() 함수의 동작에 대해서 물어보는건지 아니면 그 사용법에 대해 물어보는건지 불명확합니다. 후자라고 판단되는데 그럼 코드를 올려주세요.
  • ?
    노예MS호 2022.08.07 22:54
    동작에 대한 질문이 맞습니다. 참고/링크란에 걸려있는 게시물도 결국은 동작의 원리를 이해하지 못해 발생한 참사거든요. 이 질문글의 경우에도 available()의 동작에 대해, 레퍼런스 문서를 읽어도 이해가 잘 되지 않아 질문하는 글입니다.
  • profile
    BEE3E3      idolm@ster.email 2022.08.07 23:35
    Serial.begin이 실행된 시점에서, 아두이노 내부적으로 비동기적으로(인터럽트) 관리되는 시리얼 버퍼가 활성화됩니다. 시리얼통신의 입력이 들어오면 여기에 입력이 저장됩니다.

    Serial.available()는 현재 이 버퍼에 들어있는 입력의 길이를 반환합니다. 당연히 아무것도 안들어왔으면 0이고, n바이트가 들어와서 하나도 읽지 않았으면 n이 나옵니다. 정상적인 프로그램 흐름에서 음수는 나오지 않습니다.

    Serial.read()는 버퍼에 남아있는 데이터중 가장 처음에 들어온 1바이트를 소모하고 그 값을 리턴합니다.. 이때 버퍼가 비어있을 때의 동작은 구현체에 따라 다르지만, 대부분의 경우 EOF 매크로에 정의된 값을 반환하고 EOF는 보통 signed int -1 값입니다.

    1바이트를 반환하기 때문에, 정상적인 경우 Serial.read의 리턴값은 1바이트로 충분합니다. 그러나 2바이트를 반환하는 이유는 EOF를 표현하기 위해서입니다. 따라서 available으로 검사한 뒤에, 그 리턴값만큼만 read한다면 리턴값은 반드시 1바이트 값이고, 따라서 1바이트 변수에 리턴값을 저장해도 아무 문제가 없습니다. read류 이외의 함수로 데이터를 소모하지 않는다면 데이터가 쌓이기만 하지 줄어들 리는 없으니까요.

    아두이노의 Serial.read와 비슷한 방식으로 작동하는 대표적인 함수가 바로 C의 getchar() 입니다. 표준입력에서 1바이트를 읽어오는 함수인데 리턴값이 int죠. 마찬가지로 EOF를 표현하기 위함입니다.
  • ?
    DieSELFlvd 2022.08.07 23:38
    잘 설명해주셨네요
    대충 reference문서를 보니까
    시리얼 버퍼가 64byte밖에 안되니까 아무리 커도 64이상의 숫자를 read()나 available()이 반환하기 어렵습니다
    그래서 나올 수 없는 숫자인 0xFFFF를 EOF로 한 것이네요
  • profile
    BEE3E3      idolm@ster.email 2022.08.08 00:01
    음.. 아두이노의 Serial.read()는 리눅스 read() 처럼 유저에게 따로 버퍼 주소를 받아서 거기에 넣어준 뒤 읽은 길이를 반환하는 함수가 아닙니다. 위에 써놨듯이 getchar()와 비슷한 함수로써, 1바이트 읽어와서 그대로 리턴값으로 던지기 때문에 나올 수 있는 리턴값은 0~255 (byte), 또는 EOF입니다.
  • ?
    DieSELFlvd 2022.08.08 12:32
    https://www.arduino.cc/reference/en/language/functions/communication/serial/available/
    음..
    제가 본 공식 문서에는 serial receive buffer가 64bytes라고 나와있는데
    저야 아두이노를 모르니까 정확히 답변드리기 어렵지만 공식문서를 믿는게 낫지 않을까요?
  • ?
    DieSELFlvd 2022.08.08 12:34
    아 read()함수는 그냥 1byte를 읽는 함수였네요
    착각했습니다
    read()함수가 어딘가에 있는 buffer에 쓰고, 그 길이를 리턴하는 함수로 생각했어요
    ㅎㅎ 제 설명이 잘못되었네요
  • ?
    베타함수 2022.08.08 09:59
    레지스터… 내용이 아니었군요 ;;
  • ?
    꿀먹은물고기 2022.08.08 13:33
    16년차 하드웨어 엔지니어 입장에서 보면
    로우레벨 하드웨어 동작, 즉 아두이노 기준으로 avr칩의 하드웨어 구동 방식을 파악하지 못하였기에 발생하는 문제로 보이네요.

    아두이노IDE같은 것들에 의해 사용 및 접근 편의성은 올라갔지만 더 하단의 레지스터 접근 방식을 파악하지 않아도 되는데서 발생하는 문제가 분명히 있다고 봅니다.
    (왜냐하면 어차피 아두이노 코드도 로우레벨 하드웨어 제어코드를 사용해서 돌아가는거니까요)

    버퍼 리턴 관련해서는 윗 분들 께서 자세히 설명해주신 듯 하여 일단 넘어갑니다ㅎ
    혹시 추가로 궁금한 부분이 생기시면 댓글 주셔요.
  • ?
    dmy01 2022.08.11 10:09
    아두이노는 왜 함수 디자인을 저렇게 했을꼬

작성된지 4주일이 지난 글에는 새 코멘트를 달 수 없습니다.


  1. 편리한 오디오 스위칭 프로그램(윈도우)

    링크 깃허브에서 다운가능합니다.   이렇게 세팅이 가능합니다. 저는 저렇게 세팅해놓고 스피커 & 이어폰 전환을 단축키로 합니다. 윈도 기본단축키와 충돌하면 빨갛게 변하면서 작동이 안된다고 알려줍니다.   무지 편한 프로그램이...
    Date2022.08.10 일반 Bytitle: 명사수M16 Reply5 Views1483 file
    Read More
  2. No Image

    구글·애플·원스토어 '3대 앱마켓' 방통위 사실조사 16일 개시

    방송통신위원회(방통위)가 구글 플레이스토어, 애플 앱스토어, 원스토어 등 3대 앱마켓을 대상으로 진행 중인 실태점검을 오는 16일부터 사실조사로 전환한다. 실태점검 결과 3개 앱마켓 모두 금지행위를 위반했다고 볼 소지가 있다고 판...
    Date2022.08.10 소식 By낄낄 Reply6 Views846
    Read More
  3. No Image

    윈도우 11의 암호화에 데이터가 손상되는 문제를 해결

    Vector Advanced Encryption Stardard 명령(VAES)을 지원하는 CPU에서 데이터가 손상되는 문제가 있다고 마이크로소프트가 발표했습니다. 인텔과 AMD의 최신 프로세서에서 이 명령을 지원하며, 비트락커 같은 앱에서 이를 사용해 데이터 ...
    Date2022.08.10 소식 By낄낄 Reply0 Views769
    Read More
  4. No Image

    넷플릭스의 게임 서비스, 전체 구독자의 1%만 사용

    통계에 따르면 넷플릭스 사용자의 1% 미만이 매일 넷플릭스 게임 서비스를 사용한다고 합니다. 넷플릭스에서 게임을 다운받은 수는 2330만번, 사용자 수는 170만명입니다. 적은 숫자는 아니지만 넷플릭스의 전체 구독 계정이 2억 2100만 ...
    Date2022.08.10 소식 By낄낄 Reply6 Views556
    Read More
  5. 구글, 따옴표를 쓰는 인용 검색을 개선

    구글에서 검색할 때, 단어를 따옴표 "로 감싸면 해당 단어가 정확하게 들어간 결과만 찾아줍니다. "기글 하드웨어" 같은 식으로요. 하지만 지금까지는 해당 단어가 포함된 페이지를 보여주기는 해도, 그 페이지의 어떤 부분에 그 단어가 ...
    Date2022.08.10 소식 By낄낄 Reply0 Views769 file
    Read More
  6. No Image

    미국 아이오와주, 구글 IDC 센터 폭발사고 발생.

    금일 미국 아이오와주 구글 IDC 센터에서 전기 계통 장애로 폭발 사고가 발생 했다고 합니다.   이로 인하여 현재 구글 일부 서비스 접속 장애와 구글드라이브 내 파일 유실이 있다고 합니다.
    Date2022.08.09 소식 Bytitle: 가난한카토메구미 Reply8 Views4230
    Read More
  7. No Image

    폴더 강제삭제 프로그램.

    기존 Unlocker 프로그램이 유명했는데 없뎃을 안해서 잘 안되더라고요. 요걸로 하니 재부팅도 필요없고 한방에 되네요!!!
    Date2022.08.09 일반 Bytitle: 명사수M16 Reply4 Views1036
    Read More
  8. No Image

    러시아에서 페이스북과 인스타그램이 금지되니 텔레그램의 사용이 늘어남

    러이사에서 페이스북과 인스타그램이 금지되면서 이를 대신할 텔레그램의 점유율이 크게 늘었다고 합니다. 지난 7개월 동안 페이스북은 4.7배, 인스타르갤믕 8배 정도 줄어들었지만 인스타그램은 66% 가량 늘었습니다. 정작 러시아산 SNS...
    Date2022.08.09 소식 By낄낄 Reply5 Views866
    Read More
  9. No Image

    슬랙에 취약점이 있어 전체 사용자 0.5%의 비밀번호 초기화

    슬랙은 초대 링크를 만들거나 취소했을 때, 해시화된 비밀번호가 다른 사용자에게 전송되는 취약점이 있다고 발표했습니다. 이 취약점은 2017년 4월 17일~2022년 7월 17일까지 초대 링크를 만들거나 취소한 모든 사용자에게 영향을 주었습...
    Date2022.08.09 소식 By낄낄 Reply0 Views600
    Read More
  10. No Image

    (구)IE 는 이제 완전히 사용할 수 없나요?

    (구)IE 를 실행하니 엣지가 실행되는데.... (구)IE 는 완전히 사용할 수 없는지요? 아직도 (구)IE 에 최적화 되어 있는 곳들이 많은데... ;;;; (특히 금융권이나 공기업 등등 사이트는 아직도...)   아니면 변칙적으로 (구)IE 를 사용할 ...
    Date2022.08.08 질문 By투명드래곤 Reply25 Views923
    Read More
  11. No Image

    머스크를 봇 취급한 탐지 도구를 머스크가 사용해서 봇을 파악?

    트위터가 자사 인수와 관련된 일론 머스크의 주장을 반박하고 나섰습니다. 가장 큰 건 봇 계정의 비율인데요. 트위터는 하루 사용자의 5% 미만이 스팸이지만, 일론 머스크는 Botometer라는 앱을 써서 봇 계정의 수가 10%는 된다고 주장했...
    Date2022.08.08 소식 By낄낄 Reply5 Views695
    Read More
  12. No Image

    트위터 계정 540만건의 데이터가 3만 달러에 판매됨

    트위터의 취약점을 악용해 540만 개의 계정에서 전화번호와 이메일을 추출한 사건이 발생했습니다. 이 데이터는 해킹 포럼에서 3만 달러에 판매 중입니다. 정확히는 5485636개의 계정입니다. 이 취약점은 2021년 12월부터 악용되기 시작했...
    Date2022.08.08 소식 By낄낄 Reply0 Views340
    Read More
  13. No Image

    MCU의 시리얼 통신 함수에 관한 질문입니다.

      재작년 즈음 올렸던, 참고/링크의 글에서 이어지는 내용입니다.   개인적으로 댓글주셨던 '아범테크'님께 질문하고자 하였으나, 잘 생각해보니 이런 질문글을 통해 질문하고 답변해주는 과정을 공개적인 게시글로 작성하는게 사이트 유...
    Date2022.08.07 질문 By노예MS호 Reply14 Views825
    Read More
  14. 4년만에 Winamp 5.9 RC1 업뎃

    http://forums.winamp.com/showthread.php?t=458120     네... 좋은 윈앰프죠... 살아있는것도 용하군요
    Date2022.08.07 소식 Bytitle: 폭8책읽는달팽 Reply10 Views841 file
    Read More
  15. 리눅스 6.0에서 AMD 에픽 프로세서의 성능 향상

    리눅스 6.0에서 AMD 에픽 프로세서의 성능이 상당히 올랐습니다. 6.0 커널에서 스케줄러를 수정하고 최적화 작업을 한 덕분입니다. 아래 테스트는 에픽 7713 64코어 프로세서 2개로 구성된 시스템에서 진행됐습니다. 5.15.88 LTS 버전과 ...
    Date2022.08.07 소식 By낄낄 Reply8 Views1268 file
    Read More
목록
Board Pagination Prev 1 ... 157 158 159 160 161 162 163 164 165 166 ... 577 Next
/ 577

최근 코멘트 30개
마라톤
07:49
마라톤
07:48
유지니1203
07:43
아라
07:41
마초코
07:17
리키메
06:48
미쿠미쿠
06:46
dmy01
06:35
아라
06:24
포인트 팡팡!
05:22
라데니안
05:22
카에데
05:19
카에데
05:08
카에데
04:54
카에데
04:48
카에데
04:41
빈도
04:40
카에데
04:36
빈도
04:35
카에데
04:34
빈도
04:26
카에데
03:56
열라끔찍한놈
03:34
리나인버스
03:09
파란화면
03:05
joyfuI
03:01
lightroo
02:58
소주
02:56
마이크로소프트
02:45
Neons
02:34

MSI 코리아
더함
한미마이크로닉스
AMD

공지사항        사이트 약관        개인정보취급방침       신고와 건의


기글하드웨어는 2006년 6월 28일에 개설된 컴퓨터, 하드웨어, 모바일, 스마트폰, 게임, 소프트웨어, 디지털 카메라 관련 뉴스와 정보, 사용기를 공유하는 커뮤니티 사이트입니다.
개인 정보 보호, 개인 및 단체의 권리 침해, 사이트 운영, 관리, 제휴와 광고 관련 문의는 이메일로 보내주세요. 관리자 이메일

sketchbook5, 스케치북5

sketchbook5, 스케치북5

나눔글꼴 설치 안내


이 PC에는 나눔글꼴이 설치되어 있지 않습니다.

이 사이트를 나눔글꼴로 보기 위해서는
나눔글꼴을 설치해야 합니다.

설치 취소