mt2523堆存储空间是否在cacheable区间?
时间:10-02
整理:3721RD
点击:
为了受益大多数用户的performance,比如任务的堆栈空间,所以把堆空间放在cacheable区间内。
但是有些用户,比如DMA,也有临时buffer的需求,但同时又希望该buffer放在non-cacheable区间。
所以提供了两个API来满足类似用户的需求:pvPortMallocNC()和vPortFreeNC()。另外这两个API具有平台无关性,比如在MT7687和MT7697平台上是没有开cache的,这两个API 会wrap到FreeRTOS的pvPortMalloc() 和vPortFree()。所以用户也不需要特别注意平台的差异性,直接使用即可。另外所有和cache相关的操作都是在API内部实现,对用户是透明的。
pvPortMallocNC()和vPortFreeNC()简单介绍如下:
void *pvPortMallocNC(size_t xWantedSize)
功能类似pvPortMalloc(),从堆上要用户指定的空间xWantedSize,并返回memory pointer, 唯一的差别是要到的memory是在non-cacheable区间。
void vPortFreeNC(void *pv)功能类似vPortFree(),会释放指针pv指向的memory空间。
但是有些用户,比如DMA,也有临时buffer的需求,但同时又希望该buffer放在non-cacheable区间。
所以提供了两个API来满足类似用户的需求:pvPortMallocNC()和vPortFreeNC()。另外这两个API具有平台无关性,比如在MT7687和MT7697平台上是没有开cache的,这两个API 会wrap到FreeRTOS的pvPortMalloc() 和vPortFree()。所以用户也不需要特别注意平台的差异性,直接使用即可。另外所有和cache相关的操作都是在API内部实现,对用户是透明的。
pvPortMallocNC()和vPortFreeNC()简单介绍如下:
void *pvPortMallocNC(size_t xWantedSize)
功能类似pvPortMalloc(),从堆上要用户指定的空间xWantedSize,并返回memory pointer, 唯一的差别是要到的memory是在non-cacheable区间。
void vPortFreeNC(void *pv)功能类似vPortFree(),会释放指针pv指向的memory空间。