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

This commit is contained in:
gdisirio 2008-07-26 17:39:01 +00:00
parent 169c9d8fb9
commit b27329f45b
18 changed files with 15 additions and 245 deletions

View File

@ -75,10 +75,6 @@
* APIs are included in the kernel.*/
#define CH_USE_SEMSW
/** Configuration option: if specified then the Conditional Variables APIs are
* included in the kernel.*/
#define CH_USE_CONDVARS
/** Configuration option: if specified then the Semaphores with timeout APIs
* are included in the kernel.
* @note requires \p CH_USE_SEMAPHORES.

View File

@ -75,10 +75,6 @@
* APIs are included in the kernel.*/
#define CH_USE_SEMSW
/** Configuration option: if specified then the Conditional Variables APIs are
* included in the kernel.*/
#define CH_USE_CONDVARS
/** Configuration option: if specified then the Semaphores with timeout APIs
* are included in the kernel.
* @note requires \p CH_USE_SEMAPHORES.

View File

@ -75,10 +75,6 @@
* APIs are included in the kernel.*/
#define CH_USE_SEMSW
/** Configuration option: if specified then the Conditional Variables APIs are
* included in the kernel.*/
#define CH_USE_CONDVARS
/** Configuration option: if specified then the Semaphores with timeout APIs
* are included in the kernel.
* @note requires \p CH_USE_SEMAPHORES.

View File

@ -75,10 +75,6 @@
* APIs are included in the kernel.*/
//#define CH_USE_SEMSW
/** Configuration option: if specified then the Conditional Variables APIs are
* included in the kernel.*/
//#define CH_USE_CONDVARS
/** Configuration option: if specified then the Semaphores with timeout APIs
* are included in the kernel.
* @note requires \p CH_USE_SEMAPHORES.

View File

@ -75,10 +75,6 @@
* APIs are included in the kernel.*/
#define CH_USE_SEMSW
/** Configuration option: if specified then the Conditional Variables APIs are
* included in the kernel.*/
#define CH_USE_CONDVARS
/** Configuration option: if specified then the Semaphores with timeout APIs
* are included in the kernel.
* @note requires \p CH_USE_SEMAPHORES.

View File

@ -75,10 +75,6 @@
* APIs are included in the kernel.*/
#define CH_USE_SEMSW
/** Configuration option: if specified then the Conditional Variables APIs are
* included in the kernel.*/
#define CH_USE_CONDVARS
/** Configuration option: if specified then the Semaphores with timeout APIs
* are included in the kernel.
* @note requires \p CH_USE_SEMAPHORES.

View File

@ -75,10 +75,6 @@
* APIs are included in the kernel.*/
#define CH_USE_SEMSW
/** Configuration option: if specified then the Conditional Variables APIs are
* included in the kernel.*/
#define CH_USE_CONDVARS
/** Configuration option: if specified then the Semaphores with timeout APIs
* are included in the kernel.
* @note requires \p CH_USE_SEMAPHORES.

View File

@ -75,10 +75,6 @@
* APIs are included in the kernel.*/
#define CH_USE_SEMSW
/** Configuration option: if specified then the Conditional Variables APIs are
* included in the kernel.*/
#define CH_USE_CONDVARS
/** Configuration option: if specified then the Semaphores with timeout APIs
* are included in the kernel.
* @note requires \p CH_USE_SEMAPHORES.

View File

@ -76,10 +76,6 @@
* APIs are included in the kernel.*/
#define CH_USE_SEMSW
/** Configuration option: if specified then the Conditional Variables APIs are
* included in the kernel.*/
#define CH_USE_CONDVARS
/** Configuration option: if specified then the Semaphores with timeout APIs
* are included in the kernel.
* @note requires \p CH_USE_SEMAPHORES.

View File

@ -80,10 +80,6 @@
* APIs are included in the kernel.*/
#define CH_USE_SEMSW
/** Configuration option: if specified then the Conditional Variables APIs are
* included in the kernel.*/
#define CH_USE_CONDVARS
/** Configuration option: if specified then the Semaphores with timeout APIs
* are included in the kernel.
* @note requires \p CH_USE_SEMAPHORES.

View File

@ -31,9 +31,9 @@ typedef struct {
IOREG32 RVR;
IOREG32 CVR;
IOREG32 CBVR;
} ST;
} CM3_ST;
#define STBase ((ST *)0xE000E010)
#define STBase ((CM3_ST *)0xE000E010)
#define ST_CSR (STBase->CSR)
#define ST_RVR (STBase->RVR)
#define ST_CVR (STBase->CVR)
@ -70,9 +70,9 @@ typedef struct {
IOREG32 IABR[8];
IOREG32 unused5[56];
IOREG32 IPR[60];
} NVIC;
} CM3_NVIC;
#define NVICBase ((NVIC *)0xE000E100)
#define NVICBase ((CM3_NVIC *)0xE000E100)
#define NVIC_ISER(n) (NVICBase->ISER[n])
#define NVIC_ICER(n) (NVICBase->ICER[n])
#define NVIC_ISPR(n) (NVICBase->ISPR[n])
@ -95,9 +95,9 @@ typedef struct {
IOREG32 MMFAR;
IOREG32 BFAR;
IOREG32 AFSR;
} SCB;
} CM3_SCB;
#define SCBBase ((SCB *)0xE000ED00)
#define SCBBase ((CM3_SCB *)0xE000ED00)
#define SCB_CPUID (SCBBase->CPUID)
#define SCB_ICSR (SCBBase->ICSR)
#define SCB_VTOR (SCBBase->VTOR)

View File

@ -82,6 +82,8 @@ Win32-MinGW - ChibiOS/RT simulator and demo into a WIN32 process,
still supported when the feature is disabled but the scheduling among them
becomes cooperative.
- FIX: Fixed a bug in the chThdSetPriority() API.
- FIX: Modified the structure names into nvic.h in order to not make them
collide with external libraries.
- Made the Cortex-M3 port preemption code more readable.
*** 0.6.8 ***

View File

@ -1,132 +0,0 @@
/*
ChibiOS/RT - Copyright (C) 2006-2007 Giovanni Di Sirio.
This file is part of ChibiOS/RT and Copyright (C) 2008 Leon Woestenberg.
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/>.
*/
/**
* @addtogroup CondVars
* @{
*/
#include <ch.h>
#ifdef CH_USE_CONDVARS
/**
* Initializes s \p CondVar structure.
* @param cp pointer to a \p CondVar structure
*/
void chCondInit(CondVar *cp) {
fifo_init(&cp->c_queue);
}
/**
* Signals one thread that is waiting on the condition variable.
*
* @param mp pointer to the \p CondVar structure
*/
void chCondSignal(CondVar *cp) {
chSysLock();
chCondSignalS(cp);
chSysUnlock();
}
/**
* Signals one thread that is waiting on the condition variable.
*
* @param cp pointer to the \p CondVar structure
* @note This function must be called within a \p chSysLock() / \p chSysUnlock()
* block.
*/
void chCondSignalS(CondVar *cp) {
if (notempty(&cp->c_queue))
/* wake up the first thread, if any */
chSchWakeupS(fifo_remove(&cp->c_queue), RDY_OK);
}
/**
* Signal all threads that are waiting on the condition variable.
*
* @param mp pointer to the \p CondVar structure
*/
void chCondBroadcast(CondVar *cp) {
chSysLock();
chCondBroadcastS(cp);
chSchRescheduleS();
chSysUnlock();
}
/**
* Signal all threads that are waiting on the condition variable.
*
* @param cp pointer to the \p CondVar structure
* @note This function must be called within a \p chSysLock() / \p chSysUnlock()
*/
void chCondBroadcastS(CondVar *cp) {
/* empties the condition variable queue and inserts all the Threads into the
* ready list in FIFO order. The wakeup message is set to \p RDY_RESET in
* order to make a chCondBroadcast() detectable from a chCondSignal(). */
while (cp->c_queue.p_next != (void *)&cp->c_queue)
chSchReadyI(fifo_remove(&cp->c_queue))->p_rdymsg = RDY_RESET;
}
/**
* Wait on the condition variable protected by the given mutex.
*
* Release the mutex, wait on the condition variable, and lock the mutex. This
* is done atomically.
*
* @param cp pointer to the \p CondVar structure
* @note This function must be called within a \p chSysLock() / \p chSysUnlock()
*/
msg_t chCondWait(CondVar *cp, Mutex *mp) {
msg_t msg;
chSysLock();
msg = chCondWaitS(cp, mp);
chSysUnlock();
return msg;
}
msg_t chCondWaitS(CondVar *cp, Mutex *mp) {
/* lock the mutex that protects access to the condition variable */
chMtxLockS(mp);
/* wait on the condition variable */
prio_insert(currp, &cp->c_queue);
/* Thread remembers the condition variable it waits on */
currp->p_wtcondp = cp;
/* sleep until signaled */
chSchGoSleepS(PRWTCOND);
/* lock the mutex that protects access to the condition variable */
chMtxLockS(mp);
currp->p_wtcondp = NULL;
return currp->p_rdymsg;
}
#endif /* CH_USE_CONDVARS */
/** @} */

View File

@ -35,7 +35,6 @@
#include "scheduler.h"
#include "semaphores.h"
#include "mutexes.h"
#include "condvars.h"
#include "events.h"
#include "messages.h"
#include "threads.h"

View File

@ -1,53 +0,0 @@
/*
ChibiOS/RT - Copyright (C) 2006-2007 Giovanni Di Sirio.
This file is part of ChibiOS/RT and Copyright (C) 2008 Leon Woestenberg.
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/>.
*/
/**
* @addtogroup CondVars
* @{
*/
#ifndef _CONDVARS_H_
#define _CONDVARS_H_
#ifdef CH_USE_CONDVARS
typedef struct CondVar {
/** Queue of the threads sleeping on this CondVar. */
ThreadsQueue c_queue;
} CondVar;
#ifdef __cplusplus
extern "C" {
#endif
void chCondInit(CondVar *cp);
void chCondSignal(CondVar *cp);
void chCondSignalS(CondVar *cp);
void chCondBroadcast(CondVar *cp);
void chCondBroadcastS(CondVar *cp);
msg_t chCondWait(CondVar *cp, Mutex *mp);
msg_t chCondWaitS(CondVar *cp, Mutex *mp);
#ifdef __cplusplus
}
#endif
#endif /* CH_USE_CONDVARS */
#endif /* _CONDVARS_H_ */
/** @} */

View File

@ -122,20 +122,18 @@ struct Thread {
#define PRWTSEM 3
/** Thread state: Waiting on a mutex. */
#define PRWTMTX 4
/** Thread state: Waiting on a condition variable. */
#define PRWTCOND 5
/** Thread state: Waiting in \p chThdSleep() or \p chThdSleepUntil(). */
#define PRSLEEP 6
#define PRSLEEP 5
/** Thread state: Waiting in \p chThdWait(). */
#define PRWAIT 7
#define PRWAIT 6
/** Thread state: Waiting in \p chEvtWait(). */
#define PRWTEVENT 8
#define PRWTEVENT 7
/** Thread state: Waiting in \p chMsgSend(). */
#define PRSNDMSG 9
#define PRSNDMSG 8
/** Thread state: Waiting in \p chMsgWait(). */
#define PRWTMSG 10
#define PRWTMSG 9
/** Thread state: After termination.*/
#define PREXIT 11
#define PREXIT 10
#ifdef CH_USE_TERMINATE
/** Thread option: Termination requested flag.*/

View File

@ -6,4 +6,4 @@ KERNSRC = ../../src/chinit.c ../../src/chdebug.c \
../../src/chsem.c ../../src/chmtx.c \
../../src/chevents.c ../../src/chmsg.c \
../../src/chsleep.c ../../src/chqueues.c \
../../src/chcond.c ../../src/chserial.c
../../src/chserial.c

View File

@ -76,10 +76,6 @@
* APIs are included in the kernel.*/
#define CH_USE_SEMSW
/** Configuration option: if specified then the Conditional Variables APIs are
* included in the kernel.*/
#define CH_USE_CONDVARS
/** Configuration option: if specified then the Semaphores with timeout APIs
* are included in the kernel.
* @note requires \p CH_USE_SEMAPHORES.