Added memory pools to the C++ wrapper.
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@5020 35acf78f-673a-0410-8e92-d51de3d6d3f4master
parent
7e137d9cf2
commit
3edb2cf553
|
@ -569,8 +569,42 @@ namespace chibios_rt {
|
||||||
|
|
||||||
return chMBFetchI(&mb, msgp);
|
return chMBFetchI(&mb, msgp);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* CH_USE_MAILBOXES */
|
#endif /* CH_USE_MAILBOXES */
|
||||||
|
|
||||||
|
#if CH_USE_MEMPOOLS
|
||||||
|
/*------------------------------------------------------------------------*
|
||||||
|
* chibios_rt::MemoryPool *
|
||||||
|
*------------------------------------------------------------------------*/
|
||||||
|
MemoryPool::MemoryPool(size_t size, memgetfunc_t provider) {
|
||||||
|
|
||||||
|
chPoolInit(&pool, size, provider);
|
||||||
|
}
|
||||||
|
|
||||||
|
void MemoryPool::loadArray(void *p, size_t n) {
|
||||||
|
|
||||||
|
chPoolLoadArray(&pool, p, n);
|
||||||
|
}
|
||||||
|
|
||||||
|
void *MemoryPool::allocI(void) {
|
||||||
|
|
||||||
|
return chPoolAlloc(&pool);
|
||||||
|
}
|
||||||
|
|
||||||
|
void *MemoryPool::alloc(void) {
|
||||||
|
|
||||||
|
return chPoolAllocI(&pool);
|
||||||
|
}
|
||||||
|
|
||||||
|
void MemoryPool::free(void *objp) {
|
||||||
|
|
||||||
|
chPoolFree(&pool, objp);
|
||||||
|
}
|
||||||
|
|
||||||
|
void MemoryPool::freeI(void *objp) {
|
||||||
|
|
||||||
|
chPoolFreeI(&pool, objp);
|
||||||
|
}
|
||||||
|
#endif /* CH_USE_MEMPOOLS */
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @} */
|
/** @} */
|
||||||
|
|
|
@ -1197,6 +1197,9 @@ namespace chibios_rt {
|
||||||
/*------------------------------------------------------------------------*
|
/*------------------------------------------------------------------------*
|
||||||
* chibios_rt::Mailbox *
|
* chibios_rt::Mailbox *
|
||||||
*------------------------------------------------------------------------*/
|
*------------------------------------------------------------------------*/
|
||||||
|
/**
|
||||||
|
* @brief Class encapsulating a mailbox.
|
||||||
|
*/
|
||||||
class Mailbox {
|
class Mailbox {
|
||||||
public:
|
public:
|
||||||
/**
|
/**
|
||||||
|
@ -1395,7 +1398,7 @@ namespace chibios_rt {
|
||||||
* chibios_rt::MailboxBuffer *
|
* chibios_rt::MailboxBuffer *
|
||||||
*------------------------------------------------------------------------*/
|
*------------------------------------------------------------------------*/
|
||||||
/**
|
/**
|
||||||
* @brief Template class encapsulating a mailbox with its messages buffer.
|
* @brief Template class encapsulating a mailbox and its messages buffer.
|
||||||
*
|
*
|
||||||
* @param N size of the mailbox
|
* @param N size of the mailbox
|
||||||
*/
|
*/
|
||||||
|
@ -1415,6 +1418,112 @@ namespace chibios_rt {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
#endif /* CH_USE_MAILBOXES */
|
#endif /* CH_USE_MAILBOXES */
|
||||||
|
|
||||||
|
#if CH_USE_MEMPOOLS || defined(__DOXYGEN__)
|
||||||
|
/*------------------------------------------------------------------------*
|
||||||
|
* chibios_rt::MemoryPool *
|
||||||
|
*------------------------------------------------------------------------*/
|
||||||
|
/**
|
||||||
|
* @brief Class encapsulating a mailbox.
|
||||||
|
*/
|
||||||
|
class MemoryPool {
|
||||||
|
public:
|
||||||
|
/**
|
||||||
|
* @brief Embedded @p ::MemoryPool structure.
|
||||||
|
*/
|
||||||
|
::MemoryPool pool;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief MemoryPool constructor.
|
||||||
|
*
|
||||||
|
* @api
|
||||||
|
*/
|
||||||
|
MemoryPool(size_t size, memgetfunc_t provider);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Loads a memory pool with an array of static objects.
|
||||||
|
* @pre The memory pool must be already been initialized.
|
||||||
|
* @pre The array elements must be of the right size for the specified
|
||||||
|
* memory pool.
|
||||||
|
* @post The memory pool contains the elements of the input array.
|
||||||
|
*
|
||||||
|
* @param[in] p pointer to the array first element
|
||||||
|
* @param[in] n number of elements in the array
|
||||||
|
*
|
||||||
|
* @api
|
||||||
|
*/
|
||||||
|
void loadArray(void *p, size_t n);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Allocates an object from a memory pool.
|
||||||
|
* @pre The memory pool must be already been initialized.
|
||||||
|
*
|
||||||
|
* @return The pointer to the allocated object.
|
||||||
|
* @retval NULL if pool is empty.
|
||||||
|
*
|
||||||
|
* @iclass
|
||||||
|
*/
|
||||||
|
void *allocI(void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Allocates an object from a memory pool.
|
||||||
|
* @pre The memory pool must be already been initialized.
|
||||||
|
*
|
||||||
|
* @return The pointer to the allocated object.
|
||||||
|
* @retval NULL if pool is empty.
|
||||||
|
*
|
||||||
|
* @api
|
||||||
|
*/
|
||||||
|
void *alloc(void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Releases an object into a memory pool.
|
||||||
|
* @pre The memory pool must be already been initialized.
|
||||||
|
* @pre The freed object must be of the right size for the specified
|
||||||
|
* memory pool.
|
||||||
|
* @pre The object must be properly aligned to contain a pointer to void.
|
||||||
|
*
|
||||||
|
* @param[in] objp the pointer to the object to be released
|
||||||
|
*
|
||||||
|
* @iclass
|
||||||
|
*/
|
||||||
|
void free(void *objp);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Adds an object to a memory pool.
|
||||||
|
* @pre The memory pool must be already been initialized.
|
||||||
|
* @pre The added object must be of the right size for the specified
|
||||||
|
* memory pool.
|
||||||
|
* @pre The added object must be memory aligned to the size of
|
||||||
|
* @p stkalign_t type.
|
||||||
|
* @note This function is just an alias for @p chPoolFree() and has been
|
||||||
|
* added for clarity.
|
||||||
|
*
|
||||||
|
* @param[in] objp the pointer to the object to be added
|
||||||
|
*
|
||||||
|
* @iclass
|
||||||
|
*/
|
||||||
|
void freeI(void *objp);
|
||||||
|
};
|
||||||
|
|
||||||
|
/*------------------------------------------------------------------------*
|
||||||
|
* chibios_rt::MemoryPool *
|
||||||
|
*------------------------------------------------------------------------*/
|
||||||
|
/**
|
||||||
|
* @brief Template class encapsulating a mailbox and its elements.
|
||||||
|
*/
|
||||||
|
template<class T, size_t N>
|
||||||
|
class MemoryPoolBuffer : MemoryPool {
|
||||||
|
private:
|
||||||
|
T pool_buf[N];
|
||||||
|
|
||||||
|
public:
|
||||||
|
MemoryPoolBuffer(void) : MemoryPool(sizeof (T), NULL) {
|
||||||
|
|
||||||
|
loadArray(pool_buf, N);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
#endif /* CH_USE_MEMPOOLS */
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* _CH_HPP_ */
|
#endif /* _CH_HPP_ */
|
||||||
|
|
Loading…
Reference in New Issue