git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@499 35acf78f-673a-0410-8e92-d51de3d6d3f4
parent
2f4fcf6b67
commit
48d294c62f
|
@ -71,5 +71,9 @@ Settings: MCLK=DCOCLK 750Khz
|
|||
--- Score : 5432 bytes/S
|
||||
--- Result: SUCCESS
|
||||
---------------------------------------------------------------------------
|
||||
--- Test Case 20 (Benchmark, virtual timers set/reset)
|
||||
--- Score : 5636 timers/S
|
||||
--- Result: SUCCESS
|
||||
---------------------------------------------------------------------------
|
||||
|
||||
Final result: SUCCESS
|
||||
|
|
|
@ -77,6 +77,7 @@ Win32-MinGW - ChibiOS/RT simulator and demo into a WIN32 process,
|
|||
- Added a new benchmark to the test suite (timers set/reset performance).
|
||||
- Renamed the macro fifo_init() to queue_init() because it is used to init
|
||||
both FIFO queues and priority queues.
|
||||
- Fixes and improvements to the documentation.
|
||||
|
||||
*** 0.7.3 ***
|
||||
- FIX: Fixed a bug in chThdSleepUntil(), this API is no more a macro now.
|
||||
|
|
12
src/chschd.c
12
src/chschd.c
|
@ -34,7 +34,7 @@ ReadyList rlist;
|
|||
*/
|
||||
void chSchInit(void) {
|
||||
|
||||
queue_init(&rlist.r_queue);
|
||||
queue_init(&rlist);
|
||||
rlist.r_prio = NOPRIO;
|
||||
#ifdef CH_USE_ROUNDROBIN
|
||||
rlist.r_preempt = CH_TIME_QUANTUM;
|
||||
|
@ -60,7 +60,7 @@ Thread *chSchReadyI(Thread *tp) {
|
|||
Thread *cp;
|
||||
|
||||
tp->p_state = PRREADY;
|
||||
cp = rlist.r_queue.p_next;
|
||||
cp = rlist.p_next;
|
||||
while (cp->p_prio >= tp->p_prio)
|
||||
cp = cp->p_next;
|
||||
/* Insertion on p_prev.*/
|
||||
|
@ -81,7 +81,7 @@ void chSchGoSleepS(tstate_t newstate) {
|
|||
Thread *otp;
|
||||
|
||||
(otp = currp)->p_state = newstate;
|
||||
(currp = fifo_remove(&rlist.r_queue))->p_state = PRCURR;
|
||||
(currp = fifo_remove((void *)&rlist))->p_state = PRCURR;
|
||||
#ifdef CH_USE_ROUNDROBIN
|
||||
rlist.r_preempt = CH_TIME_QUANTUM;
|
||||
#endif
|
||||
|
@ -178,7 +178,7 @@ void chSchDoRescheduleI(void) {
|
|||
|
||||
Thread *otp = currp;
|
||||
/* pick the first thread from the ready queue and makes it current */
|
||||
(currp = fifo_remove(&rlist.r_queue))->p_state = PRCURR;
|
||||
(currp = fifo_remove((void *)&rlist))->p_state = PRCURR;
|
||||
chSchReadyI(otp);
|
||||
#ifdef CH_USE_ROUNDROBIN
|
||||
rlist.r_preempt = CH_TIME_QUANTUM;
|
||||
|
@ -200,7 +200,7 @@ void chSchDoRescheduleI(void) {
|
|||
void chSchRescheduleS(void) {
|
||||
/* first thread in the runnable queue has higher priority than the running
|
||||
* thread? */
|
||||
if (firstprio(&rlist.r_queue) > currp->p_prio)
|
||||
if (firstprio(&rlist) > currp->p_prio)
|
||||
chSchDoRescheduleI();
|
||||
}
|
||||
|
||||
|
@ -211,7 +211,7 @@ void chSchRescheduleS(void) {
|
|||
* @retval FALSE if a reschedulation is not required.
|
||||
*/
|
||||
bool_t chSchRescRequiredI(void) {
|
||||
tprio_t p1 = firstprio(&rlist.r_queue);
|
||||
tprio_t p1 = firstprio(&rlist);
|
||||
tprio_t p2 = currp->p_prio;
|
||||
#ifdef CH_USE_ROUNDROBIN
|
||||
/* If the running thread has not reached its time quantum, reschedule only
|
||||
|
|
|
@ -57,8 +57,14 @@
|
|||
* @extends ThreadsQueue
|
||||
*/
|
||||
typedef struct {
|
||||
ThreadsQueue r_queue;
|
||||
/** Next \p Thread in the ready list.*/
|
||||
Thread *p_next;
|
||||
/** Previous \p Thread in the ready list.*/
|
||||
Thread *p_prev;
|
||||
/* End of the fields shared with the ThreadsQueue structure. */
|
||||
/** The thread priority.*/
|
||||
tprio_t r_prio;
|
||||
/* End of the fields shared with the Thread structure. */
|
||||
#ifdef CH_USE_ROUNDROBIN
|
||||
cnt_t r_preempt;
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue