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")))
로 수정하는 것이다.
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]
'알면 유용!! > Tip' 카테고리의 다른 글
[Fritzing] 라이브러리 만들기-intro (0) | 2014.09.23 |
---|---|
[Microsoft Visual studio] 컴파일시 MSVCP120D.dll이 없는 에러 (7) | 2014.09.02 |
[AVR]AVRISP MK2 수동 업그레이드 방법 (0) | 2014.03.17 |
[windows]사용하지 않는 COM PORT없애기~!!! (0) | 2014.02.05 |
[office]office2013 ppt에 유투브 동영상 삽입하기!! (2) | 2014.01.21 |