2017-09-20 23 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()がアライメントされていると想定しているため、追加のチェックをしなくてもアライメントが必要なアイテムを格納したり、アライメントされたアドレス自体を切り捨てるために必要以上にRAMを割り当てる必要がありません。