?>

Hard Copy World

HCW

Q&A

Home > Forum >

Q&A

[질문] 부족한 메모리 확보 방법.. 플래시 공간 활용 등.

페이지 정보

작성자 돌메 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 작성일16-06-21 18:43 조회1,169회 댓글2건

본문

아두이노 버전 : Arduino Mega 2560

아두이노 프로그램 버전  : Arduino V1.7.8


UART를 4개 모두 쓰고 있는 상황이라..
통신 데이터를 저장할 버퍼를 각 포트당 1K ~ 2K씩 할당해 놓은 상태입니다.

Arudino Mega 2560이 메모리가 8K로 아는데..
통신 버퍼로 2K Bytes를 사용하고,
이들 데이터를 가공해서 사용할 버퍼를 2KBytes를 선언하니 (모두  Global 변수로 선언)

Low memory availabel, stability problems may occur.

이란 경고 메세지가 나오네요. 메모리가 부족해서 안전성에서 문제가 생긴다는 것인데..
Global 변수나 버퍼를 Flash Memory에 선언할 수 있는 방법은 없나요?

가령,
byte UARTBuffer[2048];
byte UART_GPS[1024];
byte UART_ADCP[2048];
..
이렇게 몇개만 선언하면 벌써 메모리 Full 인데요..
..
Buffer 공간은 필요한 상태라 , 추가적인 메모리 공간의 확보나,
버퍼 공간의 플래시 공간 선언 등..추가적인 메모리 공간을 확보할 방법이 필요합니다.

고수님들 도와주세요..

감사합니다.

댓글목록

최고관리자님의 댓글

최고관리자 쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 댓글의 댓글 작성일

Flash 메모리를 사용하도록 해주는 키워드가 PROGMEM 입니다. PROGMEM 을 변수명 앞에 적어두면 해당 내용이 flash 메모리에 저장되고 RAM을 소비하지 않는데 대신 아두이노 동작중에는 read-only 만 가능합니다. 말씀하신 버퍼 용도록 read/write 할 경우에는 사용할 수 없습니다.
보드를 바꾸시는게 좋긴 한데.. 일단은 메가 보드로 사용해보세요. 메모리 경고 메시지가 출력되더라도 메모리 한계를 넘지 않을 수도 있습니다. 저도 우노보드에 OLED 라이브러리와 여러 배열을 함께 사용하면 메모리 한계를 넘지 않더라도 저런 메시가 뜨더라구요.