Improvements to the priority lists.
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@838 35acf78f-673a-0410-8e92-d51de3d6d3f4
This commit is contained in:
parent
cac6514204
commit
a5f92e6830
|
@ -89,6 +89,9 @@ Win32-MinGW - ChibiOS/RT simulator and demo into a WIN32 process,
|
|||
introducing a new API category "Time").
|
||||
- OPT: Small optimization to the Cortex-M3 port code, improved thread
|
||||
related performance scores and smaller code.
|
||||
- OPT: Improved ready list and priority ordered lists code, saved some tens
|
||||
of bytes here and there in the kernel.
|
||||
- Modified the test thread function to return the global test result flag.
|
||||
- Removed testcond.c|h and moved the test cases into testmtx.c. Mutexes and
|
||||
condvars have to be tested together.
|
||||
- Added architecture diagram to the documentation.
|
||||
|
|
|
@ -38,11 +38,12 @@
|
|||
void prio_insert(Thread *tp, ThreadsQueue *tqp) {
|
||||
|
||||
/* cp iterates over the queue */
|
||||
Thread *cp = tqp->p_next;
|
||||
/* not end of queue? and cp has equal or higher priority than tp? */
|
||||
while ((cp != (Thread *)tqp) && (cp->p_prio >= tp->p_prio))
|
||||
Thread *cp = (Thread *)tqp;
|
||||
do {
|
||||
/* iterate to next thread in queue */
|
||||
cp = cp->p_next;
|
||||
/* not end of queue? and cp has equal or higher priority than tp? */
|
||||
} while ((cp != (Thread *)tqp) && (cp->p_prio >= tp->p_prio));
|
||||
/* insert before cp, point tp to next and prev in queue */
|
||||
tp->p_prev = (tp->p_next = cp)->p_prev;
|
||||
/* make prev point to tp, and cp point back to tp */
|
||||
|
|
|
@ -61,7 +61,7 @@ Thread *chSchReadyI(Thread *tp) {
|
|||
Thread *cp;
|
||||
|
||||
tp->p_state = PRREADY;
|
||||
cp = (void *)&rlist;
|
||||
cp = (Thread *)&rlist;
|
||||
do {
|
||||
cp = cp->p_next;
|
||||
} while (cp->p_prio >= tp->p_prio);
|
||||
|
|
|
@ -35,10 +35,10 @@
|
|||
#if CH_OPTIMIZE_SPEED
|
||||
static INLINE void prio_insert(Thread *tp, ThreadsQueue *tqp) {
|
||||
|
||||
Thread *cp = tqp->p_next;
|
||||
while ((cp != (Thread *)tqp) && (cp->p_prio >= tp->p_prio))
|
||||
Thread *cp = (Thread *)tqp;
|
||||
do {
|
||||
cp = cp->p_next;
|
||||
/* Insertion on p_prev.*/
|
||||
} while ((cp != (Thread *)tqp) && (cp->p_prio >= tp->p_prio));
|
||||
tp->p_prev = (tp->p_next = cp)->p_prev;
|
||||
tp->p_prev->p_next = cp->p_prev = tp;
|
||||
}
|
||||
|
|
|
@ -275,5 +275,5 @@ msg_t TestThread(void *p) {
|
|||
else
|
||||
test_println("SUCCESS");
|
||||
|
||||
return 0;
|
||||
return (msg_t)global_fail;
|
||||
}
|
||||
|
|
1
todo.txt
1
todo.txt
|
@ -39,6 +39,7 @@ X Abstract I/O channels rather than just serial ports.
|
|||
? Multiple heaps, disjoint heaps, heaps in heaps.
|
||||
- Update C++ wrapper (Heap, Pools, Mailboxes and any new feature).
|
||||
- Think about making threads return void.
|
||||
- Add tests documentation to the general documentation via doxygen.
|
||||
|
||||
Ideas for 2.x.x:
|
||||
- High resolution timers and tickless kernel.
|
||||
|
|
Loading…
Reference in New Issue