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

master
gdisirio 2012-08-22 15:11:04 +00:00
parent 4bdf358424
commit d51331c78a
4 changed files with 53 additions and 39 deletions

View File

@ -40,11 +40,20 @@ typedef struct {
uint8_t ch_reserved5; /**< @brief Reserved field. */ uint8_t ch_reserved5; /**< @brief Reserved field. */
uint16_t ch_version; /**< @brief Encoded ChibiOS/RT version. */ uint16_t ch_version; /**< @brief Encoded ChibiOS/RT version. */
uint8_t ch_ptrsize; /**< @brief Size of a pointer. */ uint8_t ch_ptrsize; /**< @brief Size of a pointer. */
uint8_t ch_options; /**< @brief Enable options bits mask. */ uint8_t ch_timesize; /**< @brief Size of a systime_t. */
uint8_t ch_reserved10; /**< @brief Reserved field. */ uint8_t cf_off_prio; /**< @brief Offset of @p p_prio field. */
uint8_t ch_reserved11; /**< @brief Reserved field. */ uint8_t cf_off_ctx; /**< @brief Offset of @p p_ctx field. */
ReadyList *ch_rlist; /**< @brief Pointer to the ready list. */ uint8_t cf_off_newer; /**< @brief Offset of @p p_newer field. */
VTList *ch_vtlist; /**< @brief Pointer to the timers list. */ uint8_t cf_off_older; /**< @brief Offset of @p p_older field. */
uint8_t cf_off_name; /**< @brief Offset of @p p_name field. */
uint8_t cf_off_stklimit; /**< @brief Offset of @p p_stklimit
field. */
uint8_t cf_off_state; /**< @brief Offset of @p p_state field. */
uint8_t cf_off_flags; /**< @brief Offset of @p p_flags field. */
uint8_t cf_off_refs; /**< @brief Offset of @p p_refs field. */
uint8_t cf_off_preempt; /**< @brief Offset of @p p_preempt
field. */
uint8_t cf_off_time; /**< @brief Offset of @p p_time field. */
} chroot_t; } chroot_t;
/** /**

View File

@ -233,6 +233,10 @@
#define CH_FAST_IRQ_HANDLER(id) PORT_FAST_IRQ_HANDLER(id) #define CH_FAST_IRQ_HANDLER(id) PORT_FAST_IRQ_HANDLER(id)
/** @} */ /** @} */
#if !defined(__DOXYGEN__)
extern Thread _mainthread;
#endif
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
#endif #endif

View File

@ -50,34 +50,11 @@
#if CH_USE_REGISTRY || defined(__DOXYGEN__) #if CH_USE_REGISTRY || defined(__DOXYGEN__)
/* Converting configuration options in bit masks in order to be encoded in #define THD_OFFSET(field) (uint8_t)((size_t)&_mainthread.field - \
the global variable ch_root.*/ (size_t)&_mainthread)
#if CH_DBG_ENABLE_STACK_CHECK
#define MSK_DBG_ENABLE_STACK_CHECK 1
#else
#define MSK_DBG_ENABLE_STACK_CHECK 0
#endif
#if CH_USE_DYNAMIC /*
#define MSK_USE_DYNAMIC 2 * OS signature in ROM plus debug-related information.
#else
#define MSK_USE_DYNAMIC 0
#endif
#if CH_TIME_QUANTUM > 0
#define MSK_TIME_QUANTUM 4
#else
#define MSK_TIME_QUANTUM 0
#endif
#if CH_DBG_THREADS_PROFILING
#define MSK_DBG_THREADS_PROFILING 8
#else
#define MSK_DBG_THREADS_PROFILING 0
#endif
/**
* @brief OS signature in ROM plus debug-related information.
*/ */
ROMCONST chroot_t ch_root = { ROMCONST chroot_t ch_root = {
"CHRT", "CHRT",
@ -87,12 +64,30 @@ ROMCONST chroot_t ch_root = {
(CH_KERNEL_MINOR << 6) | (CH_KERNEL_MINOR << 6) |
(CH_KERNEL_PATCH) << 0), (CH_KERNEL_PATCH) << 0),
(uint8_t)sizeof (void *), (uint8_t)sizeof (void *),
(uint8_t)(MSK_DBG_THREADS_PROFILING | MSK_TIME_QUANTUM | (uint8_t)sizeof (systime_t),
MSK_USE_DYNAMIC | MSK_DBG_ENABLE_STACK_CHECK), THD_OFFSET(p_prio),
THD_OFFSET(p_ctx),
THD_OFFSET(p_newer),
THD_OFFSET(p_older),
THD_OFFSET(p_name),
#if CH_DBG_ENABLE_STACK_CHECK
THD_OFFSET(p_stklimit),
#else
(uint8_t)0, (uint8_t)0,
#endif
THD_OFFSET(p_state),
THD_OFFSET(p_flags),
#if CH_USE_DYNAMIC
THD_OFFSET(p_refs),
#else
(uint8_t)0, (uint8_t)0,
&rlist, #endif
&vtlist #if CH_TIME_QUANTUM > 0
THD_OFFSET(p_preempt),
#else
(uint8_t)0,
#endif
THD_OFFSET(p_time)
}; };
/** /**

View File

@ -36,9 +36,16 @@
#include "ch.h" #include "ch.h"
#if !CH_NO_IDLE_THREAD || defined(__DOXYGEN__) #if !CH_NO_IDLE_THREAD || defined(__DOXYGEN__)
/* Idle thread working area.*/ /**
* @brief Idle thread working area.
*/
WORKING_AREA(_idle_thread_wa, PORT_IDLE_THREAD_STACK_SIZE); WORKING_AREA(_idle_thread_wa, PORT_IDLE_THREAD_STACK_SIZE);
/**
* @brief Main thread structure.
*/
Thread _mainthread;
/** /**
* @brief This function implements the idle thread infinite loop. * @brief This function implements the idle thread infinite loop.
* @details The function puts the processor in the lowest power mode capable * @details The function puts the processor in the lowest power mode capable
@ -73,7 +80,6 @@ void _idle_thread(void *p) {
* @special * @special
*/ */
void chSysInit(void) { void chSysInit(void) {
static Thread mainthread;
#if CH_DBG_ENABLE_STACK_CHECK #if CH_DBG_ENABLE_STACK_CHECK
extern stkalign_t __main_thread_stack_base__; extern stkalign_t __main_thread_stack_base__;
#endif #endif
@ -92,7 +98,7 @@ void chSysInit(void) {
#endif #endif
/* Now this instructions flow becomes the main thread.*/ /* Now this instructions flow becomes the main thread.*/
setcurrp(_thread_init(&mainthread, NORMALPRIO)); setcurrp(_thread_init(&_mainthread, NORMALPRIO));
currp->p_state = THD_STATE_CURRENT; currp->p_state = THD_STATE_CURRENT;
#if CH_DBG_ENABLE_STACK_CHECK #if CH_DBG_ENABLE_STACK_CHECK
/* This is a special case because the main thread Thread structure is not /* This is a special case because the main thread Thread structure is not