2017-09-20 18 views
0

freeRTOS에서 메모리 할당 체계 1을 이해하려고합니다.FreeRTOS 메모리 관리 계획 1 - 메모리 정렬 이해를위한 도움말 요청

이 함수에서 다음 코드가 사용됩니다.

static uint8_t ucHeap[ configTOTAL_HEAP_SIZE ]; 
    static uint8_t *pucAlignedHeap = NULL; 

    if(pucAlignedHeap == NULL) 
     { 
      /* Ensure the heap starts on a correctly aligned boundary. */ 
      pucAlignedHeap = (uint8_t *) (((portPOINTER_SIZE_TYPE) &ucHeap[ portBYTE_ALIGNMENT ]) & (~((portPOINTER_SIZE_TYPE) portBYTE_ALIGNMENT_MASK))); 
     } 

팔 외장 m3 mcu에 대해 연구 중입니다. 그래서 우리가 사용할 수없는 이유는 무엇

portPOINTER_SIZE_TYPE defined as uint32_t 
portBYTE_ALIGNMENT defined as 8 
portBYTE_ALIGNMENT_MASK defined as 0x0007 

단지 pucAlignedHeap = ucHeap; ?

답장을 보내 주셔서 감사합니다.

답변

0

모두 FreeRTOS heap allocation schemes C 표준은 동적으로 할당 된 메모리의 시작 주소가 프로세서의 요구 사항에 맞춰지기 때문에이 작업을 수행합니다. 게시 한 코드는 정렬 작업입니다. malloc()이 정렬되어 있다고 가정하면 malloc()을 사용하여 추가 검사를 수행하지 않고도 정렬해야하는 항목을 저장하거나 정렬 된 주소 자체를 잘라내는 데 필요한 것보다 많은 RAM을 할당해야합니다.