현재 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
을 수행 할 때
, 그것은 제대로 작동합니다. 이것이 일어나는 이유는 무엇입니까?
OS 프로듀서가 대답해야 할 사항 중 하나 일 것입니다. 또는 malloc의 OS 소스 코드를 살펴 봐야 할 것입니다. OS를 제대로 초기화하기 전에 malloc이 "작동"한다는 것에 매우 놀랐습니다. –
Us 추측은 모두 매우 훌륭하지만 실제로 할당 된 것을 살펴보고 디버거를 사용하여 malloc이 만족스럽지 않은 이유를 찾아야합니다. – ams
또한'errno'를 확인 했습니까? – ams