Irina's Atelier

Happy New Year :)

[WinAVR] PSTR() 사용시 warning 문제 해결 방법 – 퍼옴


  • [WinAVR] PSTR() 사용시 warning 문제 해결 방법

    WinAVR (2010-01-10) 을 사용하여 컴파일 할 때 아래와 같은 경고를 보게 되는 경우가 있다.

    warning: only initialized variables can be placed into program memory area

    이는 gcc v4.2~4.6에서 발생했던 것으로 프로그램 메모리에 문자열 상수를 저장하여 사용하려고 PSTR() 매크로를 사용할 때 등에 나타난다. 이는 attribute((progmem)) 관련하여 발생하는 것으로 C++ 사용시에만 나타난다. 아래에서 자세한 내용을 확인할 수 있다.

    http://gcc.gnu.org/bugzilla/show_bug.cgi?id=34734

    이러한 문제를 해결하는 방법은 다음과 같다.

    WinAVR 설치된 곳에서 pgmspace.h 파일을 찾아 PSTR() 매크로가 정의된 곳을 다음과 같이 수정한다.

    #define PSTR(s) (__extension__({static char __c[] PROGMEM = (s); &__c[0];}))


    #define PSTR(s) (__extension__({static char __c[] __attribute__((section(".progmem.data"))) = (s); &__c[0];}))

    으로 수정한다. 여기서 실제로 수정되는 부분은 다음과 같다.

    PROGMEM

    __attribute__((section(".progmem.data")))

    로 수정하는 것이다.

    퍼온 주소

  • Advertisements

    답글 남기기

    아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

    WordPress.com 로고

    WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

    Twitter 사진

    Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

    Facebook 사진

    Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

    Google+ photo

    Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

    %s에 연결하는 중

    정보

    이 엔트리는 30/12/2014에 님이 Tip에 게시하였으며 , , 태그가 지정되었습니다.

    내비게이션

    %d 블로거가 이것을 좋아합니다: