git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@4639 35acf78f-673a-0410-8e92-d51de3d6d3f4

master
gdisirio 2012-09-09 06:57:50 +00:00
parent 216c036191
commit bd02ccd121
3 changed files with 0 additions and 157 deletions

View File

@ -1,96 +0,0 @@
/*
ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010,
2011,2012 Giovanni Di Sirio.
This file is part of ChibiOS/RT.
ChibiOS/RT is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
ChibiOS/RT is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/**
* @file mail.c
* @brief Threads mail code.
*
* @addtogroup mail
* @{
*/
#include "ch.h"
#include "mail.h"
/**
* @brief Initializes a Mail Pool.
* @note The number of the mail objects in the mail pool should be at
* least <b>2+size(mailbox)</b>, this considering one writer and
* one reader, add one element for each extra reader or writer in
* order to avoid waiting on the mail pool. A smaller number of
* elements can be specified if waiting on the pool is acceptable.
*
* @param[out] mlp pointer to a @p MailPool structure
* @param[in] size the size of the mail objects to be placed in the pool
* @param[in] p pointer to the mail objects array first element
* @param[in] n number of elements in the mail objects array
*
* @init
*/
void mailInit(MailPool *mlp, size_t size, void *p, size_t n) {
chPoolInit(&mlp->pool, size, NULL);
chPoolLoadArray(&mlp->pool, p, n);
chSemInit(&mlp->sem, (cnt_t)n);
}
/**
* @brief Allocates a mail object from a mail pool.
* @pre The mail pool must be already been initialized.
*
* @param[in] mlp pointer to a @p MailPool structure
* @param[in] time the number of ticks before the operation timeouts,
* the following special values are allowed:
* - @a TIME_IMMEDIATE immediate timeout.
* - @a TIME_INFINITE no timeout.
* .
* @return The mail object.
* @retval NULL timeout expired.
*
* @api
*/
void *mailCreate(MailPool *mlp, systime_t time) {
msg_t msg;
void *mailp;
msg = chSemWaitTimeout(&mlp->sem, time);
if (msg != RDY_OK)
return NULL;
mailp = chPoolAlloc(&mlp->pool);
chDbgAssert(mailp != NULL, "mailCreate(), #1", "empty pool");
return mailp;
}
/**
* @brief Releases a mail object into a mail pool.
* @pre The mail pool must be already been initialized.
*
* @param[in] mlp pointer to a @p MailPool structure
* @param[in] mailp the pointer to the mail object to be released
*
* @api
*/
void mailDelete(MailPool *mlp, void *mailp) {
chPoolFree(&mlp->pool, mailp);
chSemSignal(&mlp->sem);
}
/** @} */

View File

@ -1,59 +0,0 @@
/*
ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010,
2011,2012 Giovanni Di Sirio.
This file is part of ChibiOS/RT.
ChibiOS/RT is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
ChibiOS/RT is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/**
* @file mail.h
* @brief Threads mail macros and structures.
*
* @addtogroup mail
* @{
*/
#ifndef _MAIL_H_
#define _MAIL_H_
/*
* Module dependencies check.
*/
#if !CH_USE_SEMAPHORES || !CH_USE_MEMPOOLS
#error "Mail Pools require CH_USE_SEMAPHORES and CH_USE_MEMPOOLS"
#endif
/**
* @brief Mail Pool descriptor.
*/
typedef struct {
MemoryPool pool; /**< @brief Available mail objects. */
Semaphore sem; /**< @brief Semaphore guard. */
} MailPool;
#ifdef __cplusplus
extern "C" {
#endif
void mailInit(MailPool *mlp, size_t size, void *p, size_t n);
void *mailCreate(MailPool *mlp, systime_t time);
void mailDelete(MailPool *mlp, void *mailp);
#ifdef __cplusplus
}
#endif
#endif /* _MAIL_H_ */
/** @} */

View File

@ -242,8 +242,6 @@
order to make priority organization configurable, the default is to
assign all the available priority bits to preemption priority with no
sub-priorities.
- NEW: Added support for pools of generic "mail" objects under ./os/various,
mail objects are meant to be used together with mailboxes.
- NEW: Added a new function chPoolLoadArray() to the Memory Pools subsystem,
it allows to load an entire array element's into a pool with a single
operation.