RTOS configured for use with Networking libraries

Dependents:   EthernetHTTPClientTest

Committer:
donatien
Date:
Thu May 24 08:56:51 2012 +0000
Revision:
0:07f30e7c9897
[mbed] converted /VodafoneK3770Lib/rtos

Who changed what in which revision?

UserRevisionLine numberNew contents of line
donatien 0:07f30e7c9897 1 /* Copyright (c) 2012 mbed.org */
donatien 0:07f30e7c9897 2 #ifndef MEMORYPOOL_H
donatien 0:07f30e7c9897 3 #define MEMORYPOOL_H
donatien 0:07f30e7c9897 4
donatien 0:07f30e7c9897 5 #include <stdint.h>
donatien 0:07f30e7c9897 6 #include <string.h>
donatien 0:07f30e7c9897 7
donatien 0:07f30e7c9897 8 #include "cmsis_os.h"
donatien 0:07f30e7c9897 9
donatien 0:07f30e7c9897 10 namespace rtos {
donatien 0:07f30e7c9897 11
donatien 0:07f30e7c9897 12 /*! Define and manage fixed-size memory pools of objects of a given type.
donatien 0:07f30e7c9897 13 \tparam T data type of a single object (element).
donatien 0:07f30e7c9897 14 \tparam queue_sz maximum number of objects (elements) in the memory pool.
donatien 0:07f30e7c9897 15 */
donatien 0:07f30e7c9897 16 template<typename T, uint32_t pool_sz>
donatien 0:07f30e7c9897 17 class MemoryPool {
donatien 0:07f30e7c9897 18 public:
donatien 0:07f30e7c9897 19 /*! Create and Initialize a memory pool. */
donatien 0:07f30e7c9897 20 MemoryPool() {
donatien 0:07f30e7c9897 21 #ifdef CMSIS_OS_RTX
donatien 0:07f30e7c9897 22 memset(_pool_m, 0, sizeof(_pool_m));
donatien 0:07f30e7c9897 23 _pool_def.pool = _pool_m;
donatien 0:07f30e7c9897 24
donatien 0:07f30e7c9897 25 _pool_def.pool_sz = pool_sz;
donatien 0:07f30e7c9897 26 _pool_def.item_sz = sizeof(T);
donatien 0:07f30e7c9897 27 #endif
donatien 0:07f30e7c9897 28 _pool_id = osPoolCreate(&_pool_def);
donatien 0:07f30e7c9897 29 }
donatien 0:07f30e7c9897 30
donatien 0:07f30e7c9897 31 /*! Allocate a memory block of type T from a memory pool.
donatien 0:07f30e7c9897 32 \return address of the allocated memory block or NULL in case of no memory available.
donatien 0:07f30e7c9897 33 */
donatien 0:07f30e7c9897 34 T* alloc(void) {
donatien 0:07f30e7c9897 35 return (T*)osPoolAlloc(_pool_id);
donatien 0:07f30e7c9897 36 }
donatien 0:07f30e7c9897 37
donatien 0:07f30e7c9897 38 /*! Allocate a memory block of type T from a memory pool and set memory block to zero.
donatien 0:07f30e7c9897 39 \return address of the allocated memory block or NULL in case of no memory available.
donatien 0:07f30e7c9897 40 */
donatien 0:07f30e7c9897 41 T* calloc(void) {
donatien 0:07f30e7c9897 42 return (T*)osPoolCAlloc(_pool_id);
donatien 0:07f30e7c9897 43 }
donatien 0:07f30e7c9897 44
donatien 0:07f30e7c9897 45 /*! Return an allocated memory block back to a specific memory pool.
donatien 0:07f30e7c9897 46 \param address of the allocated memory block that is returned to the memory pool.
donatien 0:07f30e7c9897 47 \return status code that indicates the execution status of the function.
donatien 0:07f30e7c9897 48 */
donatien 0:07f30e7c9897 49 osStatus free(T *block) {
donatien 0:07f30e7c9897 50 return osPoolFree(_pool_id, (void*)block);
donatien 0:07f30e7c9897 51 }
donatien 0:07f30e7c9897 52
donatien 0:07f30e7c9897 53 private:
donatien 0:07f30e7c9897 54 osPoolId _pool_id;
donatien 0:07f30e7c9897 55 osPoolDef_t _pool_def;
donatien 0:07f30e7c9897 56 #ifdef CMSIS_OS_RTX
donatien 0:07f30e7c9897 57 uint32_t _pool_m[3+((sizeof(T)+3)/4)*(pool_sz)];
donatien 0:07f30e7c9897 58 #endif
donatien 0:07f30e7c9897 59 };
donatien 0:07f30e7c9897 60
donatien 0:07f30e7c9897 61 }
donatien 0:07f30e7c9897 62 #endif