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

2014. 10. 20. 11:272018년 이전 관심사/Arduino

반응형


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 =


반응형