git-svn-id: svn://svn.code.sf.net/p/chibios/svn/branches/kernel_3_dev@6668 35acf78f-673a-0410-8e92-d51de3d6d3f4
parent
23f759922d
commit
cf957f9d4a
|
@ -23,6 +23,9 @@ ifeq ($(USE_LTO),yes)
|
|||
endif
|
||||
|
||||
# FPU-related options
|
||||
ifeq ($(USE_FPU),)
|
||||
USE_FPU = no
|
||||
endif
|
||||
ifneq ($(USE_FPU),no)
|
||||
OPT += -mfloat-abi=$(USE_FPU) -mfpu=fpv4-sp-d16 -fsingle-precision-constant
|
||||
DDEFS += -DCORTEX_USE_FPU=TRUE
|
||||
|
|
|
@ -42,6 +42,11 @@
|
|||
*/
|
||||
#define PORT_ARCHITECTURE_ARM
|
||||
|
||||
/* The following code is not processed when the file is included from an
|
||||
asm module because those intrinsic macros are not necessarily defined
|
||||
by the assembler too.*/
|
||||
#if !defined(_FROM_ASM_)
|
||||
|
||||
/**
|
||||
* @brief Compiler name and version.
|
||||
*/
|
||||
|
@ -57,6 +62,9 @@
|
|||
#else
|
||||
#error "unsupported compiler"
|
||||
#endif
|
||||
|
||||
#endif /* !defined(_FROM_ASM_) */
|
||||
|
||||
/** @} */
|
||||
|
||||
/**
|
||||
|
|
|
@ -62,10 +62,6 @@
|
|||
#define CH_KERNEL_PATCH 0
|
||||
/** @} */
|
||||
|
||||
/* Forward declarations.*/
|
||||
typedef struct thread thread_t;
|
||||
typedef struct virtual_timer virtual_timer_t;
|
||||
|
||||
/* Core headers.*/
|
||||
#include "chtypes.h"
|
||||
#include "chconf.h"
|
||||
|
|
|
@ -69,22 +69,29 @@
|
|||
/*===========================================================================*/
|
||||
|
||||
/**
|
||||
* @brief Generic threads single link list, it works like a stack.
|
||||
* @extends threads_queue_t
|
||||
*
|
||||
* @brief Type of a thread structure.
|
||||
*/
|
||||
typedef struct {
|
||||
thread_t *p_next; /**< @brief Next in the list/queue. */
|
||||
} threads_list_t;
|
||||
typedef struct thread thread_t;
|
||||
|
||||
/**
|
||||
* @extends threads_list_t
|
||||
*
|
||||
* @brief Generic threads bidirectional linked list header and element.
|
||||
* @brief Type of a generic threads bidirectional linked list header and element.
|
||||
*/
|
||||
typedef struct {
|
||||
thread_t *p_next; /**< @brief Next in the list/queue. */
|
||||
thread_t *p_prev; /**< @brief Previous in the queue. */
|
||||
} threads_queue_t;
|
||||
|
||||
/**
|
||||
* @brief Type of a generic threads single link list, it works like a stack.
|
||||
*/
|
||||
typedef struct {
|
||||
thread_t *p_next; /**< @brief Next in the list/queue. */
|
||||
} threads_list_t;
|
||||
|
||||
/**
|
||||
* @extends threads_queue_t
|
||||
*
|
||||
|
@ -106,14 +113,12 @@ typedef struct {
|
|||
} ready_list_t;
|
||||
|
||||
/**
|
||||
* @extends threads_queue_t
|
||||
*
|
||||
* @brief Structure representing a thread.
|
||||
* @note Not all the listed fields are always needed, by switching off some
|
||||
* not needed ChibiOS/RT subsystems it is possible to save RAM space
|
||||
* by shrinking the @p thread_t structure.
|
||||
* by shrinking this structure.
|
||||
*/
|
||||
typedef struct thread {
|
||||
struct thread {
|
||||
thread_t *p_next; /**< @brief Next in the list/queue. */
|
||||
/* End of the fields shared with the threads_list_t structure.*/
|
||||
thread_t *p_prev; /**< @brief Previous in the queue. */
|
||||
|
@ -246,7 +251,32 @@ typedef struct thread {
|
|||
/* Extra fields defined in chconf.h.*/
|
||||
CH_CFG_THREAD_EXTRA_FIELDS
|
||||
#endif
|
||||
} thread_t;
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief Type of a Virtual Timer callback function.
|
||||
*/
|
||||
typedef void (*vtfunc_t)(void *);
|
||||
|
||||
/**
|
||||
* @brief Type of a Virtual Timer structure.
|
||||
*/
|
||||
typedef struct virtual_timer virtual_timer_t;
|
||||
|
||||
/**
|
||||
* @extends virtual_timers_list_t
|
||||
*
|
||||
* @brief Virtual Timer descriptor structure.
|
||||
*/
|
||||
struct virtual_timer {
|
||||
virtual_timer_t *vt_next; /**< @brief Next timer in the list. */
|
||||
virtual_timer_t *vt_prev; /**< @brief Previous timer in the list. */
|
||||
systime_t vt_delta; /**< @brief Time delta before timeout. */
|
||||
vtfunc_t vt_func; /**< @brief Timer callback function
|
||||
pointer. */
|
||||
void *vt_par; /**< @brief Timer callback function
|
||||
parameter. */
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief Virtual timers list header.
|
||||
|
|
|
@ -87,31 +87,6 @@
|
|||
/* Module data structures and types. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/**
|
||||
* @brief Type of a Virtual Timer callback function.
|
||||
*/
|
||||
typedef void (*vtfunc_t)(void *);
|
||||
|
||||
/**
|
||||
* @brief Type of a Virtual Timer structure.
|
||||
*/
|
||||
typedef struct virtual_timer virtual_timer_t;
|
||||
|
||||
/**
|
||||
* @extends virtual_timers_list_t
|
||||
*
|
||||
* @brief Virtual Timer descriptor structure.
|
||||
*/
|
||||
struct virtual_timer {
|
||||
virtual_timer_t *vt_next; /**< @brief Next timer in the list. */
|
||||
virtual_timer_t *vt_prev; /**< @brief Previous timer in the list. */
|
||||
systime_t vt_delta; /**< @brief Time delta before timeout. */
|
||||
vtfunc_t vt_func; /**< @brief Timer callback function
|
||||
pointer. */
|
||||
void *vt_par; /**< @brief Timer callback function
|
||||
parameter. */
|
||||
};
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Module macros. */
|
||||
/*===========================================================================*/
|
||||
|
|
|
@ -42,6 +42,11 @@
|
|||
*/
|
||||
#define PORT_ARCHITECTURE_ARM
|
||||
|
||||
/* The following code is not processed when the file is included from an
|
||||
asm module because those intrinsic macros are not necessarily defined
|
||||
by the assembler too.*/
|
||||
#if !defined(_FROM_ASM_)
|
||||
|
||||
/**
|
||||
* @brief Compiler name and version.
|
||||
*/
|
||||
|
@ -57,6 +62,9 @@
|
|||
#else
|
||||
#error "unsupported compiler"
|
||||
#endif
|
||||
|
||||
#endif /* !defined(_FROM_ASM_) */
|
||||
|
||||
/** @} */
|
||||
|
||||
/**
|
||||
|
|
|
@ -254,7 +254,7 @@ struct port_intctx {
|
|||
struct port_intctx *r13 = (struct port_intctx *)__get_PSP(); \
|
||||
if ((stkalign_t *)(r13 - 1) < (otp)->p_stklimit) \
|
||||
chSysHalt("stack overflow"); \
|
||||
_port_switch(ntp, otp); \
|
||||
_port_switch((void *)ntp, (void *)otp); \
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -266,10 +266,10 @@ struct port_intctx {
|
|||
extern "C" {
|
||||
#endif
|
||||
void _port_irq_epilogue(regarm_t lr);
|
||||
void _port_switch(void *ntp, void *otp);
|
||||
void _port_thread_start(void);
|
||||
void _port_switch_from_isr(void);
|
||||
void _port_exit_from_isr(void);
|
||||
void _port_switch(thread_t *ntp, thread_t *otp);
|
||||
void _port_thread_start(void);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -344,7 +344,7 @@ struct port_intctx {
|
|||
struct port_intctx *r13 = (struct port_intctx *)__get_PSP(); \
|
||||
if ((stkalign_t *)(r13 - 1) < (otp)->p_stklimit) \
|
||||
chSysHalt("stack overflow"); \
|
||||
_port_switch(ntp, otp); \
|
||||
_port_switch((void *)ntp, (void *)otp); \
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -356,7 +356,7 @@ struct port_intctx {
|
|||
extern "C" {
|
||||
#endif
|
||||
void _port_irq_epilogue(void);
|
||||
void _port_switch(thread_t *ntp, thread_t *otp);
|
||||
void _port_switch(void *ntp, void *otp);
|
||||
void _port_thread_start(void);
|
||||
void _port_switch_from_isr(void);
|
||||
void _port_exit_from_isr(void);
|
||||
|
|
|
@ -340,7 +340,7 @@ struct context {
|
|||
register struct port_intctx *sp asm ("%r1"); \
|
||||
if ((stkalign_t *)(sp - 1) < otp->p_stklimit) \
|
||||
chDbgPanic("stack overflow"); \
|
||||
_port_switch(ntp, otp); \
|
||||
_port_switch((void *)ntp, (void *)otp); \
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -373,7 +373,7 @@ struct context {
|
|||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
void _port_switch(thread_t *ntp, thread_t *otp);
|
||||
void _port_switch(void *ntp, void *otp);
|
||||
void _port_thread_start(void);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
|
@ -136,8 +136,9 @@ void chVTDoSetI(virtual_timer_t *vtp, systime_t delay,
|
|||
while (p->vt_delta < delay) {
|
||||
delay -= p->vt_delta;
|
||||
p = p->vt_next;
|
||||
}
|
||||
/* The timer is inserted in the delta list.*/
|
||||
}
|
||||
|
||||
/* The timer is inserted in the delta list.*/
|
||||
vtp->vt_prev = (vtp->vt_next = p)->vt_prev;
|
||||
vtp->vt_prev->vt_next = p->vt_prev = vtp;
|
||||
vtp->vt_delta = delay
|
||||
|
|
Loading…
Reference in New Issue