aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--readme.txt4
-rw-r--r--src/chschd.c17
2 files changed, 7 insertions, 14 deletions
diff --git a/readme.txt b/readme.txt
index 38d5a85da..c5dc49096 100644
--- a/readme.txt
+++ b/readme.txt
@@ -62,8 +62,8 @@ AVR-AT90CANx-GCC - Port on AVR AT90CAN128, not tested on hardware yet.
*** 0.6.1 ***
- Removed some redundant checks from the scheduler code: improved threads
- flyback time.
-- Huge scheduler speed improvement obtained by removing the 2nd parameter to
+ flyback time, reduced interrupts service time.
+- Nice scheduler speed improvement obtained by removing the 2nd parameter to
the chSchReadyI() API and manually assigning the message value only where
is really needed (very few points in the code).
- Removed the -falign-functions=16 option from the AT91SAM7X demo makefiles,
diff --git a/src/chschd.c b/src/chschd.c
index 20e5f5d78..70c867535 100644
--- a/src/chschd.c
+++ b/src/chschd.c
@@ -55,12 +55,11 @@ void chSchInit(void) {
/* NOTE: it is inlined in this module only.*/
INLINE Thread *chSchReadyI(Thread *tp) {
#else
-void chSchReadyI(Thread *tp) {
+Thread *chSchReadyI(Thread *tp) {
#endif
Thread *cp;
tp->p_state = PRREADY;
-// tp->p_rdymsg = RDY_OK;
cp = rlist.r_queue.p_next;
while (cp->p_prio >= tp->p_prio)
cp = cp->p_next;
@@ -100,7 +99,7 @@ static void wakeup(void *p) {
if (((Thread *)p)->p_state == PRWTSEM)
chSemFastSignalI(((Thread *)p)->p_wtsemp);
#endif
- chSchReadyI(p)->p_rdymsg = RDY_TIMEOUT;;
+ chSchReadyI(p)->p_rdymsg = RDY_TIMEOUT;
}
/**
@@ -185,16 +184,10 @@ void chSchRescheduleS(void) {
* immediatly else \p FALSE.
*/
bool_t chSchRescRequiredI(void) {
+ tprio_t p1 = firstprio(&rlist.r_queue);
+ tprio_t p2 = currp->p_prio;
- if (rlist.r_preempt) {
- if (firstprio(&rlist.r_queue) <= currp->p_prio)
- return FALSE;
- }
- else { /* Time quantum elapsed. */
- if (firstprio(&rlist.r_queue) < currp->p_prio)
- return FALSE;
- }
- return TRUE;
+ return rlist.r_preempt ? p1 > p2 : p1 >= p2;
}
/** @} */