윈도우와의 시리얼 통신(RS-232c)

익명 사용자의 이미지

쩝.. 리눅스와 윈도간의 시리얼통신을 짜고 있는데요..(RS-232c)

예전에 짰을땐 별 문제 없이 잘 했건만.. 지금 하는건 안되는군요..
예전과 달라진 점이라면 전송하는 구조체 내에 int 값이 들어있는 것이구
요..
바로 요놈이 속을 썩이고 있습니다..(윈도->리눅스)

구조체를 보내는데(길이 84) int 값에만 쓰레기값이 들어가네요..
그것도 인자가 네개 있는데, 2, 3, 4번째만 쓰레기가 들어갑니다.

제가 해본 방법은(윈도우용 프로그램에서)
구조체를 4byte로 맞춰주고
calling convention 을 __stdcall 로 해줬습니다.
또한 윈도우의 int 값(넘어가는)을 모두 (unsigned)로 캐스팅 해 줬구요,
마지막에는 구조체 전체를 캐릭터 버퍼로 잡아서 캐릭터로 통신을 시도해
봤지만..
역시 int 값이 들어가는 주소에 쓰레기 값이 들어가 있더군요.. <-- 전 요
게 정말로 이해가 되지 않네요.. 안될리가 없는데 말이죠.. ㅡㅡ;

위의 것들 말고.. 또 생각해 볼 수 있는 이기종간의 형선언 문제(전 여기
에 있다고 봅니다만)는 또 어떤게 있을까요..
경험 많으신 분들의 조언 부탁 합니다...

구조체 선언은
typedef struct stru_appara {

char flag;
int count_ch;
char essid[20];
char ap_mode;
char p2p_mode;
char local_mac_addr[6];
char remote_mac_addr[6];
char flag_multilink;
char flag_bridge;
char flag_wep;
char flag_wep_mode;
char wep_phrase[20];
int wep_key0;
int wep_key1;
int wep_key2;
int wep_key3; // <-- 요놈들이 말썽임.. ㅡㅡ;
} APPARA;

입니다..

아흑.. 도와주세요.. ㅠ.ㅠ

익명 사용자의 이미지

질문이 너무 장황하여 다일지 못하고 답을 씁니다.
다음부터 읽는 사람을 배려하는 마음을 가졌으면....,

문제점
1) 시스템간의 메모리 사용방법
x86 -> int형 구성순서 4 3 2 1
sun(risc) -> int 구성 순서 1 2 3 4
2) OS에 따른 메모리 packing문제
이것은 os에 따라 CPU에 따라 달라질 수 있습니다.
즉 어떤 struct를 잡고 그 크기를 재어볼때 엘리먼트의
총 합보다 크게 나오는 경우가 허다한데 이것은
컴파일러가 속도를 위해서 struct의 메모리들을
cpu(bus)의 bit에 맟추어서 메모리를 정렬하는데
따른 문제입니다.

해결점
1) htonl, htons 계열의 함수로 서로간의 bite순서를
맟추고 ntohl, ntohs로 target host에서 봐야 합니다.
2) #pragma pack(1) 로 struct에 cap을 제거하여 사용하면
됩니다.

제 생각에는 둘다 고려하여 적용해야 할 문제인것 같습니다.

익명 사용자의 이미지

short widdev; // 폭계 실적 폭편차
} __attribute__((packed));

이런 옵션을 주어 보셨나요??

익명 사용자의 이미지

위분 말씀처럼... (2번째 경우)
패딩(padding 철자가...^^;;;) 문제인것 같네요...

sizeof를 사용하셔서.... 보낼때랑 받을때랑 structure의 size를 확인해보
세요...
GCC랑 Visual C++ 이랑 방식이 틀릴수도...

그럼 이만...

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.