git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@107 35acf78f-673a-0410-8e92-d51de3d6d3f4
parent
f851339621
commit
f2ced068fb
|
@ -140,8 +140,8 @@ int main(int argc, char **argv) {
|
||||||
* various sources.
|
* various sources.
|
||||||
*/
|
*/
|
||||||
evtInit(&evt, 500); /* Initializes an event timer object. */
|
evtInit(&evt, 500); /* Initializes an event timer object. */
|
||||||
evtRegister(&evt, &el0, 0); /* Registers on the timer event source. */
|
|
||||||
evtStart(&evt); /* Starts the event timer. */
|
evtStart(&evt); /* Starts the event timer. */
|
||||||
|
chEvtRegister(&evt.et_es, &el0, 0); /* Registers on the timer event source. */
|
||||||
mmcStartPolling(); /* Starts the MMC connector polling. */
|
mmcStartPolling(); /* Starts the MMC connector polling. */
|
||||||
chEvtRegister(&MMCInsertEventSource, &el1, 1);
|
chEvtRegister(&MMCInsertEventSource, &el1, 1);
|
||||||
chEvtRegister(&MMCRemoveEventSource, &el2, 2);
|
chEvtRegister(&MMCRemoveEventSource, &el2, 2);
|
||||||
|
|
|
@ -60,6 +60,7 @@ AVR-AT90CANx-GCC - Port on AVR AT90CAN128, not complete yet.
|
||||||
It is expanded as:
|
It is expanded as:
|
||||||
ULONG32 waThread1[UserStackSpace(32) >> 2];
|
ULONG32 waThread1[UserStackSpace(32) >> 2];
|
||||||
Now the demos use the new declaration style.
|
Now the demos use the new declaration style.
|
||||||
|
- Fixed a small problem in sleep functions introduced in 0.4.1.
|
||||||
|
|
||||||
*** 0.4.1 ***
|
*** 0.4.1 ***
|
||||||
- Modified the initialization code in order to have a dedicated idle thread in
|
- Modified the initialization code in order to have a dedicated idle thread in
|
||||||
|
|
10
src/chschd.c
10
src/chschd.c
|
@ -25,13 +25,7 @@
|
||||||
#include <ch.h>
|
#include <ch.h>
|
||||||
|
|
||||||
/** @cond never*/
|
/** @cond never*/
|
||||||
|
|
||||||
ReadyList rlist;
|
ReadyList rlist;
|
||||||
|
|
||||||
#ifdef CH_USE_SYSTEMTIME
|
|
||||||
volatile t_time stime;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/** @endcond */
|
/** @endcond */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -44,7 +38,7 @@ void chSchInit(void) {
|
||||||
rlist.r_prio = ABSPRIO;
|
rlist.r_prio = ABSPRIO;
|
||||||
rlist.r_preempt = CH_TIME_QUANTUM;
|
rlist.r_preempt = CH_TIME_QUANTUM;
|
||||||
#ifdef CH_USE_SYSTEMTIME
|
#ifdef CH_USE_SYSTEMTIME
|
||||||
stime = 0;
|
rlist.r_stime = 0;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -193,7 +187,7 @@ void chSchTimerHandlerI(void) {
|
||||||
rlist.r_preempt--;
|
rlist.r_preempt--;
|
||||||
|
|
||||||
#ifdef CH_USE_SYSTEMTIME
|
#ifdef CH_USE_SYSTEMTIME
|
||||||
stime++;
|
rlist.r_stime++;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CH_USE_VIRTUAL_TIMERS
|
#ifdef CH_USE_VIRTUAL_TIMERS
|
||||||
|
|
|
@ -113,6 +113,7 @@ void chSemWaitS(Semaphore *sp) {
|
||||||
|
|
||||||
#ifdef CH_USE_SEMAPHORES_TIMEOUT
|
#ifdef CH_USE_SEMAPHORES_TIMEOUT
|
||||||
static void wakeup(void *p) {
|
static void wakeup(void *p) {
|
||||||
|
|
||||||
#ifdef CH_USE_DEBUG
|
#ifdef CH_USE_DEBUG
|
||||||
if (((Thread *)p)->p_state != PRWTSEM)
|
if (((Thread *)p)->p_state != PRWTSEM)
|
||||||
chDbgPanic("chsem.c, wakeup()\r\n");
|
chDbgPanic("chsem.c, wakeup()\r\n");
|
||||||
|
|
|
@ -25,6 +25,15 @@
|
||||||
#include <ch.h>
|
#include <ch.h>
|
||||||
|
|
||||||
#ifdef CH_USE_SLEEP
|
#ifdef CH_USE_SLEEP
|
||||||
|
static void wakeup(void *p) {
|
||||||
|
|
||||||
|
#ifdef CH_USE_DEBUG
|
||||||
|
if (((Thread *)p)->p_state != PRSLEEP)
|
||||||
|
chDbgPanic("chsleep.c, wakeup()\r\n");
|
||||||
|
#endif
|
||||||
|
chSchReadyI(p, RDY_OK);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Suspends the invoking thread for the specified time.
|
* Suspends the invoking thread for the specified time.
|
||||||
* @param time the system ticks number
|
* @param time the system ticks number
|
||||||
|
@ -34,7 +43,7 @@ void chThdSleep(t_time time) {
|
||||||
|
|
||||||
chSysLock();
|
chSysLock();
|
||||||
|
|
||||||
chVTSetI(&vt, time, (t_vtfunc)chSchReadyI, currp);
|
chVTSetI(&vt, time, wakeup, currp);
|
||||||
chSchGoSleepS(PRSLEEP);
|
chSchGoSleepS(PRSLEEP);
|
||||||
|
|
||||||
chSysUnlock();
|
chSysUnlock();
|
||||||
|
@ -53,7 +62,7 @@ void chThdSleepUntil(t_time time) {
|
||||||
|
|
||||||
chSysLock();
|
chSysLock();
|
||||||
|
|
||||||
chVTSetI(&vt, (t_time)(time - stime), (t_vtfunc)chSchReadyI, currp);
|
chVTSetI(&vt, (t_time)(time - rlist.r_stime), wakeup, currp);
|
||||||
chSchGoSleepS(PRSLEEP);
|
chSchGoSleepS(PRSLEEP);
|
||||||
|
|
||||||
chSysUnlock();
|
chSysUnlock();
|
||||||
|
|
|
@ -44,6 +44,9 @@ typedef struct {
|
||||||
#ifndef CH_CURRP_REGISTER_CACHE
|
#ifndef CH_CURRP_REGISTER_CACHE
|
||||||
Thread *r_current;
|
Thread *r_current;
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef CH_USE_SYSTEMTIME
|
||||||
|
volatile t_time r_stime;
|
||||||
|
#endif
|
||||||
} ReadyList;
|
} ReadyList;
|
||||||
|
|
||||||
extern ReadyList rlist;
|
extern ReadyList rlist;
|
||||||
|
|
|
@ -32,7 +32,6 @@ extern "C" {
|
||||||
void chThdSleep(t_time time);
|
void chThdSleep(t_time time);
|
||||||
#ifdef CH_USE_SYSTEMTIME
|
#ifdef CH_USE_SYSTEMTIME
|
||||||
void chThdSleepUntil(t_time time);
|
void chThdSleepUntil(t_time time);
|
||||||
t_time chSysGetTime(void);
|
|
||||||
#endif /* CH_USE_SYSTEMTIME */
|
#endif /* CH_USE_SYSTEMTIME */
|
||||||
#endif /* CH_USE_SLEEP */
|
#endif /* CH_USE_SLEEP */
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
@ -47,7 +46,7 @@ extern "C" {
|
||||||
* @note The function is available only if the \p CH_USE_SYSTEMTIME
|
* @note The function is available only if the \p CH_USE_SYSTEMTIME
|
||||||
* option is enabled in \p chconf.h.
|
* option is enabled in \p chconf.h.
|
||||||
*/
|
*/
|
||||||
#define chSysGetTime() stime
|
#define chSysGetTime() rlist.r_stime
|
||||||
|
|
||||||
#endif /* _SLEEP_H_ */
|
#endif /* _SLEEP_H_ */
|
||||||
|
|
||||||
|
|
|
@ -50,16 +50,6 @@ extern "C" {
|
||||||
(etp)->et_vt.vt_func = NULL, \
|
(etp)->et_vt.vt_func = NULL, \
|
||||||
(etp)->et_interval = (i))
|
(etp)->et_interval = (i))
|
||||||
|
|
||||||
/**
|
|
||||||
* Registers the invoking thread as listener on the timer event.
|
|
||||||
*/
|
|
||||||
#define evtRegister(etp, el, eid) chEvtRegister(&(etp)->et_es, el, eid)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Unregisters the invoking thread as listener on the timer event.
|
|
||||||
*/
|
|
||||||
#define evtUnregister(etp, el) chEvtUnregister(&(etp)->et_es, el)
|
|
||||||
|
|
||||||
#endif /* _EVTIMER_H_ */
|
#endif /* _EVTIMER_H_ */
|
||||||
|
|
||||||
/** @} */
|
/** @} */
|
||||||
|
|
Loading…
Reference in New Issue