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

This commit is contained in:
gdisirio 2009-10-17 15:42:19 +00:00
parent 33114fa3e8
commit 404fe10939
8 changed files with 15 additions and 22 deletions

View File

@ -68,7 +68,7 @@ typedef struct {
tprio_t r_prio; /**< This field must be initialized to tprio_t r_prio; /**< This field must be initialized to
zero.*/ zero.*/
/* End of the fields shared with the Thread structure.*/ /* End of the fields shared with the Thread structure.*/
#if CH_USE_ROUNDROBIN #if CH_TIME_QUANTUM > 0
cnt_t r_preempt; /**< Round robin counter.*/ cnt_t r_preempt; /**< Round robin counter.*/
#endif #endif
#ifndef CH_CURRP_REGISTER_CACHE #ifndef CH_CURRP_REGISTER_CACHE
@ -98,9 +98,7 @@ extern "C" {
void chSchDoRescheduleI(void); void chSchDoRescheduleI(void);
void chSchRescheduleS(void); void chSchRescheduleS(void);
bool_t chSchIsRescRequiredExI(void); bool_t chSchIsRescRequiredExI(void);
#if CH_USE_ROUNDROBIN
void chSchDoYieldS(void); void chSchDoYieldS(void);
#endif
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif

View File

@ -179,13 +179,11 @@ extern "C" {
void chThdTerminate(Thread *tp); void chThdTerminate(Thread *tp);
void chThdSleep(systime_t time); void chThdSleep(systime_t time);
void chThdSleepUntil(systime_t time); void chThdSleepUntil(systime_t time);
void chThdYield(void);
void chThdExit(msg_t msg); void chThdExit(msg_t msg);
#if CH_USE_WAITEXIT #if CH_USE_WAITEXIT
msg_t chThdWait(Thread *tp); msg_t chThdWait(Thread *tp);
#endif #endif
#if CH_USE_ROUNDROBIN
void chThdYield(void);
#endif
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif

View File

@ -39,7 +39,7 @@ void scheduler_init(void) {
queue_init(&rlist.r_queue); queue_init(&rlist.r_queue);
rlist.r_prio = NOPRIO; rlist.r_prio = NOPRIO;
#if CH_USE_ROUNDROBIN #if CH_TIME_QUANTUM > 0
rlist.r_preempt = CH_TIME_QUANTUM; rlist.r_preempt = CH_TIME_QUANTUM;
#endif #endif
} }
@ -83,7 +83,7 @@ void chSchGoSleepS(tstate_t newstate) {
(otp = currp)->p_state = newstate; (otp = currp)->p_state = newstate;
(currp = fifo_remove(&rlist.r_queue))->p_state = PRCURR; (currp = fifo_remove(&rlist.r_queue))->p_state = PRCURR;
#if CH_USE_ROUNDROBIN #if CH_TIME_QUANTUM > 0
rlist.r_preempt = CH_TIME_QUANTUM; rlist.r_preempt = CH_TIME_QUANTUM;
#endif #endif
chDbgTrace(otp, currp); chDbgTrace(otp, currp);
@ -176,7 +176,7 @@ void chSchWakeupS(Thread *ntp, msg_t msg) {
else { else {
Thread *otp = currp; Thread *otp = currp;
chSchReadyI(otp); chSchReadyI(otp);
#if CH_USE_ROUNDROBIN #if CH_TIME_QUANTUM > 0
rlist.r_preempt = CH_TIME_QUANTUM; rlist.r_preempt = CH_TIME_QUANTUM;
#endif #endif
(currp = ntp)->p_state = PRCURR; (currp = ntp)->p_state = PRCURR;
@ -197,7 +197,7 @@ void chSchDoRescheduleI(void) {
/* Pick the first thread from the ready queue and makes it current.*/ /* Pick the first thread from the ready queue and makes it current.*/
(currp = fifo_remove(&rlist.r_queue))->p_state = PRCURR; (currp = fifo_remove(&rlist.r_queue))->p_state = PRCURR;
chSchReadyI(otp); chSchReadyI(otp);
#if CH_USE_ROUNDROBIN #if CH_TIME_QUANTUM > 0
rlist.r_preempt = CH_TIME_QUANTUM; rlist.r_preempt = CH_TIME_QUANTUM;
#endif #endif
chDbgTrace(otp, currp); chDbgTrace(otp, currp);
@ -229,7 +229,7 @@ void chSchRescheduleS(void) {
bool_t chSchIsRescRequiredExI(void) { bool_t chSchIsRescRequiredExI(void) {
tprio_t p1 = firstprio(&rlist.r_queue); tprio_t p1 = firstprio(&rlist.r_queue);
tprio_t p2 = currp->p_prio; tprio_t p2 = currp->p_prio;
#if CH_USE_ROUNDROBIN #if CH_TIME_QUANTUM > 0
/* If the running thread has not reached its time quantum, reschedule only /* If the running thread has not reached its time quantum, reschedule only
* if the first thread on the ready queue has a higher priority. * if the first thread on the ready queue has a higher priority.
* Otherwise, if the running thread has used up its time quantum, reschedule * Otherwise, if the running thread has used up its time quantum, reschedule
@ -242,7 +242,11 @@ bool_t chSchIsRescRequiredExI(void) {
#endif #endif
} }
#if CH_USE_ROUNDROBIN /**
* @brief Yields the time slot.
* @details Yields the CPU control to the next thread in the ready list with
* equal priority, if any.
*/
void chSchDoYieldS(void) { void chSchDoYieldS(void) {
if (chSchCanYieldS()) { if (chSchCanYieldS()) {
@ -269,6 +273,5 @@ void chSchDoYieldS(void) {
chSysSwitchI(otp, currp); chSysSwitchI(otp, currp);
} }
} }
#endif /* CH_USE_ROUNDROBIN */
/** @} */ /** @} */

View File

@ -98,7 +98,7 @@ void chSysInit(void) {
*/ */
void chSysTimerHandlerI(void) { void chSysTimerHandlerI(void) {
#if CH_USE_ROUNDROBIN #if CH_TIME_QUANTUM > 0
/* running thread has not used up quantum yet? */ /* running thread has not used up quantum yet? */
if (rlist.r_preempt > 0) if (rlist.r_preempt > 0)
/* decrement remaining quantum */ /* decrement remaining quantum */

View File

@ -293,7 +293,6 @@ void chThdSleepUntil(systime_t time) {
chSysUnlock(); chSysUnlock();
} }
#if CH_USE_ROUNDROBIN
/** /**
* @brief Yields the time slot. * @brief Yields the time slot.
* @details Yields the CPU control to the next thread in the ready list with * @details Yields the CPU control to the next thread in the ready list with
@ -305,7 +304,6 @@ void chThdYield(void) {
chSchDoYieldS(); chSchDoYieldS();
chSysUnlock(); chSysUnlock();
} }
#endif /* CH_USE_ROUNDROBIN */
/** /**
* @brief Terminates the current thread by specifying an exit status code. * @brief Terminates the current thread by specifying an exit status code.

View File

@ -158,7 +158,7 @@ void PendSVVector(void) {
(otp = currp)->p_ctx.r13 = sp_thd; (otp = currp)->p_ctx.r13 = sp_thd;
(currp = fifo_remove(&rlist.r_queue))->p_state = PRCURR; (currp = fifo_remove(&rlist.r_queue))->p_state = PRCURR;
chSchReadyI(otp); chSchReadyI(otp);
#if CH_USE_ROUNDROBIN #if CH_TIME_QUANTUM > 0
/* set the round-robin time quantum */ /* set the round-robin time quantum */
rlist.r_preempt = CH_TIME_QUANTUM; rlist.r_preempt = CH_TIME_QUANTUM;
#endif #endif

View File

@ -21,7 +21,7 @@
- CHANGE: Because the changes in the allocators some API prototypes changed: - CHANGE: Because the changes in the allocators some API prototypes changed:
chHeapAlloc(), chHeapStatus(), chThdCreateFromHeap(). chHeapAlloc(), chHeapStatus(), chThdCreateFromHeap().
- CHANGE: Because the changes in the allocators some configuration options - CHANGE: Because the changes in the allocators some configuration options
changed, see the template chconf.h file. changed and some were removed, see the new template chconf.h file.
- CHANGE: renamed ./demos/ARM7-AT91SAM7X-WEB-GCC in ARM7-AT91SAM7X-UIP-GCC. - CHANGE: renamed ./demos/ARM7-AT91SAM7X-WEB-GCC in ARM7-AT91SAM7X-UIP-GCC.
- FIX: Added the most restrictive GCC warning option to the makefiles (-Wextra) - FIX: Added the most restrictive GCC warning option to the makefiles (-Wextra)
and fixed some warnings in the code, mostly unused function parameters. and fixed some warnings in the code, mostly unused function parameters.

View File

@ -432,7 +432,6 @@ const struct testcase testbmk7 = {
* a second of continuous operations. * a second of continuous operations.
*/ */
#if CH_USE_ROUNDROBIN
static msg_t thread8(void *p) { static msg_t thread8(void *p) {
do { do {
@ -482,7 +481,6 @@ const struct testcase testbmk8 = {
NULL, NULL,
bmk8_execute bmk8_execute
}; };
#endif
/** /**
* @page test_benchmarks_009 I/O Queues throughput * @page test_benchmarks_009 I/O Queues throughput
@ -760,9 +758,7 @@ const struct testcase * const patternbmk[] = {
&testbmk5, &testbmk5,
&testbmk6, &testbmk6,
&testbmk7, &testbmk7,
#if CH_USE_ROUNDROBIN
&testbmk8, &testbmk8,
#endif
&testbmk9, &testbmk9,
&testbmk10, &testbmk10,
&testbmk11, &testbmk11,