首页 理论教育 Contiki物联网操作系统API函数使用指南

Contiki物联网操作系统API函数使用指南

时间:2023-11-20 理论教育 版权反馈
【摘要】:MMEM管理内存的API函数如下:头文件core/lib/mmem.h 中声明了编程接口API 函数,函数mmem_init()用于初始化分配的内存,宏MMEM_SIZE定义了管理内存池的大小,其默认大小为4~1024B,但可以通过定义宏MMEM_CONF_SIZE 的值修改管理内存池的大小,该宏的定义在相应平台使用的配置文件中。但要注意的是,一些平台没有对MMEM 库进行初始化操作,当使用这些平台时必须确保调用了初始化函数mmem_init()。需要注意的是,只有struct被定义为pacekd时这种转换才是安全的。最后,例子中20行调用函数mmem_free()释放管理内存。

Contiki物联网操作系统API函数使用指南

MMEM管理内存的API函数如下:头文件core/lib/mmem.h 中声明了编程接口API 函数,函数mmem_init()用于初始化分配的内存,宏MMEM_SIZE定义了管理内存池的大小,其默认大小为4~1024B,但可以通过定义宏MMEM_CONF_SIZE 的值修改管理内存池的大小,该宏的定义在相应平台使用的配置文件中。但要注意的是,一些平台没有对MMEM 库进行初始化操作,当使用这些平台时必须确保调用了初始化函数mmem_init()。初始化函数mmem_init()的调用可以放置在使用MMEM 内存的模块或相应平台的启动代码中,在platforms/name/contiki-name-main.c()函数中能够发现这些代码。

函数mmem_alloc()用于分配一个内存块,第一个参数m 是对sturct mmem内存的引用,函数mmem_alloc()中初始化该参数并在之后用于引用内存块。参数size 用于指定分配内存块的大小,如果成功分配内存块,mmem_alloc()函数返回非0 值,如果没有足够内存可用,则返回0 值。当不再需要已分配内存时,必须使用函数mmem_free()释放已分配内存。宏MMEM_PTR()用于返回变量m所指向的内存块的指针。mmem_free()用以释放指针m指向的管理内存块,MMEM 库将尝试在mmem_free()函数中实现对管理内存池进行碎片整理,向下移动释放内存块之后的内存,以便在新释放内存位置开始使用内存,每个移动了的内存块的struct mmem 对象都会更新为MMEM_PTR()返回指针,以反映内存块的新位置。下面的例子中test_mmem()函数分配管理内存对象,复制数据结构到管理内存,并且提取该结构中元素的值,当内存的使用完成时释放管理内存。(www.xing528.com)

上面的测试程序展示了怎样使用管理内存库的基本例子,该例第5 行分配了一个变量mmem,这个变量标识将要分配的管理内存对象。第9行中,将变量mmem 作为函数mmem_alloc()的参数以便分配sizeof(my_data)字节的结构空间。如果内存分配成功,复制现有结构中的数值到指针MMEM_PTR(&mmem)指向的已分配结构中,然后可以通过从MMEM_PTR(&mmem)到struct my_struct*的类型转换实现对已分配结构中各个成员的访问,如例子中第18行所示。需要注意的是,只有struct被定义为pacekd时这种转换才是安全的。最后,例子中20行调用函数mmem_free()释放管理内存。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈