임베디드 리눅스 시리얼 포트 통신속도 변경하면 메모리누수 발생..

letpump의 이미지

void serial_init(int device){

close(serial_fd[2]);
serial_fd[2] = open("/dev/ttyS3", O_RDWR | O_NOCTTY);////이포인트에서 메모리 누수발생 point1

fcntl(serial_fd[2], F_SETFL, FASYNC);
tcgetattr(serial_fd[2],&g_oldtio);
memset((void *)&g_newtio,0, sizeof(g_newtio));

g_newtio.c_iflag = IGNPAR;
g_newtio.c_oflag = 0;
g_newtio.c_lflag = 0;
g_newtio.c_cc[VMIN] = 0;
g_newtio.c_cc[VTIME] = 1;


printf("==============================\n");
if(device == DEVICE_EP_METER || device == DEVICE_SIGN){
g_newtio.c_cflag = B9600 | CREAD | CS8 | CLOCAL;
printf("[485 SYSTEM] Baud Rate Open: 9600\n");
cfsetspeed(&g_newtio, B9600);
}

if(device == DEVICE_HACON || device == DEVICE_DIMMER || device == DEVICE_MULIT_TEMP){
g_newtio.c_cflag = B38400 | CREAD | CS8 | CLOCAL;
printf("[485 SYSTEM] Baud Rate Open: 38400\n");
cfsetspeed(&g_newtio, B38400);
}

tcflush(serial_fd[2], TCIFLUSH);
tcsetattr(serial_fd[2], TCSANOW, &g_newtio);////이포인트에서 메모리 누수발생 point2

}

물리적으로 포트가 하나이기 때문에 통신속도를 계속 스위칭 해주어야 하는데..

메모리 누수가 일어나지 않고 통신속도를 적절하게 스위칭 할 수 있는 방법이 있는지 문의드립니다.

누수된 메모리가 복구가 되지도 않고 결국엔 하드웨어가 다운되버리네요..

하..

포트를 닫지 않고 열어둔체로 통신속도만 변경해도..

point2번에서 메모리를 계속 까먹습니다.. free나 top명령어로 확인했습니다..

mirheekl의 이미지

이미 오픈된 포트를 계속 사용하고, 통신속도만 바꿔주면 된다면 tcsetattr을 왜 다시 호출해야 하는지 궁금합니다.

포트를 새로 열지 않는다면 point2번은 안 해줘도 될 것 같거든요.

--

letpump의 이미지

구조체에서 통신속도만 변경하면 통신속도 반영이 안되고.

tcsetattr 를 사용하면 통신속도가 변경되는것같습니다..

아닌건가요..

mirheekl의 이미지

같은 코드를 PC등 다른 플랫폼에서 실행해도 같은 누수가 발생하는지 궁금합니다.

제 생각에는 그렇지 않을 것 같고 그렇다면 좀더 아랫쪽을 살펴봐야 될 것 같네요.

--

nlbomya의 이미지

시리얼통신에서 속도에 따라 에러가 발생을 합니다. 그 에러의 이유가 메모리 누수일 수도 있지만, 다른 이유일 수도 있습니다.
속도를 올릴 수록, 에러율이 높아지는 이유? 무얼까요...

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.