2013-07-16 4 views
0

현재 Cortex M4F에서 실행중인 SEGGER의 embOS를 평가 중입니다. 128KB의 내부 RAM과 2MB의 외부 RAM이 있으므로 충분한 메모리가 있습니다.RTOS를 내장하고 malloc/free를 사용합니다.

내 프로그램은 일부 동적 할당을 사용합니다 (예, 임베디드 시스템에서는 권장되지 않습니다).

내 작업을 시작할 때 OS_malloc이 embOS에서 제공하는 스레드 안전 버전 인 malloc/OS_malloc을 호출하려고합니다. 두 경우 모두 malloc이 실패하고 NULL 포인터가 반환되었습니다.

**//Malloc here does not fail** 
OS_IncDI();      /* Initially disable interrupts */ 
**//Malloc here does not fail** 
OS_InitKern();     /* Initialize OS     */ 
**//Malloc here does fail !!** 
OS_InitHW();      /* Initialize Hardware for OS */ 

OS_CREATETASK(&TCBHP, "My Task", HPTask, 50, StackHP); //**<--And off course malloc failes inside teh task also** 

OS_Start(); 

내가 가서 마이크 리움에서 UCOS를 사용했는데, 나는 같은 동작을 참조하십시오 운영체제가 시작되기 전에 같은 malloc/OS_malloc을 수행 할 때

, 그것은 제대로 작동합니다. 이것이 일어나는 이유는 무엇입니까?

+0

OS 프로듀서가 대답해야 할 사항 중 하나 일 것입니다. 또는 malloc의 OS 소스 코드를 살펴 봐야 할 것입니다. OS를 제대로 초기화하기 전에 malloc이 "작동"한다는 것에 매우 놀랐습니다. –

+0

Us 추측은 모두 매우 훌륭하지만 실제로 할당 된 것을 살펴보고 디버거를 사용하여 malloc이 만족스럽지 않은 이유를 찾아야합니다. – ams

+0

또한'errno'를 확인 했습니까? – ams

답변

0

나는이 문제를 해결하기 위해 가고 있다고 생각합니다.

보인다

그 링커 스크립트 설정 :

_Min_Heap_Size = 0x19000;/* 필요한 힙 크기 */ _Min_Stack_Size = 0x200;/* 스택 요구량 */

대신 :

_Min_Heap_Size = × 00;/* 필요한 힙 크기 */ _Min_Stack_Size = 0x200;/* 필요한 스택 크기 */

1

malloc는 반환 조건을

1) Running out of memory 다음에 실패 할 수 있지만 을 말했듯이 내가 메모리 많이 있으므로 이러한 경우가 있습니다.

2) malloc is not able to allocate contiguous memory of requested size.

옵션 2는 귀하의 사례에 대한 책임이 있습니다.