Fixed bug 3591317.

git-svn-id: svn://svn.code.sf.net/p/chibios/svn/branches/stable_2.4.x@4853 35acf78f-673a-0410-8e92-d51de3d6d3f4
This commit is contained in:
gdisirio 2012-12-01 08:29:30 +00:00
parent 9810ed6621
commit 360fe982fe
7 changed files with 311 additions and 114 deletions

View File

@ -37,8 +37,36 @@
#include "ch.h" #include "ch.h"
/**
* @brief Type of an IRQ vector.
*/
typedef void (*irq_vector_t)(void);
/**
* @brief Type of a structure representing the whole vectors table.
*/
typedef struct {
uint32_t *init_stack;
irq_vector_t reset_vector;
irq_vector_t nmi_vector;
irq_vector_t hardfault_vector;
irq_vector_t memmanage_vector;
irq_vector_t busfault_vector;
irq_vector_t usagefault_vector;
irq_vector_t vector1c;
irq_vector_t vector20;
irq_vector_t vector24;
irq_vector_t vector28;
irq_vector_t svcall_vector;
irq_vector_t debugmonitor_vector;
irq_vector_t vector34;
irq_vector_t pendsv_vector;
irq_vector_t systick_vector;
irq_vector_t vectors[32];
} vectors_t;
#if !defined(__DOXYGEN__) #if !defined(__DOXYGEN__)
extern void __main_stack_end__(void); extern uint32_t __main_stack_end__;
extern void ResetHandler(void); extern void ResetHandler(void);
extern void NMIVector(void); extern void NMIVector(void);
extern void HardFaultVector(void); extern void HardFaultVector(void);
@ -94,11 +122,12 @@ extern void VectorBC(void);
#if !defined(__DOXYGEN__) #if !defined(__DOXYGEN__)
__attribute__ ((section("vectors"))) __attribute__ ((section("vectors")))
#endif #endif
void (*_vectors[])(void) = { vectors_t _vectors = {
__main_stack_end__, ResetHandler, NMIVector, HardFaultVector, &__main_stack_end__,ResetHandler, NMIVector, HardFaultVector,
MemManageVector, BusFaultVector, UsageFaultVector, Vector1C, MemManageVector, BusFaultVector, UsageFaultVector, Vector1C,
Vector20, Vector24, Vector28, SVCallVector, Vector20, Vector24, Vector28, SVCallVector,
DebugMonitorVector, Vector34, PendSVVector, SysTickVector, DebugMonitorVector, Vector34, PendSVVector, SysTickVector,
{
Vector40, Vector44, Vector48, Vector4C, Vector40, Vector44, Vector48, Vector4C,
Vector50, Vector54, Vector58, Vector5C, Vector50, Vector54, Vector58, Vector5C,
Vector60, Vector64, Vector68, Vector6C, Vector60, Vector64, Vector68, Vector6C,
@ -107,6 +136,7 @@ void (*_vectors[])(void) = {
Vector90, Vector94, Vector98, Vector9C, Vector90, Vector94, Vector98, Vector9C,
VectorA0, VectorA4, VectorA8, VectorAC, VectorA0, VectorA4, VectorA8, VectorAC,
VectorB0, VectorB4, VectorB8, VectorBC VectorB0, VectorB4, VectorB8, VectorBC
}
}; };
/** /**

View File

@ -37,8 +37,36 @@
#include "ch.h" #include "ch.h"
/**
* @brief Type of an IRQ vector.
*/
typedef void (*irq_vector_t)(void);
/**
* @brief Type of a structure representing the whole vectors table.
*/
typedef struct {
uint32_t *init_stack;
irq_vector_t reset_vector;
irq_vector_t nmi_vector;
irq_vector_t hardfault_vector;
irq_vector_t memmanage_vector;
irq_vector_t busfault_vector;
irq_vector_t usagefault_vector;
irq_vector_t vector1c;
irq_vector_t vector20;
irq_vector_t vector24;
irq_vector_t vector28;
irq_vector_t svcall_vector;
irq_vector_t debugmonitor_vector;
irq_vector_t vector34;
irq_vector_t pendsv_vector;
irq_vector_t systick_vector;
irq_vector_t vectors[58];
} vectors_t;
#if !defined(__DOXYGEN__) #if !defined(__DOXYGEN__)
extern void __main_stack_end__(void); extern uint32_t __main_stack_end__;
extern void ResetHandler(void); extern void ResetHandler(void);
extern void NMIVector(void); extern void NMIVector(void);
extern void HardFaultVector(void); extern void HardFaultVector(void);
@ -110,6 +138,8 @@ extern void Vector110(void);
extern void Vector114(void); extern void Vector114(void);
extern void Vector118(void); extern void Vector118(void);
extern void Vector11C(void); extern void Vector11C(void);
extern void Vector120(void);
extern void Vector124(void);
#endif #endif
/** /**
@ -118,11 +148,12 @@ extern void Vector11C(void);
#if !defined(__DOXYGEN__) #if !defined(__DOXYGEN__)
__attribute__ ((section("vectors"))) __attribute__ ((section("vectors")))
#endif #endif
void (*_vectors[])(void) = { vectors_t _vectors = {
__main_stack_end__, ResetHandler, NMIVector, HardFaultVector, &__main_stack_end__,ResetHandler, NMIVector, HardFaultVector,
MemManageVector, BusFaultVector, UsageFaultVector, Vector1C, MemManageVector, BusFaultVector, UsageFaultVector, Vector1C,
Vector20, Vector24, Vector28, SVCallVector, Vector20, Vector24, Vector28, SVCallVector,
DebugMonitorVector, Vector34, PendSVVector, SysTickVector, DebugMonitorVector, Vector34, PendSVVector, SysTickVector,
{
Vector40, Vector44, Vector48, Vector4C, Vector40, Vector44, Vector48, Vector4C,
Vector50, Vector54, Vector58, Vector5C, Vector50, Vector54, Vector58, Vector5C,
Vector60, Vector64, Vector68, Vector6C, Vector60, Vector64, Vector68, Vector6C,
@ -136,7 +167,9 @@ void (*_vectors[])(void) = {
VectorE0, VectorE4, VectorE8, VectorEC, VectorE0, VectorE4, VectorE8, VectorEC,
VectorF0, VectorF4, VectorF8, VectorFC, VectorF0, VectorF4, VectorF8, VectorFC,
Vector100, Vector104, Vector108, Vector10C, Vector100, Vector104, Vector108, Vector10C,
Vector110, Vector114, Vector118, Vector11C Vector110, Vector114, Vector118, Vector11C,
Vector120, Vector124
}
}; };
/** /**
@ -225,5 +258,7 @@ void Vector110(void) __attribute__((weak, alias("_unhandled_exception")));
void Vector114(void) __attribute__((weak, alias("_unhandled_exception"))); void Vector114(void) __attribute__((weak, alias("_unhandled_exception")));
void Vector118(void) __attribute__((weak, alias("_unhandled_exception"))); void Vector118(void) __attribute__((weak, alias("_unhandled_exception")));
void Vector11C(void) __attribute__((weak, alias("_unhandled_exception"))); void Vector11C(void) __attribute__((weak, alias("_unhandled_exception")));
void Vector120(void) __attribute__((weak, alias("_unhandled_exception")));
void Vector124(void) __attribute__((weak, alias("_unhandled_exception")));
/** @} */ /** @} */

View File

@ -56,8 +56,46 @@
#include "board.h" #include "board.h"
#endif #endif
#if defined(STM32F10X_MD_VL) || defined(__DOXYGEN__)
#define NUM_VECTORS 46
#elif defined(STM32F10X_HD) || defined(STM32F10X_XL)
#define NUM_VECTORS 60
#elif defined(STM32F10X_CL)
#define NUM_VECTORS 68
#else
#define NUM_VECTORS 43
#endif
/**
* @brief Type of an IRQ vector.
*/
typedef void (*irq_vector_t)(void);
/**
* @brief Type of a structure representing the whole vectors table.
*/
typedef struct {
uint32_t *init_stack;
irq_vector_t reset_vector;
irq_vector_t nmi_vector;
irq_vector_t hardfault_vector;
irq_vector_t memmanage_vector;
irq_vector_t busfault_vector;
irq_vector_t usagefault_vector;
irq_vector_t vector1c;
irq_vector_t vector20;
irq_vector_t vector24;
irq_vector_t vector28;
irq_vector_t svcall_vector;
irq_vector_t debugmonitor_vector;
irq_vector_t vector34;
irq_vector_t pendsv_vector;
irq_vector_t systick_vector;
irq_vector_t vectors[NUM_VECTORS];
} vectors_t;
#if !defined(__DOXYGEN__) #if !defined(__DOXYGEN__)
extern void __main_stack_end__(void); extern uint32_t __main_stack_end__;
extern void ResetHandler(void); extern void ResetHandler(void);
extern void NMIVector(void); extern void NMIVector(void);
extern void HardFaultVector(void); extern void HardFaultVector(void);
@ -156,11 +194,12 @@ extern void Vector14C(void);
#if !defined(__DOXYGEN__) #if !defined(__DOXYGEN__)
__attribute__ ((section("vectors"))) __attribute__ ((section("vectors")))
#endif #endif
void (*_vectors[])(void) = { vectors_t _vectors = {
__main_stack_end__, ResetHandler, NMIVector, HardFaultVector, &__main_stack_end__,ResetHandler, NMIVector, HardFaultVector,
MemManageVector, BusFaultVector, UsageFaultVector, Vector1C, MemManageVector, BusFaultVector, UsageFaultVector, Vector1C,
Vector20, Vector24, Vector28, SVCallVector, Vector20, Vector24, Vector28, SVCallVector,
DebugMonitorVector, Vector34, PendSVVector, SysTickVector, DebugMonitorVector, Vector34, PendSVVector, SysTickVector,
{
Vector40, Vector44, Vector48, Vector4C, Vector40, Vector44, Vector48, Vector4C,
Vector50, Vector54, Vector58, Vector5C, Vector50, Vector54, Vector58, Vector5C,
Vector60, Vector64, Vector68, Vector6C, Vector60, Vector64, Vector68, Vector6C,
@ -186,6 +225,7 @@ void (*_vectors[])(void) = {
Vector130, Vector134, Vector138, Vector13C, Vector130, Vector134, Vector138, Vector13C,
Vector140, Vector144, Vector148, Vector14C Vector140, Vector144, Vector148, Vector14C
#endif #endif
}
}; };
/** /**

View File

@ -37,8 +37,36 @@
#include "ch.h" #include "ch.h"
/**
* @brief Type of an IRQ vector.
*/
typedef void (*irq_vector_t)(void);
/**
* @brief Type of a structure representing the whole vectors table.
*/
typedef struct {
uint32_t *init_stack;
irq_vector_t reset_vector;
irq_vector_t nmi_vector;
irq_vector_t hardfault_vector;
irq_vector_t memmanage_vector;
irq_vector_t busfault_vector;
irq_vector_t usagefault_vector;
irq_vector_t vector1c;
irq_vector_t vector20;
irq_vector_t vector24;
irq_vector_t vector28;
irq_vector_t svcall_vector;
irq_vector_t debugmonitor_vector;
irq_vector_t vector34;
irq_vector_t pendsv_vector;
irq_vector_t systick_vector;
irq_vector_t vectors[81];
} vectors_t;
#if !defined(__DOXYGEN__) #if !defined(__DOXYGEN__)
extern void __main_stack_end__(void); extern uint32_t __main_stack_end__;
extern void ResetHandler(void); extern void ResetHandler(void);
extern void NMIVector(void); extern void NMIVector(void);
extern void HardFaultVector(void); extern void HardFaultVector(void);
@ -143,11 +171,12 @@ extern void Vector180(void);
#if !defined(__DOXYGEN__) #if !defined(__DOXYGEN__)
__attribute__ ((section("vectors"))) __attribute__ ((section("vectors")))
#endif #endif
void (*_vectors[])(void) = { vectors_t _vectors = {
__main_stack_end__, ResetHandler, NMIVector, HardFaultVector, &__main_stack_end__,ResetHandler, NMIVector, HardFaultVector,
MemManageVector, BusFaultVector, UsageFaultVector, Vector1C, MemManageVector, BusFaultVector, UsageFaultVector, Vector1C,
Vector20, Vector24, Vector28, SVCallVector, Vector20, Vector24, Vector28, SVCallVector,
DebugMonitorVector, Vector34, PendSVVector, SysTickVector, DebugMonitorVector, Vector34, PendSVVector, SysTickVector,
{
Vector40, Vector44, Vector48, Vector4C, Vector40, Vector44, Vector48, Vector4C,
Vector50, Vector54, Vector58, Vector5C, Vector50, Vector54, Vector58, Vector5C,
Vector60, Vector64, Vector68, Vector6C, Vector60, Vector64, Vector68, Vector6C,
@ -169,6 +198,7 @@ void (*_vectors[])(void) = {
Vector160, Vector164, Vector168, Vector16C, Vector160, Vector164, Vector168, Vector16C,
Vector170, Vector174, Vector178, Vector17C, Vector170, Vector174, Vector178, Vector17C,
Vector180 Vector180
}
}; };
/** /**

View File

@ -37,8 +37,36 @@
#include "ch.h" #include "ch.h"
/**
* @brief Type of an IRQ vector.
*/
typedef void (*irq_vector_t)(void);
/**
* @brief Type of a structure representing the whole vectors table.
*/
typedef struct {
uint32_t *init_stack;
irq_vector_t reset_vector;
irq_vector_t nmi_vector;
irq_vector_t hardfault_vector;
irq_vector_t memmanage_vector;
irq_vector_t busfault_vector;
irq_vector_t usagefault_vector;
irq_vector_t vector1c;
irq_vector_t vector20;
irq_vector_t vector24;
irq_vector_t vector28;
irq_vector_t svcall_vector;
irq_vector_t debugmonitor_vector;
irq_vector_t vector34;
irq_vector_t pendsv_vector;
irq_vector_t systick_vector;
irq_vector_t vectors[82];
} vectors_t;
#if !defined(__DOXYGEN__) #if !defined(__DOXYGEN__)
extern void __main_stack_end__(void); extern uint32_t __main_stack_end__;
extern void ResetHandler(void); extern void ResetHandler(void);
extern void NMIVector(void); extern void NMIVector(void);
extern void HardFaultVector(void); extern void HardFaultVector(void);
@ -144,11 +172,12 @@ extern void Vector184(void);
#if !defined(__DOXYGEN__) #if !defined(__DOXYGEN__)
__attribute__ ((section("vectors"))) __attribute__ ((section("vectors")))
#endif #endif
void (*_vectors[])(void) = { vectors_t _vectors = {
__main_stack_end__, ResetHandler, NMIVector, HardFaultVector, &__main_stack_end__,ResetHandler, NMIVector, HardFaultVector,
MemManageVector, BusFaultVector, UsageFaultVector, Vector1C, MemManageVector, BusFaultVector, UsageFaultVector, Vector1C,
Vector20, Vector24, Vector28, SVCallVector, Vector20, Vector24, Vector28, SVCallVector,
DebugMonitorVector, Vector34, PendSVVector, SysTickVector, DebugMonitorVector, Vector34, PendSVVector, SysTickVector,
{
Vector40, Vector44, Vector48, Vector4C, Vector40, Vector44, Vector48, Vector4C,
Vector50, Vector54, Vector58, Vector5C, Vector50, Vector54, Vector58, Vector5C,
Vector60, Vector64, Vector68, Vector6C, Vector60, Vector64, Vector68, Vector6C,
@ -170,6 +199,7 @@ void (*_vectors[])(void) = {
Vector160, Vector164, Vector168, Vector16C, Vector160, Vector164, Vector168, Vector16C,
Vector170, Vector174, Vector178, Vector17C, Vector170, Vector174, Vector178, Vector17C,
Vector180, Vector184 Vector180, Vector184
}
}; };
/** /**

View File

@ -37,8 +37,36 @@
#include "ch.h" #include "ch.h"
/**
* @brief Type of an IRQ vector.
*/
typedef void (*irq_vector_t)(void);
/**
* @brief Type of a structure representing the whole vectors table.
*/
typedef struct {
uint32_t *init_stack;
irq_vector_t reset_vector;
irq_vector_t nmi_vector;
irq_vector_t hardfault_vector;
irq_vector_t memmanage_vector;
irq_vector_t busfault_vector;
irq_vector_t usagefault_vector;
irq_vector_t vector1c;
irq_vector_t vector20;
irq_vector_t vector24;
irq_vector_t vector28;
irq_vector_t svcall_vector;
irq_vector_t debugmonitor_vector;
irq_vector_t vector34;
irq_vector_t pendsv_vector;
irq_vector_t systick_vector;
irq_vector_t vectors[45];
} vectors_t;
#if !defined(__DOXYGEN__) #if !defined(__DOXYGEN__)
extern void __main_stack_end__(void); extern uint32_t __main_stack_end__;
extern void ResetHandler(void); extern void ResetHandler(void);
extern void NMIVector(void); extern void NMIVector(void);
extern void HardFaultVector(void); extern void HardFaultVector(void);
@ -107,11 +135,12 @@ extern void VectorF0(void);
#if !defined(__DOXYGEN__) #if !defined(__DOXYGEN__)
__attribute__ ((section("vectors"))) __attribute__ ((section("vectors")))
#endif #endif
void (*_vectors[])(void) = { vectors_t _vectors = {
__main_stack_end__, ResetHandler, NMIVector, HardFaultVector, &__main_stack_end__,ResetHandler, NMIVector, HardFaultVector,
MemManageVector, BusFaultVector, UsageFaultVector, Vector1C, MemManageVector, BusFaultVector, UsageFaultVector, Vector1C,
Vector20, Vector24, Vector28, SVCallVector, Vector20, Vector24, Vector28, SVCallVector,
DebugMonitorVector, Vector34, PendSVVector, SysTickVector, DebugMonitorVector, Vector34, PendSVVector, SysTickVector,
{
Vector40, Vector44, Vector48, Vector4C, Vector40, Vector44, Vector48, Vector4C,
Vector50, Vector54, Vector58, Vector5C, Vector50, Vector54, Vector58, Vector5C,
Vector60, Vector64, Vector68, Vector6C, Vector60, Vector64, Vector68, Vector6C,
@ -124,6 +153,7 @@ void (*_vectors[])(void) = {
VectorD0, VectorD4, VectorD8, VectorDC, VectorD0, VectorD4, VectorD8, VectorDC,
VectorE0, VectorE4, VectorE8, VectorEC, VectorE0, VectorE4, VectorE8, VectorEC,
VectorF0 VectorF0
}
}; };
/** /**

View File

@ -81,6 +81,8 @@
*** 2.4.3 *** *** 2.4.3 ***
- FIX: Fixed wrong stack initializations in GCC STM32L1xx port files (bug - FIX: Fixed wrong stack initializations in GCC STM32L1xx port files (bug
3591321). 3591321).
- FIX: Fixed different redefinition for __main_stack_end__ symbol (bug
3591317).
- FIX: Fixed workaround for errata in STM32F4-A devices (bug 3586425). - FIX: Fixed workaround for errata in STM32F4-A devices (bug 3586425).
- FIX: Fixed error in palWritePad() macro (bug 3586230). - FIX: Fixed error in palWritePad() macro (bug 3586230).
- FIX: Fixed missing ; in testmbox.c (bug 3585979). - FIX: Fixed missing ; in testmbox.c (bug 3585979).