본문 바로가기
알면 유용!!/Tip

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

by 루카오리 2014. 5. 22.

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")))

로 수정하는 것이다.


[퍼온 주소 : http://techware-chest.blogspot.kr/2013/04/winavr-pstr-warning.html]