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 order to make priority organization configurable, the default is to
assign all the available priority bits to preemption priority with no assign all the available priority bits to preemption priority with no
sub-priorities. 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, - 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 it allows to load an entire array element's into a pool with a single
operation. operation.