oldtom 发表于 2009-8-25 21:55:53

请教:关于RT-Thread的mem pool!

请教一下,谢谢!
对RT-Thread的mempool部分不是很明白,这个mempool主要是用来做什么的呢?好像kernel自己本身没有用到吧?
另外,这个mempool是否提供给应用程序用呢?应当如何用他呢?

另外顺便提个关于heap mem的建议:
heap的分配,销毁等操作中,建议采用开关中断做资源线程安全保护,允许可以在中断服务程序中分配内存(虽然我们不提倡这样的做法)。

ffxz 发表于 2009-8-26 04:22:04

mem pool,它的分配时间复杂度是O(1),释放时间复杂度也同样是O(1)
也就意味着它的时间准确性是非常棒的,需要的指令数是恒定的(CM3情况下是21条指令,不涉及乘除法指令,基本是单周期指令)。还有一个非常重要的特性是分配和释放操作是具备线程阻塞、唤醒的,在一定情况下是非常有用的。在STM32网络收音机代码中就有使用:对于一个mem pool,其中有数个block,解码线程从此mem pool中申请block,然后通过I2S送给codec。I2S的发送操作是DMA方式的,正常的情况下,解码线程会申请所有的block用于解码音频,从而导致解码线程的阻塞。而I2S的DMA发送完成时,则释放block,这样也就自动唤醒解码线程继续解码了。

关于heap memory的分配和释放,依然不推荐在中断中使用动态内存的做法,养成坏的习惯非常不好的。
页: [1]
查看完整版本: 请教:关于RT-Thread的mem pool!