ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Arduino Sketch 버전을 1.5.x로 변경시 발생하는 컴파일 에러를 해결하는 방법
    IT 개발/Arduino 2014.10.20 11:27


    Arduino Sketch 버전을 1.5.x로 변경시 발생하는 컴파일 에러를 해결하는 방법

    아두이노 라이브러리를 작업하면서, Arduino Sketch 버전을 1.5.x로 변경하면 아래와 같은 컴파일 에러가 발생하는 경우가 있다.

    error: variable ‘debugreceivingdatatable’ must be const in order to be put into read-only section by means of ‘attribute((progmem))’
    error: variable ‘notistring_table’ must be const in order to be put into read-only section by means of ‘__attribute
    ((progmem))’
    error: variable ‘at_cmd_table’ must be const in order to be put into read-only section by means of ‘__attribute
    ((progmem))’

    위와 같은 문제가 발생하였을 때의 제 코드는 아래와 같습니다.

    const char at_command_wset[]                PROGMEM = "AT+WSET=0,%s";
    const char at_command_wsec[]                PROGMEM = "AT+WSEC=0,%s,%s";
    const char at_command_wnet[]                PROGMEM = "AT+WNET=1";
    const char at_command_wjoin[]               PROGMEM = "AT+WJOIN";
    const char at_command_wstat[]               PROGMEM = "AT+WSTAT";
    const char at_command_scon_tcp_client[]     PROGMEM = "AT+SCON=O,TCN,%s,%d,,%d";
    const char at_command_scon_tcp_server[]     PROGMEM = "AT+SCON=O,TSN,,,%d,%d";
    const char at_command_scon_udp[]            PROGMEM = "AT+SCON=O,UCN,%s,%d,%d,%d";
    const char at_command_fdns[]                PROGMEM = "AT+FDNS=%s,%d";
    const char at_command_fwebs_down[]          PROGMEM = "AT+FWEBS=0";
    const char at_command_fwebs_up[]            PROGMEM = "AT+FWEBS=1,A";
    const char at_command_smgmt[]               PROGMEM = "AT+SMGMT=%c";
    const char at_command_ssend[]               PROGMEM = "AT+SSEND=%c,%s,%d,%d";
    const char at_command_ssend_data[]          PROGMEM = "";
    const char at_command_wleave[]              PROGMEM = "AT+WLEAVE";
    
    PROGMEM const char *at_cmd_table[] =
    {
            at_command_wset,                    // AT_WSET
            at_command_wsec,                    // AT_WSEC
            at_command_wnet,                    // AT_WNET
            at_command_wjoin,                    // AT_WJOIN
            at_command_wstat,                    // AT_WSTAT
            at_command_scon_tcp_client,        // AT_SCON_TCP_CLIENT
            at_command_scon_tcp_server,        // AT_SCON_TCP_SERVER
            at_command_scon_udp,                // AT_SCON_UDP
            at_command_fdns,                    // AT_FDNS
            at_command_fwebs_down,            // AT_FWEBS_DOWN
            at_command_fwebs_up,                // AT_FWEBS_UP
            at_command_smgmt,                // AT_SMGMT
            at_command_ssend,                    // AT_SSEND
            at_command_ssend_data,            // AT_SSEND_DATA
            at_command_wleave                // AT_WLEAVE
    };
    
    // Read Point
    strcpy_P((char *)tmpstr, (char*)pgm_read_word(&(at_cmd_table[AT_WNET])));
    

    제일 좋은 것은 호환성을 위해 PROGMEM 키워드를 사용하지 않는 것이 제일 좋겠으나, Arduino Board 중 RAM Size가 현저히 작은 것들이 있기 때문에 사용 할 수 밖에 없었습니다. 이로 인해 아래와 같은 컴파일 에러가 발생 하였고 이를 해결 하기 위해서는 아래와 같으 수정하면 된다.

    PROGMEM const char *at_cmd_table[] =
    

    to

    const char * const at_cmd_table[] PROGMEM =
    


    댓글 0

Designed by Tistory.