2014-03-26 2 views
1

Keil MDK-ARM 컴파일러가 포함 된 임베디드 프로젝트에서 작업 중입니다. 외부 메모리를 힙으로 액세스하려고 시도하지만 다운로드가 완료되면 내 마이크로 (마이크로는 lpc1788)에서 내 프로그램을 다운로드하면 startup.c 파일에서 크래시가 발생하지만 (외부 메모리에 액세스 할 수 있음) (힙 부분이 증가하기 전).외부 메모리에 힙으로 액세스하려면 어떻게해야합니까?

이제 누가 외부 샘플을 힙으로 사용하여 uVision을 구성하는 작은 샘플 프로젝트를 제공 할 수 있습니까? 스택 및 힙에 내부 및 외부 RAM을 사용하여 내부 FLASH에서 프로그램 실행을 위해 uVision을 구성하려고합니다.

답변

3

먼저 대상 설정 대화 상자에서 RAM1에 대한 외부 램 범위를 지정하고 다른 모든 설정이 프로젝트에 적합한 지 확인하십시오.

그런 다음 링커 설정 탭에서 옵션 "대상 대화에서 를 사용하여 메모리 레이아웃의"선택을 취소하십시오. 이렇게하면 대상 설정에 정의 된 레이아웃을 처음에 반영 할 스 캐터 파일을 수동으로 편집 할 수 있습니다.

수정 (예를 들어) 따라서 외부 램의 단면을 만들 수있는 분산 파일 :

RW_RAM1 0x60000000 UNINIT 0x00040000 { ; RW data 
    *(HEAP) ; external SRAM 
    } 

실제 주소 부분이 다를 수있다.

RW_RAM1 0x60000000 UNINIT 0x00040000 { ; RW data 
    *(HEAP) ; external SRAM 
    .ANY (+RW +ZI) 
    } 

가 있는지 확인하기 위해 HEAP 섹션에 대한지도 파일을 확인하십시오 : 당신은 링커가 다음이 공간에 다른 데이터를 배치 할 수 있도록하려는 경우, 충분한 힙에 대한 모든 외부 RAM을 사용하려면 공간은 필요에 따라 할당되었습니다.

필요한 경우 스택을 마찬가지로 재배치 할 수 있습니다. 그러나 외부 메모리 액세스가 내부 메모리보다 느리므로 성능에 영향을 미칠 수 있습니다.

외부 RAM 장치를 일치시키기 위해 외장 RAM 컨트롤러를 올바르게 초기화했다고 가정합니다.이 작업은 system_lpc1788.c (또는 시작 코드의 비슷하게 이름이 지정된 파일)에서 수행해야합니다. STM32, 아마도 system_lpc17xx.c)

+0

@aria nikan : 저는 솔루션을 단순화했습니다. 더 이상 시작 파일을 수정할 필요가 없습니다. – Clifford

관련 문제