TMS320/Error 해결2016. 9. 9. 04:17

일반 PC와 다르게 MCU는 메모리가 크게 제한되어 있다.

기본적으로 DSP 28335는 Stack과 Heap이 0x400으로 설정되어 있다.

기본적으로 작은 프로젝트에서는 크게 신경쓸것 없으나 규모가 커질수록 신경을 많이 써줘야 한다.


메모리 설정에 대한 문제 사례와 해결을 확인하자.



위 사진은 Stack과 Heap의 메모리를 설정하는 부분이다. 기본값으로 되어있다.



위 사진은 현재 다루고 있는 프로젝트에서 클래스 선언 관련 부분이다.

IMUTranslator, IMUSensor, GPSSensor, wSession, Actuator, sHeading 등등 다양한 클래스 변수들이 정적으로 선언되어 있다.

단순하게 new를 사용하지 않고 선언하였다.


이 때 발생하는 문제를 확인하자.


위 사진은 센서로부터 받은 데이터를 처리하고 전송하기 전의 함수이다.

약 300*2 byte 크기의 버퍼이며 주소는 0x00000630이다




호출된 함수에서 참조된 배열의 주소가 0x00000000 이 되어있다.

0이 아닌 다른 주소가 전달되기도 하고 dataLength값이 변하거나 해당 클래스의 다른 변수값들이 변동되기도 한다.

이런 현상은 정적으로 선언된 배열의 길이가 매우 길때도 종종 발생한다.


원인은 stack 메모리 부족인 것으로 확인되었다. 어떤 과정을 거쳐서 저 주소값이 전달된지는 필자도 잘 모르겠다.


----------------------

그럼 이제 해결법을 제시한다.


1. 동적 메모리 사용


위 사진같이 new 나 malloc을 사용한 동적할당을 이용한다. 이렇게 하면 Stack 대신 Heap 메모리를 사용하게 된다.


2. 정적 메모리 증가


위와 같이 정적 메모리를 늘리기 위한 두가지 과정을 거치면 된다.

cmd 파일의 .stack을 RAMM1 에서 RAMM1|RAML6 으로 변경하였다.



주소값이 정상적으로 전달되었음을 확인할 수 있다.

'TMS320 > Error 해결' 카테고리의 다른 글

.stack의 function memory  (0) 2017.01.25
Illegal isr problem  (0) 2016.09.08
[CCS V5]#10010 error, #10265  (0) 2014.07.17
[CCS V5]trouble setting breakpoint with the action  (1) 2014.07.17
[CCS V5]no source available  (0) 2014.07.17
Posted by 십자성군