TMS320/F283352017. 2. 22. 04:38

DSP 디버깅에서 확인한 프로그램을 MCU에 업로드할 경우, 기본적으로 제공되는 예제와 같이 flash 영역에 기재할 경우 ROM 영역에서 돌아가는 프로그램은 전체적으로 속도가 느리다. 따라서 디버깅때와는 달리 프로그램이 제대로 돌아가지 않는 경우가 많다.


이를 해결하기 위해서 (1)중요한 변수나 함수영역의 일부를 ram 영역에서 구동하는 방법이 있지만, 코드의 규모이 비교적 소규모이고 전체적으로 디버깅때와 같은 처리속도가 필요하다면, 아예 (2)모든 code를 ram 영역으로 옮기는것도 한 방법이다.


(1)의 방법으로는 일일이 선언해줘야 하는 문제도 있기 때문에 본인으로써는 왠만하면 (2)의 방법을 추천한다.

또한 DSP28377의 경우 ram 영역의 크기가 28335의 3배에 가깝기 때문에 코드의 규모가 비교적 크더라도 적재할 수 있다.


이번 글에서 설명할 것은 코드의 규모가 큰 경우를 위한 메모리 배치와 flash programming이다.

아래는 메모리 배치의 cmd파일의 내용이다. 어느정도 cmd 파일을 건드려 보았다는 전제하에 자세한 설명은 생략한다. 또한 앞글의 reference를 반드시 먼저 확인하기 바란다.


1.



2.


3.


주의해야할 영역은 .stack영역이다. 이 영역은 RAMM0, RAMM1, RAMD0, RAMD1 영역등이 반드시 포함되어야 한다. 그렇지 않을 경우 프로그램을 실행하였을 때 에러관련 인터럽트가 걸려 에러함수에 진입한다.


그 외에 .cinit, .pinit, .econst, .switch 는 GSxRAM을 사용할 수 있다. .text또한 GSxRAM을 사용할 수 있다.


보통 프로젝트를 설계할 때 .text와 .stack 영역의 메모리가 부족한 경우가 종종 발생한다. .stack의 경우 변수 및 함수를 포함한 정적 메모리할당이 관련하며, .text는 프로그램 코드 자체의 크기에 관여한다. 즉, 프로젝트의 소스 규모가 크면 클수록 .text와 .stack이 요구하는 메모리가 커진다고 할 수 있다.


메모리 영역을 공유하여도 되지만 어차피 28377이 제공하는 RAM 영역이 꽤나 크기 때문에 공유하는 일 없이 배치해주었다.


4.


ramfuncs는 (1)방법에서 사용되는 영역이기 때문에 FLASH 영역만 배정하였다. 이 영역을 쓸 일은 없을것이다.



//--------------------------------------------

아래는 플래시 작업을 위해서 변경해야할 파일들이다.


DSP28xxx_SectionCopy_nonBIOS.asm

F2837xD_CodeStartBranch.asm

2837xD_FLASH.cmd

F2837xD_usDelay.asm

F2837xD_SysCtrl.c


DSP28xxx_SectionCopy_nonBIOS.asm 파일은 위에서 선언한 RAM영역에의 메모리 배치를 수행하는 어셈블리어가 짜여있다.


저 위의 파일들을 변경하는 것으로 28377의 디버깅모드로 사용하던 DSP를 동일한 성능으로 stand alone 모드로 사용할 수 있다. 변경전에 디버깅모드로 사용하던 당시의 파일들을 백업하는 것을 잊지말자.


※참고

flash 프로그래밍을 한 이후에 No source available for 어쩌구 하는 로그가 뜰 때가 있습니다.

이 때 디버깅의 진행버튼(> 버튼)을 눌렀을 때 진행이 된다면 아무런 문제가 없는 것입니다.

저의 경우 No source available for "0x3fe493" 라는 로그가 떴습니다.

0x3fe493 이라는 주소는 메모리맵을 참조했을 때 Boot ROM 영역에 있는 주소입니다.(Boot ROM은 0x3F8000~0x3FFFBF 영역을 차지합니다.)

이는 저희가 사용하는 ccs로는 boot rom 영역에 대한 디버깅을 할 수 없기 때문입니다. 이는 DSP의 부트롬 영역에 내장되어 있는 부분이니 저희가 건드릴 일은 없으니 걱정하지 않으셔도 됩니다.

단, 위 로그가 뜬 후에 진행버튼(> 버튼)을 눌렀는데도 프로그램이 진행되지 않는다면 cmd파일에서 메모리를 잘못 배치한 부분이 있을 수 있으니 원인을 알아보시기 바랍니다.


제가 고생한 만큼 이 글을 참고하시는 분들께 도움이 되기를 바랍니다

'TMS320 > F28335' 카테고리의 다른 글

DSP28377x D와 S의 SRAM 차이  (0) 2017.05.12
DSP 28335, 28377 flash 작업을 위한 기본자료  (0) 2017.02.22
DSP28335 Flash programming  (0) 2017.02.19
ePWM 설정  (0) 2017.02.09
DSP 프로젝트 생성(28377, 28335 공통)  (0) 2016.11.21
Posted by 십자성군