【问题标题】:FreeRTOS Memory Management Scheme 1 - Request Help For Understanding Memory AlignmentFreeRTOS 内存管理方案 1 - 请求帮助以了解内存对齐
【发布时间】:2017-09-20 20:24:11
【问题描述】:

我正在尝试了解 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 ) ) );
        }

我正在研究 arm cortex m3 mcu。所以

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

为什么我们不能只使用 pucAlignedHeap = &ucHeap; ?

感谢您的回答。

【问题讨论】:

    标签: memory-management arm memory-alignment freertos cortex-m


    【解决方案1】:

    所有FreeRTOS heap allocation schemes 都这样做是因为C 标准要求动态分配内存的起始地址与处理器的要求对齐。您发布的代码正在对齐。许多代码假定 malloc() 是对齐的,因此使用它来存储必须对齐的项目,而无需执行额外的检查,或者必须分配比自身截断到对齐地址所需的更多 RAM。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-17
      • 1970-01-01
      • 2019-05-16
      • 2011-07-21
      • 2018-06-12
      相关资源
      最近更新 更多