i2c/spi 등으로 수천개의 command를 보내야 할 경우 module화 방법

aja1233의 이미지

lcd나 sensor를 컨트롤하다보면 i2c/spi등으로 device 셋팅 command를
굉장히 많이 보내게 되는데 예를들면 다음과 같은 코드 형태를 가지게 됩니다.

void device_init()
{
i2c_write(addr, data);
i2c_write(addr, data);
i2c_write(addr, data);
i2c_write(addr, data);
...

i2c_write(addr, data);
}

이런 동일한 패턴의 코드 형식을 갖게 됩니다.
그래서 각각의 command마다 일정한 기능을 가지는 command는 묶어서 함수로 구현하게 되는데.
문제점이 1번만 호출되는 함수가 많이 늘어나는 문제점이 있더군요.

이런 코드들을 좀더 쉽고 담당자가 바뀌더라도 관리하기 편한 형태로
작성하는 방법이 없을까요?

hiseob의 이미지

typedef struct cmd { u8 addr, u8 data } i2c_cmd;
i2c_cmd cmd_array[] = {
{ 0x?? , 0x?? },
{ 0x?? , 0x?? },
{ 0x?? , 0x?? },
.....
}

for(i=0, i < ARRAY_SIZE(cmd_array); i++) {
i2c_write(cmd_array[i].addr, cmd_array[i].data);
}

이런 식의 코드는 많이 본거 같네유 ㄷㄷㄷㄷㄷㄷㄷㄷㄷ

aja1233의 이미지

i2c_cmd cmd_array[] = {
{ 0x?? , 0x?? },
{ 0x?? , 0x?? },
{ 0x?? , 0x?? },
.....
}

이런식으로 작성된 부분을 줄줄이 주석을 다는 방법말고
코딩단계에서 좀더 명확하게 볼 수 있는 방법이 없을까요?

hiseob의 이미지

i2c 자체가 바이트 바이트 .... 날리고 받고 하는데 딱히 명확하게 해줄 방법이 잘 없는거 같네요.
좀더 명확하게 하자면 뭐 예를 들자면 센서라던지 이런거라면

#define GYRO_ID 0x00
#define GYRO_X_MSB 0x01
#define GYRO_X_LSB 0x02
#define GYRO_Y_MSB 0x03
......
#define GYRO_SET_RATE 0x20
....

i2c_write(GYRO_SET_RATE, 0x??);

뭐 이런식으로 해주고 사용하는 방법 말고는 없을거 같습니다.
커널 드라이버들도 대부분 이렇게 쓰구요...

M.W.Park의 이미지

관련 작업을 해본 적은 없지만 언듯 생각하기에는
상기 hiseob님의 글에 나오는 구조체를 파일에 저장해놓고 쓰는 방법도 있겠네요.

-----
오늘 의 취미는 끝없는, 끝없는 인내다. 1973 法頂

댓글 달기

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