u8 TEST[3][204]={0,}; 배열 크기를 다음과 같이 잡으면
다음과 같음 오류가 납니다.
u8 TEST[3][104]={0,}; 다음과같이 줄이면 오류가 나지 않습니다. (이 배열은 선언만 한것이 아닌실제 연산하며 동작중인 배열 입니다.) MCU의 메모리 가 부족해서 그러는것인가요? 아니면 자료형 때문에 문제가 되는 건가요?(자료형때문이라면 int로 바꾸기에는 무리가 있습니다) 크기를 u8 TEST[3][204]로 늘릴수 있는 방법은 무엇이 있을까요?
혹시 메모리 용량 문제라면 메모리를 사용자가 할당해서 늘릴수도 있나요?
툴은 ATMEL STUDIO를 쓰고 있습니다.
MCU는 ATmega164A를 쓰고 있습니다.
이전에 쓴 글하고 연계해서 답글을 답니다.
1. 세개의 기기의 결과값을 위 어레이에 ascii로 저장할 필요없습니다.
바이너리 값으로 한바이트(값)만 넣으면 기기당 20 바이트,
20 x 3개의 기기 = 60 바이트이면 됩니다.
2. 저장한 TEST 값을 시리얼로 보낼때 ascii로 보내면 됩니다.
u8 TEST[3][20]; // 이미 array의 위치가 데이타 위치를 의미하므로 쌍으로 넣을 필요없음, value만저장
for(num = 0 ; num < 3 ; num ++)
for( i = 0 ; i < 20 ; i ++)
{
char string[10];
sprintf(string,"(%d)[%d],",i, TEST[num][i]);
uart출력
}eogh 위 char string[10] => string[12] 정도 늘려야 하구요
값은 binary로 가지고 있고 uart로 보낼때 한 기기이 한 데이타분량만 ascii string으로 바꿔서
보내기를 반복하면 된다는 드ㄸㅆ입니다.
u8 TEST[3][20];
이것만 잡혀 있어도 되구요..
각 기기의 값을 TEST[x][y]에 저장해야죠..
또한
만약 TEST라는게 단순 출력을 위해 필요한 공간이었다면
이 조차도 필요없습니다.
TEST에 옮기는 원래 위치에 저장된 걸 string으로 바꿔서 바로 보내도 됩니다.1. 메모리 확보
컴파일시 생성된 전체 map 파일(메모리 할당 결과)을 보고 뭘 더 줄여야 612바이트 이상이 확보될지 확인해보시고요.
2. 구조변경
정말 그렇게 메모리를 확보할 필요가 있는가? 하는 문제는 별도의 문제죠. 인베디드홀릭님 글 참조하시고, 그런 형태로 프로그램의 구조나 동작 형태를 변경하면 무리해서 메모리 확보를 하지 않아도 되는 방법이 존재합니다.[출처] 메모리 부족 문제 메모리 늘리는법 질문 (당근이의 AVR 갖구 놀기) |작성자 eogh
'JA(EOGH) Q&A Carroty' 카테고리의 다른 글
stm32 remap 질문(부저 멜로디) (0) | 2018.08.17 |
---|---|
공통 이미터,베이스,콜렉터 회로에관한 간단한질문 (0) | 2018.08.17 |
AVR 타이머 OCR 공식에 대하여 (0) | 2018.08.17 |
배열 크기 오류 질문 (0) | 2018.08.17 |
sprintf 함수에 대한 질문입니다. (0) | 2018.08.17 |