Ethernetwebsoc

Dependencies:   C12832_lcd LM75B WebSocketClient mbed-rtos mbed Socket lwip-eth lwip-sys lwip

Committer:
GordonSin
Date:
Fri May 31 04:09:54 2013 +0000
Revision:
0:0ed2a7c7190c
31/5/2013;

Who changed what in which revision?

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