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

master
gdisirio 2011-07-08 19:29:00 +00:00
parent 83c5424c5f
commit d79eea31a2
5 changed files with 75 additions and 32 deletions

View File

@ -29,6 +29,34 @@
#ifndef _CHREGISTRY_H_ #ifndef _CHREGISTRY_H_
#define _CHREGISTRY_H_ #define _CHREGISTRY_H_
#if CH_USE_REGISTRY || defined(__DOXYGEN__)
/**
* @brief Sets the current thread name.
* @pre This function only stores the pointer to the name if the option
* @p CH_USE_REGISTRY is enabled else no action is performed.
*
* @param[in] p thread name as a zero terminated string
*
* @api
*/
#define chRegSetThreadName(p) (currp->p_name = (p))
/**
* @brief Returns the name of the specified thread.
* @pre This function only returns the pointer to the name if the option
* @p CH_USE_REGISTRY is enabled else @p NULL is returned.
*
* @param[in] tp pointer to the thread
*
* @return Thread name as a zero terminated string.
* @retval NULL if the thread name has not been set.
*/
#define chRegGetThreadName(tp) ((tp)->p_name)
#else /* !CH_USE_REGISTRY */
#define chRegSetThreadName(p)
#define chRegGetThreadName(tp) NULL
#endif /* !CH_USE_REGISTRY */
#if CH_USE_REGISTRY || defined(__DOXYGEN__) #if CH_USE_REGISTRY || defined(__DOXYGEN__)
/** /**

View File

@ -49,6 +49,12 @@ struct Thread {
Thread *p_older; /**< @brief Older registry element. */ Thread *p_older; /**< @brief Older registry element. */
#endif #endif
/* End of the fields shared with the ReadyList structure. */ /* End of the fields shared with the ReadyList structure. */
#if CH_USE_REGISTRY
/**
* @brief Thread name or @p NULL.
*/
const char *p_name;
#endif
/** /**
* @brief Current thread state. * @brief Current thread state.
*/ */
@ -197,36 +203,10 @@ struct Thread {
#define THD_MEM_MODE_MEMPOOL 2 /**< @brief Thread memory mode: pool. */ #define THD_MEM_MODE_MEMPOOL 2 /**< @brief Thread memory mode: pool. */
#define THD_TERMINATE 4 /**< @brief Termination requested. */ #define THD_TERMINATE 4 /**< @brief Termination requested. */
/** @brief Thread function.*/ /**
typedef msg_t (*tfunc_t)(void *); * @brief Thread function.
/*
* Threads APIs.
*/ */
#ifdef __cplusplus typedef msg_t (*tfunc_t)(void *);
extern "C" {
#endif
Thread *_thread_init(Thread *tp, tprio_t prio);
#if CH_DBG_FILL_THREADS
void _thread_memfill(uint8_t *startp, uint8_t *endp, uint8_t v);
#endif
Thread *chThdCreateI(void *wsp, size_t size,
tprio_t prio, tfunc_t pf, void *arg);
Thread *chThdCreateStatic(void *wsp, size_t size,
tprio_t prio, tfunc_t pf, void *arg);
tprio_t chThdSetPriority(tprio_t newprio);
Thread *chThdResume(Thread *tp);
void chThdTerminate(Thread *tp);
void chThdSleep(systime_t time);
void chThdSleepUntil(systime_t time);
void chThdYield(void);
void chThdExit(msg_t msg);
#if CH_USE_WAITEXIT
msg_t chThdWait(Thread *tp);
#endif
#ifdef __cplusplus
}
#endif
/** /**
* @brief Returns a pointer to the current @p Thread. * @brief Returns a pointer to the current @p Thread.
@ -342,6 +322,34 @@ extern "C" {
*/ */
#define chThdSleepMicroseconds(usec) chThdSleep(US2ST(usec)) #define chThdSleepMicroseconds(usec) chThdSleep(US2ST(usec))
/*
* Threads APIs.
*/
#ifdef __cplusplus
extern "C" {
#endif
Thread *_thread_init(Thread *tp, tprio_t prio);
#if CH_DBG_FILL_THREADS
void _thread_memfill(uint8_t *startp, uint8_t *endp, uint8_t v);
#endif
Thread *chThdCreateI(void *wsp, size_t size,
tprio_t prio, tfunc_t pf, void *arg);
Thread *chThdCreateStatic(void *wsp, size_t size,
tprio_t prio, tfunc_t pf, void *arg);
tprio_t chThdSetPriority(tprio_t newprio);
Thread *chThdResume(Thread *tp);
void chThdTerminate(Thread *tp);
void chThdSleep(systime_t time);
void chThdSleepUntil(systime_t time);
void chThdYield(void);
void chThdExit(msg_t msg);
#if CH_USE_WAITEXIT
msg_t chThdWait(Thread *tp);
#endif
#ifdef __cplusplus
}
#endif
#endif /* _CHTHREADS_H_ */ #endif /* _CHTHREADS_H_ */
/** @} */ /** @} */

View File

@ -55,6 +55,7 @@ WORKING_AREA(_idle_thread_wa, PORT_IDLE_THREAD_STACK_SIZE);
void _idle_thread(void *p) { void _idle_thread(void *p) {
(void)p; (void)p;
chRegSetThreadName("idle");
while (TRUE) { while (TRUE) {
port_wait_for_interrupt(); port_wait_for_interrupt();
IDLE_LOOP_HOOK(); IDLE_LOOP_HOOK();
@ -95,6 +96,8 @@ void chSysInit(void) {
currp->p_state = THD_STATE_CURRENT; currp->p_state = THD_STATE_CURRENT;
chSysEnable(); chSysEnable();
chRegSetThreadName("main");
#if !CH_NO_IDLE_THREAD #if !CH_NO_IDLE_THREAD
/* This thread has the lowest priority in the system, its role is just to /* This thread has the lowest priority in the system, its role is just to
serve interrupts in its context while keeping the lowest energy saving serve interrupts in its context while keeping the lowest energy saving

View File

@ -89,15 +89,16 @@ Thread *_thread_init(Thread *tp, tprio_t prio) {
#if CH_USE_DYNAMIC #if CH_USE_DYNAMIC
tp->p_refs = 1; tp->p_refs = 1;
#endif #endif
#if CH_USE_REGISTRY
tp->p_name = NULL;
REG_INSERT(tp);
#endif
#if CH_USE_WAITEXIT #if CH_USE_WAITEXIT
list_init(&tp->p_waiting); list_init(&tp->p_waiting);
#endif #endif
#if CH_USE_MESSAGES #if CH_USE_MESSAGES
queue_init(&tp->p_msgqueue); queue_init(&tp->p_msgqueue);
#endif #endif
#if CH_USE_REGISTRY
REG_INSERT(tp);
#endif
#if defined(THREAD_EXT_INIT_HOOK) #if defined(THREAD_EXT_INIT_HOOK)
THREAD_EXT_INIT_HOOK(tp); THREAD_EXT_INIT_HOOK(tp);
#endif #endif

View File

@ -84,6 +84,9 @@
(backported to 2.2.4). (backported to 2.2.4).
- FIX: Fixed timeout problem in the lwIP interface layer (bug 3302420) - FIX: Fixed timeout problem in the lwIP interface layer (bug 3302420)
(backported to 2.2.4). (backported to 2.2.4).
- NEW: Added a new functionality to the registry subsystem, now it is possible
to associate a name to the threads using chRegSetThreadName. The main and
idle threads have their name assigned by default.
- NEW: Added TIM8 support to the STM32 GPT, ICU and PWM drivers. - NEW: Added TIM8 support to the STM32 GPT, ICU and PWM drivers.
- NEW: Updated the STM32 header file to the latest version 3.5.0 and fixed - NEW: Updated the STM32 header file to the latest version 3.5.0 and fixed
it in order to correct several bugs related to the XL family. it in order to correct several bugs related to the XL family.