git-svn-id: svn://svn.code.sf.net/p/chibios/svn/branches/kernel_3_dev@6337 35acf78f-673a-0410-8e92-d51de3d6d3f4
This commit is contained in:
parent
984148e9db
commit
8c1fc9af2b
|
@ -121,6 +121,7 @@
|
||||||
#define STM32_PWM_USE_TIM2 FALSE
|
#define STM32_PWM_USE_TIM2 FALSE
|
||||||
#define STM32_PWM_USE_TIM3 FALSE
|
#define STM32_PWM_USE_TIM3 FALSE
|
||||||
#define STM32_PWM_USE_TIM4 TRUE
|
#define STM32_PWM_USE_TIM4 TRUE
|
||||||
|
#define STM32_PWM_USE_TIM9 FALSE
|
||||||
#define STM32_PWM_TIM2_IRQ_PRIORITY 7
|
#define STM32_PWM_TIM2_IRQ_PRIORITY 7
|
||||||
#define STM32_PWM_TIM3_IRQ_PRIORITY 7
|
#define STM32_PWM_TIM3_IRQ_PRIORITY 7
|
||||||
#define STM32_PWM_TIM4_IRQ_PRIORITY 7
|
#define STM32_PWM_TIM4_IRQ_PRIORITY 7
|
||||||
|
|
|
@ -121,6 +121,7 @@
|
||||||
#define STM32_PWM_USE_TIM2 FALSE
|
#define STM32_PWM_USE_TIM2 FALSE
|
||||||
#define STM32_PWM_USE_TIM3 FALSE
|
#define STM32_PWM_USE_TIM3 FALSE
|
||||||
#define STM32_PWM_USE_TIM4 TRUE
|
#define STM32_PWM_USE_TIM4 TRUE
|
||||||
|
#define STM32_PWM_USE_TIM9 FALSE
|
||||||
#define STM32_PWM_TIM2_IRQ_PRIORITY 7
|
#define STM32_PWM_TIM2_IRQ_PRIORITY 7
|
||||||
#define STM32_PWM_TIM3_IRQ_PRIORITY 7
|
#define STM32_PWM_TIM3_IRQ_PRIORITY 7
|
||||||
#define STM32_PWM_TIM4_IRQ_PRIORITY 7
|
#define STM32_PWM_TIM4_IRQ_PRIORITY 7
|
||||||
|
|
|
@ -121,21 +121,8 @@
|
||||||
* @brief SPI DMA error hook.
|
* @brief SPI DMA error hook.
|
||||||
*/
|
*/
|
||||||
#if !defined(STM32_SPI_DMA_ERROR_HOOK) || defined(__DOXYGEN__)
|
#if !defined(STM32_SPI_DMA_ERROR_HOOK) || defined(__DOXYGEN__)
|
||||||
#define STM32_SPI_DMA_ERROR_HOOK(spip) chSysHalt()
|
#define STM32_SPI_DMA_ERROR_HOOK(spip) osalSysHalt("DMA failure")
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#if 0
|
|
||||||
/* Fixed streams for platforms using the old DMA peripheral, the values are
|
|
||||||
valid for both STM32F1xx and STM32L1xx.*/
|
|
||||||
#define STM32_SPI_SPI1_RX_DMA_STREAM STM32_DMA_STREAM_ID(1, 2)
|
|
||||||
#define STM32_SPI_SPI1_TX_DMA_STREAM STM32_DMA_STREAM_ID(1, 3)
|
|
||||||
#define STM32_SPI_SPI2_RX_DMA_STREAM STM32_DMA_STREAM_ID(1, 4)
|
|
||||||
#define STM32_SPI_SPI2_TX_DMA_STREAM STM32_DMA_STREAM_ID(1, 5)
|
|
||||||
#define STM32_SPI_SPI3_RX_DMA_STREAM STM32_DMA_STREAM_ID(2, 1)
|
|
||||||
#define STM32_SPI_SPI3_TX_DMA_STREAM STM32_DMA_STREAM_ID(2, 2)
|
|
||||||
|
|
||||||
#endif /* !STM32_ADVANCED_DMA*/
|
|
||||||
/** @} */
|
/** @} */
|
||||||
|
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
|
|
|
@ -201,121 +201,8 @@
|
||||||
* error can only happen because programming errors.
|
* error can only happen because programming errors.
|
||||||
*/
|
*/
|
||||||
#if !defined(STM32_UART_DMA_ERROR_HOOK) || defined(__DOXYGEN__)
|
#if !defined(STM32_UART_DMA_ERROR_HOOK) || defined(__DOXYGEN__)
|
||||||
#define STM32_UART_DMA_ERROR_HOOK(uartp) chSysHalt()
|
#define STM32_UART_DMA_ERROR_HOOK(uartp) osalSysHalt("DMA failure")
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if STM32_ADVANCED_DMA || defined(__DOXYGEN__)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief DMA stream used for USART1 RX operations.
|
|
||||||
* @note This option is only available on platforms with enhanced DMA.
|
|
||||||
*/
|
|
||||||
#if !defined(STM32_UART_USART1_RX_DMA_STREAM) || defined(__DOXYGEN__)
|
|
||||||
#define STM32_UART_USART1_RX_DMA_STREAM STM32_DMA_STREAM_ID(2, 5)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief DMA stream used for USART1 TX operations.
|
|
||||||
* @note This option is only available on platforms with enhanced DMA.
|
|
||||||
*/
|
|
||||||
#if !defined(STM32_UART_USART1_TX_DMA_STREAM) || defined(__DOXYGEN__)
|
|
||||||
#define STM32_UART_USART1_TX_DMA_STREAM STM32_DMA_STREAM_ID(2, 7)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief DMA stream used for USART2 RX operations.
|
|
||||||
* @note This option is only available on platforms with enhanced DMA.
|
|
||||||
*/
|
|
||||||
#if !defined(STM32_UART_USART2_RX_DMA_STREAM) || defined(__DOXYGEN__)
|
|
||||||
#define STM32_UART_USART2_RX_DMA_STREAM STM32_DMA_STREAM_ID(1, 5)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief DMA stream used for USART2 TX operations.
|
|
||||||
* @note This option is only available on platforms with enhanced DMA.
|
|
||||||
*/
|
|
||||||
#if !defined(STM32_UART_USART2_TX_DMA_STREAM) || defined(__DOXYGEN__)
|
|
||||||
#define STM32_UART_USART2_TX_DMA_STREAM STM32_DMA_STREAM_ID(1, 6)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief DMA stream used for USART3 RX operations.
|
|
||||||
* @note This option is only available on platforms with enhanced DMA.
|
|
||||||
*/
|
|
||||||
#if !defined(STM32_UART_USART3_RX_DMA_STREAM) || defined(__DOXYGEN__)
|
|
||||||
#define STM32_UART_USART3_RX_DMA_STREAM STM32_DMA_STREAM_ID(1, 1)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief DMA stream used for USART3 TX operations.
|
|
||||||
* @note This option is only available on platforms with enhanced DMA.
|
|
||||||
*/
|
|
||||||
#if !defined(STM32_UART_USART3_TX_DMA_STREAM) || defined(__DOXYGEN__)
|
|
||||||
#define STM32_UART_USART3_TX_DMA_STREAM STM32_DMA_STREAM_ID(1, 3)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief DMA stream used for UART4 RX operations.
|
|
||||||
* @note This option is only available on platforms with enhanced DMA.
|
|
||||||
*/
|
|
||||||
#if !defined(STM32_UART_UART4_RX_DMA_STREAM) || defined(__DOXYGEN__)
|
|
||||||
#define STM32_UART_UART4_RX_DMA_STREAM STM32_DMA_STREAM_ID(1, 2)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief DMA stream used for UART4 TX operations.
|
|
||||||
* @note This option is only available on platforms with enhanced DMA.
|
|
||||||
*/
|
|
||||||
#if !defined(STM32_UART_UART4_TX_DMA_STREAM) || defined(__DOXYGEN__)
|
|
||||||
#define STM32_UART_UART4_TX_DMA_STREAM STM32_DMA_STREAM_ID(1, 4)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief DMA stream used for UART5 RX operations.
|
|
||||||
* @note This option is only available on platforms with enhanced DMA.
|
|
||||||
*/
|
|
||||||
#if !defined(STM32_UART_UART5_RX_DMA_STREAM) || defined(__DOXYGEN__)
|
|
||||||
#define STM32_UART_UART5_RX_DMA_STREAM STM32_DMA_STREAM_ID(1, 0)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief DMA stream used for UART5 TX operations.
|
|
||||||
* @note This option is only available on platforms with enhanced DMA.
|
|
||||||
*/
|
|
||||||
#if !defined(STM32_UART_UART5_TX_DMA_STREAM) || defined(__DOXYGEN__)
|
|
||||||
#define STM32_UART_UART5_TX_DMA_STREAM STM32_DMA_STREAM_ID(1, 7)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief DMA stream used for USART6 RX operations.
|
|
||||||
* @note This option is only available on platforms with enhanced DMA.
|
|
||||||
*/
|
|
||||||
#if !defined(STM32_UART_USART6_RX_DMA_STREAM) || defined(__DOXYGEN__)
|
|
||||||
#define STM32_UART_USART6_RX_DMA_STREAM STM32_DMA_STREAM_ID(2, 2)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief DMA stream used for USART6 TX operations.
|
|
||||||
* @note This option is only available on platforms with enhanced DMA.
|
|
||||||
*/
|
|
||||||
#if !defined(STM32_UART_USART6_TX_DMA_STREAM) || defined(__DOXYGEN__)
|
|
||||||
#define STM32_UART_USART6_TX_DMA_STREAM STM32_DMA_STREAM_ID(2, 7)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#else /* !STM32_ADVANCED_DMA */
|
|
||||||
|
|
||||||
/* Fixed streams for platforms using the old DMA peripheral, the values are
|
|
||||||
valid for both STM32F1xx and STM32L1xx.*/
|
|
||||||
#define STM32_UART_USART1_RX_DMA_STREAM STM32_DMA_STREAM_ID(1, 5)
|
|
||||||
#define STM32_UART_USART1_TX_DMA_STREAM STM32_DMA_STREAM_ID(1, 4)
|
|
||||||
#define STM32_UART_USART2_RX_DMA_STREAM STM32_DMA_STREAM_ID(1, 6)
|
|
||||||
#define STM32_UART_USART2_TX_DMA_STREAM STM32_DMA_STREAM_ID(1, 7)
|
|
||||||
#define STM32_UART_USART3_RX_DMA_STREAM STM32_DMA_STREAM_ID(1, 3)
|
|
||||||
#define STM32_UART_USART3_TX_DMA_STREAM STM32_DMA_STREAM_ID(1, 2)
|
|
||||||
#define STM32_UART_UART4_RX_DMA_STREAM STM32_DMA_STREAM_ID(2, 3)
|
|
||||||
#define STM32_UART_UART4_TX_DMA_STREAM STM32_DMA_STREAM_ID(2, 5)
|
|
||||||
|
|
||||||
#endif /* !STM32_ADVANCED_DMA*/
|
|
||||||
/** @} */
|
/** @} */
|
||||||
|
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
|
@ -339,7 +226,7 @@
|
||||||
#error "UART4 not present in the selected device"
|
#error "UART4 not present in the selected device"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if !defined(STM32F4XX) || !defined(STM32F4XX)
|
#if !defined(STM32F2XX) && !defined(STM32F4XX)
|
||||||
#error "UART4 DMA access not supported in this platform"
|
#error "UART4 DMA access not supported in this platform"
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
@ -349,7 +236,7 @@
|
||||||
#error "UART5 not present in the selected device"
|
#error "UART5 not present in the selected device"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if !defined(STM32F4XX) || !defined(STM32F4XX)
|
#if !defined(STM32F2XX) && !defined(STM32F4XX)
|
||||||
#error "UART5 DMA access not supported in this platform"
|
#error "UART5 DMA access not supported in this platform"
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
@ -424,6 +311,41 @@
|
||||||
#error "Invalid DMA priority assigned to USART6"
|
#error "Invalid DMA priority assigned to USART6"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* The following checks are only required when there is a DMA able to
|
||||||
|
reassign streams to different channels.*/
|
||||||
|
#if STM32_ADVANCED_DMA
|
||||||
|
/* Check on the presence of the DMA streams settings in mcuconf.h.*/
|
||||||
|
#if STM32_UART_USE_USART1 && (!defined(STM32_UART_USART1_RX_DMA_STREAM) || \
|
||||||
|
!defined(STM32_UART_USART1_TX_DMA_STREAM))
|
||||||
|
#error "USART1 DMA streams not defined"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if STM32_UART_USE_USART2 && (!defined(STM32_UART_USART2_RX_DMA_STREAM) || \
|
||||||
|
!defined(STM32_UART_USART2_TX_DMA_STREAM))
|
||||||
|
#error "USART2 DMA streams not defined"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if STM32_UART_USE_USART3 && (!defined(STM32_UART_USART3_RX_DMA_STREAM) || \
|
||||||
|
!defined(STM32_UART_USART3_TX_DMA_STREAM))
|
||||||
|
#error "USART3 DMA streams not defined"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if STM32_UART_USE_UART4 && (!defined(STM32_UART_UART4_RX_DMA_STREAM) || \
|
||||||
|
!defined(STM32_UART_UART4_TX_DMA_STREAM))
|
||||||
|
#error "UART4 DMA streams not defined"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if STM32_UART_USE_UART5 && (!defined(STM32_UART_UART5_RX_DMA_STREAM) || \
|
||||||
|
!defined(STM32_UART_UART5_TX_DMA_STREAM))
|
||||||
|
#error "UART5 DMA streams not defined"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if STM32_UART_USE_USART6 && (!defined(STM32_UART_USART6_RX_DMA_STREAM) || \
|
||||||
|
!defined(STM32_UART_USART6_TX_DMA_STREAM))
|
||||||
|
#error "USART6 DMA streams not defined"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Check on the validity of the assigned DMA channels.*/
|
||||||
#if STM32_UART_USE_USART1 && \
|
#if STM32_UART_USE_USART1 && \
|
||||||
!STM32_DMA_IS_VALID_ID(STM32_UART_USART1_RX_DMA_STREAM, \
|
!STM32_DMA_IS_VALID_ID(STM32_UART_USART1_RX_DMA_STREAM, \
|
||||||
STM32_USART1_RX_DMA_MSK)
|
STM32_USART1_RX_DMA_MSK)
|
||||||
|
@ -460,41 +382,24 @@
|
||||||
#error "invalid DMA stream associated to USART3 TX"
|
#error "invalid DMA stream associated to USART3 TX"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if STM32_UART_USE_UART4 && \
|
|
||||||
!STM32_DMA_IS_VALID_ID(STM32_UART_UART4_RX_DMA_STREAM, \
|
|
||||||
STM32_UART4_RX_DMA_MSK)
|
|
||||||
#error "invalid DMA stream associated to UART4 RX"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if STM32_UART_USE_UART4 && \
|
#if STM32_UART_USE_UART4 && \
|
||||||
!STM32_DMA_IS_VALID_ID(STM32_UART_UART4_TX_DMA_STREAM, \
|
!STM32_DMA_IS_VALID_ID(STM32_UART_UART4_TX_DMA_STREAM, \
|
||||||
STM32_UART4_TX_DMA_MSK)
|
STM32_UART4_TX_DMA_MSK)
|
||||||
#error "invalid DMA stream associated to UART4 TX"
|
#error "invalid DMA stream associated to UART4 TX"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if STM32_UART_USE_UART5 && \
|
|
||||||
!STM32_DMA_IS_VALID_ID(STM32_UART_UART5_RX_DMA_STREAM, \
|
|
||||||
STM32_UART5_RX_DMA_MSK)
|
|
||||||
#error "invalid DMA stream associated to UART5 RX"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if STM32_UART_USE_UART5 && \
|
#if STM32_UART_USE_UART5 && \
|
||||||
!STM32_DMA_IS_VALID_ID(STM32_UART_UART5_TX_DMA_STREAM, \
|
!STM32_DMA_IS_VALID_ID(STM32_UART_UART5_TX_DMA_STREAM, \
|
||||||
STM32_UART5_TX_DMA_MSK)
|
STM32_UART5_TX_DMA_MSK)
|
||||||
#error "invalid DMA stream associated to UART5 TX"
|
#error "invalid DMA stream associated to UART5 TX"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if STM32_UART_USE_USART6 && \
|
|
||||||
!STM32_DMA_IS_VALID_ID(STM32_UART_USART6_RX_DMA_STREAM, \
|
|
||||||
STM32_USART6_RX_DMA_MSK)
|
|
||||||
#error "invalid DMA stream associated to USART6 RX"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if STM32_UART_USE_USART6 && \
|
#if STM32_UART_USE_USART6 && \
|
||||||
!STM32_DMA_IS_VALID_ID(STM32_UART_USART6_TX_DMA_STREAM, \
|
!STM32_DMA_IS_VALID_ID(STM32_UART_USART6_TX_DMA_STREAM, \
|
||||||
STM32_USART6_TX_DMA_MSK)
|
STM32_USART6_TX_DMA_MSK)
|
||||||
#error "invalid DMA stream associated to USART6 TX"
|
#error "invalid DMA stream associated to USART6 TX"
|
||||||
#endif
|
#endif
|
||||||
|
#endif /* STM32_ADVANCED_DMA */
|
||||||
|
|
||||||
#if !defined(STM32_DMA_REQUIRED)
|
#if !defined(STM32_DMA_REQUIRED)
|
||||||
#define STM32_DMA_REQUIRED
|
#define STM32_DMA_REQUIRED
|
||||||
|
|
|
@ -125,16 +125,6 @@
|
||||||
#if !defined(STM32_UART_DMA_ERROR_HOOK) || defined(__DOXYGEN__)
|
#if !defined(STM32_UART_DMA_ERROR_HOOK) || defined(__DOXYGEN__)
|
||||||
#define STM32_UART_DMA_ERROR_HOOK(uartp) osalSysHalt("DMA failure")
|
#define STM32_UART_DMA_ERROR_HOOK(uartp) osalSysHalt("DMA failure")
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(STM32F37X)
|
|
||||||
/* Fixed values for STM32F3xx devices.*/
|
|
||||||
#define STM32_UART_USART1_RX_DMA_STREAM STM32_DMA_STREAM_ID(1, 5)
|
|
||||||
#define STM32_UART_USART1_TX_DMA_STREAM STM32_DMA_STREAM_ID(1, 4)
|
|
||||||
#define STM32_UART_USART2_RX_DMA_STREAM STM32_DMA_STREAM_ID(1, 6)
|
|
||||||
#define STM32_UART_USART2_TX_DMA_STREAM STM32_DMA_STREAM_ID(1, 7)
|
|
||||||
#define STM32_UART_USART3_RX_DMA_STREAM STM32_DMA_STREAM_ID(1, 3)
|
|
||||||
#define STM32_UART_USART3_TX_DMA_STREAM STM32_DMA_STREAM_ID(1, 2)
|
|
||||||
#endif /* defined(STM32F30X) */
|
|
||||||
/** @} */
|
/** @} */
|
||||||
|
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
|
|
|
@ -87,7 +87,7 @@ static void adc_lld_serve_rx_interrupt(ADCDriver *adcp, uint32_t flags) {
|
||||||
*
|
*
|
||||||
* @isr
|
* @isr
|
||||||
*/
|
*/
|
||||||
OSAL_IRQ_HANDLER(ADC1_IRQHandler) {
|
OSAL_IRQ_HANDLER(Vector88) {
|
||||||
uint32_t sr;
|
uint32_t sr;
|
||||||
|
|
||||||
OSAL_IRQ_PROLOGUE();
|
OSAL_IRQ_PROLOGUE();
|
||||||
|
|
|
@ -343,17 +343,13 @@ struct ADCDriver {
|
||||||
/**
|
/**
|
||||||
* @brief Waiting thread.
|
* @brief Waiting thread.
|
||||||
*/
|
*/
|
||||||
Thread *thread;
|
thread_reference_t thread;
|
||||||
#endif
|
#endif
|
||||||
#if ADC_USE_MUTUAL_EXCLUSION || defined(__DOXYGEN__)
|
#if ADC_USE_MUTUAL_EXCLUSION || defined(__DOXYGEN__)
|
||||||
#if CH_USE_MUTEXES || defined(__DOXYGEN__)
|
|
||||||
/**
|
/**
|
||||||
* @brief Mutex protecting the peripheral.
|
* @brief Mutex protecting the peripheral.
|
||||||
*/
|
*/
|
||||||
Mutex mutex;
|
mutex_t mutex;
|
||||||
#elif CH_USE_SEMAPHORES
|
|
||||||
Semaphore semaphore;
|
|
||||||
#endif
|
|
||||||
#endif /* ADC_USE_MUTUAL_EXCLUSION */
|
#endif /* ADC_USE_MUTUAL_EXCLUSION */
|
||||||
#if defined(ADC_DRIVER_EXT_FIELDS)
|
#if defined(ADC_DRIVER_EXT_FIELDS)
|
||||||
ADC_DRIVER_EXT_FIELDS
|
ADC_DRIVER_EXT_FIELDS
|
||||||
|
|
|
@ -53,7 +53,7 @@
|
||||||
*
|
*
|
||||||
* @isr
|
* @isr
|
||||||
*/
|
*/
|
||||||
OSAL_IRQ_HANDLER(EXTI0_IRQHandler) {
|
OSAL_IRQ_HANDLER(Vector58) {
|
||||||
|
|
||||||
OSAL_IRQ_PROLOGUE();
|
OSAL_IRQ_PROLOGUE();
|
||||||
|
|
||||||
|
@ -68,7 +68,7 @@ OSAL_IRQ_HANDLER(EXTI0_IRQHandler) {
|
||||||
*
|
*
|
||||||
* @isr
|
* @isr
|
||||||
*/
|
*/
|
||||||
OSAL_IRQ_HANDLER(EXTI1_IRQHandler) {
|
OSAL_IRQ_HANDLER(Vector5C) {
|
||||||
|
|
||||||
OSAL_IRQ_PROLOGUE();
|
OSAL_IRQ_PROLOGUE();
|
||||||
|
|
||||||
|
@ -83,7 +83,7 @@ OSAL_IRQ_HANDLER(EXTI1_IRQHandler) {
|
||||||
*
|
*
|
||||||
* @isr
|
* @isr
|
||||||
*/
|
*/
|
||||||
OSAL_IRQ_HANDLER(EXTI2_IRQHandler) {
|
OSAL_IRQ_HANDLER(Vector60) {
|
||||||
|
|
||||||
OSAL_IRQ_PROLOGUE();
|
OSAL_IRQ_PROLOGUE();
|
||||||
|
|
||||||
|
@ -98,7 +98,7 @@ OSAL_IRQ_HANDLER(EXTI2_IRQHandler) {
|
||||||
*
|
*
|
||||||
* @isr
|
* @isr
|
||||||
*/
|
*/
|
||||||
OSAL_IRQ_HANDLER(EXTI3_IRQHandler) {
|
OSAL_IRQ_HANDLER(Vector64) {
|
||||||
|
|
||||||
OSAL_IRQ_PROLOGUE();
|
OSAL_IRQ_PROLOGUE();
|
||||||
|
|
||||||
|
@ -113,7 +113,7 @@ OSAL_IRQ_HANDLER(EXTI3_IRQHandler) {
|
||||||
*
|
*
|
||||||
* @isr
|
* @isr
|
||||||
*/
|
*/
|
||||||
OSAL_IRQ_HANDLER(EXTI4_IRQHandler) {
|
OSAL_IRQ_HANDLER(Vector68) {
|
||||||
|
|
||||||
OSAL_IRQ_PROLOGUE();
|
OSAL_IRQ_PROLOGUE();
|
||||||
|
|
||||||
|
@ -128,7 +128,7 @@ OSAL_IRQ_HANDLER(EXTI4_IRQHandler) {
|
||||||
*
|
*
|
||||||
* @isr
|
* @isr
|
||||||
*/
|
*/
|
||||||
OSAL_IRQ_HANDLER(EXTI9_5_IRQHandler) {
|
OSAL_IRQ_HANDLER(Vector9C) {
|
||||||
uint32_t pr;
|
uint32_t pr;
|
||||||
|
|
||||||
OSAL_IRQ_PROLOGUE();
|
OSAL_IRQ_PROLOGUE();
|
||||||
|
@ -154,7 +154,7 @@ OSAL_IRQ_HANDLER(EXTI9_5_IRQHandler) {
|
||||||
*
|
*
|
||||||
* @isr
|
* @isr
|
||||||
*/
|
*/
|
||||||
OSAL_IRQ_HANDLER(EXTI15_10_IRQHandler) {
|
OSAL_IRQ_HANDLER(VectorE0) {
|
||||||
uint32_t pr;
|
uint32_t pr;
|
||||||
|
|
||||||
OSAL_IRQ_PROLOGUE();
|
OSAL_IRQ_PROLOGUE();
|
||||||
|
@ -183,7 +183,7 @@ OSAL_IRQ_HANDLER(EXTI15_10_IRQHandler) {
|
||||||
*
|
*
|
||||||
* @isr
|
* @isr
|
||||||
*/
|
*/
|
||||||
OSAL_IRQ_HANDLER(PVD_IRQHandler) {
|
OSAL_IRQ_HANDLER(Vector44) {
|
||||||
|
|
||||||
OSAL_IRQ_PROLOGUE();
|
OSAL_IRQ_PROLOGUE();
|
||||||
|
|
||||||
|
@ -198,7 +198,7 @@ OSAL_IRQ_HANDLER(PVD_IRQHandler) {
|
||||||
*
|
*
|
||||||
* @isr
|
* @isr
|
||||||
*/
|
*/
|
||||||
OSAL_IRQ_HANDLER(RTC_Alarm_IRQHandler) {
|
OSAL_IRQ_HANDLER(VectorE4) {
|
||||||
|
|
||||||
OSAL_IRQ_PROLOGUE();
|
OSAL_IRQ_PROLOGUE();
|
||||||
|
|
||||||
|
@ -212,7 +212,7 @@ OSAL_IRQ_HANDLER(RTC_Alarm_IRQHandler) {
|
||||||
*
|
*
|
||||||
* @isr
|
* @isr
|
||||||
*/
|
*/
|
||||||
OSAL_IRQ_HANDLER(USB_FS_WKUP_IRQHandler) {
|
OSAL_IRQ_HANDLER(VectorE8) {
|
||||||
|
|
||||||
OSAL_IRQ_PROLOGUE();
|
OSAL_IRQ_PROLOGUE();
|
||||||
|
|
||||||
|
@ -227,7 +227,7 @@ OSAL_IRQ_HANDLER(USB_FS_WKUP_IRQHandler) {
|
||||||
*
|
*
|
||||||
* @isr
|
* @isr
|
||||||
*/
|
*/
|
||||||
OSAL_IRQ_HANDLER(TAMPER_STAMP_IRQHandler) {
|
OSAL_IRQ_HANDLER(Vector48) {
|
||||||
|
|
||||||
OSAL_IRQ_PROLOGUE();
|
OSAL_IRQ_PROLOGUE();
|
||||||
|
|
||||||
|
@ -242,7 +242,7 @@ OSAL_IRQ_HANDLER(TAMPER_STAMP_IRQHandler) {
|
||||||
*
|
*
|
||||||
* @isr
|
* @isr
|
||||||
*/
|
*/
|
||||||
OSAL_IRQ_HANDLER(RTC_WKUP_IRQHandler) {
|
OSAL_IRQ_HANDLER(Vector4C) {
|
||||||
|
|
||||||
OSAL_IRQ_PROLOGUE();
|
OSAL_IRQ_PROLOGUE();
|
||||||
|
|
||||||
|
@ -257,7 +257,7 @@ OSAL_IRQ_HANDLER(RTC_WKUP_IRQHandler) {
|
||||||
*
|
*
|
||||||
* @isr
|
* @isr
|
||||||
*/
|
*/
|
||||||
OSAL_IRQ_HANDLER(COMP_IRQHandler) {
|
OSAL_IRQ_HANDLER(Vector98) {
|
||||||
uint32_t pr;
|
uint32_t pr;
|
||||||
|
|
||||||
OSAL_IRQ_PROLOGUE();
|
OSAL_IRQ_PROLOGUE();
|
||||||
|
|
|
@ -110,7 +110,7 @@ static dma_isr_redir_t dma_isr_redir[STM32_DMA_STREAMS];
|
||||||
*
|
*
|
||||||
* @isr
|
* @isr
|
||||||
*/
|
*/
|
||||||
OSAL_IRQ_HANDLER(DMA1_Ch1_IRQHandler) {
|
OSAL_IRQ_HANDLER(Vector6C) {
|
||||||
uint32_t flags;
|
uint32_t flags;
|
||||||
|
|
||||||
OSAL_IRQ_PROLOGUE();
|
OSAL_IRQ_PROLOGUE();
|
||||||
|
@ -128,7 +128,7 @@ OSAL_IRQ_HANDLER(DMA1_Ch1_IRQHandler) {
|
||||||
*
|
*
|
||||||
* @isr
|
* @isr
|
||||||
*/
|
*/
|
||||||
OSAL_IRQ_HANDLER(DMA1_Ch2_IRQHandler) {
|
OSAL_IRQ_HANDLER(Vector70) {
|
||||||
uint32_t flags;
|
uint32_t flags;
|
||||||
|
|
||||||
OSAL_IRQ_PROLOGUE();
|
OSAL_IRQ_PROLOGUE();
|
||||||
|
@ -146,7 +146,7 @@ OSAL_IRQ_HANDLER(DMA1_Ch2_IRQHandler) {
|
||||||
*
|
*
|
||||||
* @isr
|
* @isr
|
||||||
*/
|
*/
|
||||||
OSAL_IRQ_HANDLER(DMA1_Ch3_IRQHandler) {
|
OSAL_IRQ_HANDLER(Vector74) {
|
||||||
uint32_t flags;
|
uint32_t flags;
|
||||||
|
|
||||||
OSAL_IRQ_PROLOGUE();
|
OSAL_IRQ_PROLOGUE();
|
||||||
|
@ -164,7 +164,7 @@ OSAL_IRQ_HANDLER(DMA1_Ch3_IRQHandler) {
|
||||||
*
|
*
|
||||||
* @isr
|
* @isr
|
||||||
*/
|
*/
|
||||||
OSAL_IRQ_HANDLER(DMA1_Ch4_IRQHandler) {
|
OSAL_IRQ_HANDLER(Vector78) {
|
||||||
uint32_t flags;
|
uint32_t flags;
|
||||||
|
|
||||||
OSAL_IRQ_PROLOGUE();
|
OSAL_IRQ_PROLOGUE();
|
||||||
|
@ -182,7 +182,7 @@ OSAL_IRQ_HANDLER(DMA1_Ch4_IRQHandler) {
|
||||||
*
|
*
|
||||||
* @isr
|
* @isr
|
||||||
*/
|
*/
|
||||||
OSAL_IRQ_HANDLER(DMA1_Ch5_IRQHandler) {
|
OSAL_IRQ_HANDLER(Vector7C) {
|
||||||
uint32_t flags;
|
uint32_t flags;
|
||||||
|
|
||||||
OSAL_IRQ_PROLOGUE();
|
OSAL_IRQ_PROLOGUE();
|
||||||
|
@ -200,7 +200,7 @@ OSAL_IRQ_HANDLER(DMA1_Ch5_IRQHandler) {
|
||||||
*
|
*
|
||||||
* @isr
|
* @isr
|
||||||
*/
|
*/
|
||||||
OSAL_IRQ_HANDLER(DMA1_Ch6_IRQHandler) {
|
OSAL_IRQ_HANDLER(Vector80) {
|
||||||
uint32_t flags;
|
uint32_t flags;
|
||||||
|
|
||||||
OSAL_IRQ_PROLOGUE();
|
OSAL_IRQ_PROLOGUE();
|
||||||
|
@ -218,7 +218,7 @@ OSAL_IRQ_HANDLER(DMA1_Ch6_IRQHandler) {
|
||||||
*
|
*
|
||||||
* @isr
|
* @isr
|
||||||
*/
|
*/
|
||||||
OSAL_IRQ_HANDLER(DMA1_Ch7_IRQHandler) {
|
OSAL_IRQ_HANDLER(Vector84) {
|
||||||
uint32_t flags;
|
uint32_t flags;
|
||||||
|
|
||||||
OSAL_IRQ_PROLOGUE();
|
OSAL_IRQ_PROLOGUE();
|
||||||
|
@ -301,7 +301,7 @@ bool dmaStreamAllocate(const stm32_dma_stream_t *dmastp,
|
||||||
|
|
||||||
/* Enables the associated IRQ vector if a callback is defined.*/
|
/* Enables the associated IRQ vector if a callback is defined.*/
|
||||||
if (func != NULL)
|
if (func != NULL)
|
||||||
nvicEnableVector(dmastp->vector, CORTEX_PRIORITY_MASK(priority));
|
nvicEnableVector(dmastp->vector, priority);
|
||||||
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
|
@ -117,7 +117,7 @@ static msg_t WorkerThread(void *arg) {
|
||||||
/*
|
/*
|
||||||
* GPT2 callback.
|
* GPT2 callback.
|
||||||
*/
|
*/
|
||||||
static void gpt2cb(GPTDriver *gptp) {
|
static void gpt4cb(GPTDriver *gptp) {
|
||||||
msg_t msg;
|
msg_t msg;
|
||||||
|
|
||||||
(void)gptp;
|
(void)gptp;
|
||||||
|
@ -145,9 +145,9 @@ static void gpt3cb(GPTDriver *gptp) {
|
||||||
/*
|
/*
|
||||||
* GPT2 configuration.
|
* GPT2 configuration.
|
||||||
*/
|
*/
|
||||||
static const GPTConfig gpt2cfg = {
|
static const GPTConfig gpt4cfg = {
|
||||||
1000000, /* 1MHz timer clock.*/
|
1000000, /* 1MHz timer clock.*/
|
||||||
gpt2cb, /* Timer callback.*/
|
gpt4cb, /* Timer callback.*/
|
||||||
0
|
0
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -221,7 +221,7 @@ int main(void) {
|
||||||
/*
|
/*
|
||||||
* Activates GPTs.
|
* Activates GPTs.
|
||||||
*/
|
*/
|
||||||
gptStart(&GPTD4, &gpt2cfg);
|
gptStart(&GPTD4, &gpt4cfg);
|
||||||
gptStart(&GPTD3, &gpt3cfg);
|
gptStart(&GPTD3, &gpt3cfg);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -121,6 +121,7 @@
|
||||||
#define STM32_PWM_USE_TIM2 FALSE
|
#define STM32_PWM_USE_TIM2 FALSE
|
||||||
#define STM32_PWM_USE_TIM3 FALSE
|
#define STM32_PWM_USE_TIM3 FALSE
|
||||||
#define STM32_PWM_USE_TIM4 FALSE
|
#define STM32_PWM_USE_TIM4 FALSE
|
||||||
|
#define STM32_PWM_USE_TIM9 FALSE
|
||||||
#define STM32_PWM_TIM2_IRQ_PRIORITY 7
|
#define STM32_PWM_TIM2_IRQ_PRIORITY 7
|
||||||
#define STM32_PWM_TIM3_IRQ_PRIORITY 7
|
#define STM32_PWM_TIM3_IRQ_PRIORITY 7
|
||||||
#define STM32_PWM_TIM4_IRQ_PRIORITY 7
|
#define STM32_PWM_TIM4_IRQ_PRIORITY 7
|
||||||
|
|
|
@ -24,11 +24,6 @@
|
||||||
<nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
|
<nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
|
||||||
</natures>
|
</natures>
|
||||||
<linkedResources>
|
<linkedResources>
|
||||||
<link>
|
|
||||||
<name>board</name>
|
|
||||||
<type>2</type>
|
|
||||||
<locationURI>CHIBIOS/boards/ST_STM32L_DISCOVERY</locationURI>
|
|
||||||
</link>
|
|
||||||
<link>
|
<link>
|
||||||
<name>os</name>
|
<name>os</name>
|
||||||
<type>2</type>
|
<type>2</type>
|
||||||
|
|
|
@ -23,6 +23,11 @@ ifeq ($(USE_LINK_GC),)
|
||||||
USE_LINK_GC = yes
|
USE_LINK_GC = yes
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
# Enable this if you want link time optimizations (LTO)
|
||||||
|
ifeq ($(USE_LTO),)
|
||||||
|
USE_LTO = yes
|
||||||
|
endif
|
||||||
|
|
||||||
# If enabled, this option allows to compile the application in THUMB mode.
|
# If enabled, this option allows to compile the application in THUMB mode.
|
||||||
ifeq ($(USE_THUMB),)
|
ifeq ($(USE_THUMB),)
|
||||||
USE_THUMB = yes
|
USE_THUMB = yes
|
||||||
|
@ -41,9 +46,16 @@ endif
|
||||||
# Architecture or project specific options
|
# Architecture or project specific options
|
||||||
#
|
#
|
||||||
|
|
||||||
# Enable this if you really want to use the STM FWLib.
|
# Stack size to be allocated to the Cortex-M process stack. This stack is
|
||||||
ifeq ($(USE_FWLIB),)
|
# the stack used by the main() thread.
|
||||||
USE_FWLIB = no
|
ifeq ($(USE_PROCESS_STACKSIZE),)
|
||||||
|
USE_PROCESS_STACKSIZE = 0x400
|
||||||
|
endif
|
||||||
|
|
||||||
|
# Stack size to the allocated to the Cortex-M main/exceptions stack. This
|
||||||
|
# stack is used for processing interrupts and exceptions.
|
||||||
|
ifeq ($(USE_EXCEPTIONS_STACKSIZE),)
|
||||||
|
USE_EXCEPTIONS_STACKSIZE = 0x400
|
||||||
endif
|
endif
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -59,11 +71,12 @@ PROJECT = ch
|
||||||
|
|
||||||
# Imported source files and paths
|
# Imported source files and paths
|
||||||
CHIBIOS = ../../..
|
CHIBIOS = ../../..
|
||||||
include $(CHIBIOS)/boards/ST_STM32L_DISCOVERY/board.mk
|
|
||||||
include $(CHIBIOS)/os/hal/platforms/STM32L1xx/platform.mk
|
|
||||||
include $(CHIBIOS)/os/hal/hal.mk
|
include $(CHIBIOS)/os/hal/hal.mk
|
||||||
include $(CHIBIOS)/os/ports/GCC/ARMCMx/STM32L1xx/port.mk
|
include $(CHIBIOS)/os/hal/boards/ST_STM32L_DISCOVERY/board.mk
|
||||||
include $(CHIBIOS)/os/kernel/kernel.mk
|
include $(CHIBIOS)/os/hal/ports/STM32L1xx/platform.mk
|
||||||
|
include $(CHIBIOS)/os/rt/rt.mk
|
||||||
|
include $(CHIBIOS)/os/rt/osal/osal.mk
|
||||||
|
include $(CHIBIOS)/os/rt/ports/ARMCMx/compilers/GCC/mk/port_stm32l1xx.mk
|
||||||
#include $(CHIBIOS)/test/test.mk
|
#include $(CHIBIOS)/test/test.mk
|
||||||
|
|
||||||
# Define linker script file here
|
# Define linker script file here
|
||||||
|
@ -75,6 +88,7 @@ CSRC = $(PORTSRC) \
|
||||||
$(KERNSRC) \
|
$(KERNSRC) \
|
||||||
$(TESTSRC) \
|
$(TESTSRC) \
|
||||||
$(HALSRC) \
|
$(HALSRC) \
|
||||||
|
$(OSALSRC) \
|
||||||
$(PLATFORMSRC) \
|
$(PLATFORMSRC) \
|
||||||
$(BOARDSRC) \
|
$(BOARDSRC) \
|
||||||
main.c
|
main.c
|
||||||
|
@ -107,7 +121,7 @@ TCPPSRC =
|
||||||
ASMSRC = $(PORTASM)
|
ASMSRC = $(PORTASM)
|
||||||
|
|
||||||
INCDIR = $(PORTINC) $(KERNINC) $(TESTINC) \
|
INCDIR = $(PORTINC) $(KERNINC) $(TESTINC) \
|
||||||
$(HALINC) $(PLATFORMINC) $(BOARDINC) \
|
$(HALINC) $(OSALINC) $(PLATFORMINC) $(BOARDINC) \
|
||||||
$(CHIBIOS)/os/various
|
$(CHIBIOS)/os/various
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -132,6 +146,7 @@ LD = $(TRGT)gcc
|
||||||
CP = $(TRGT)objcopy
|
CP = $(TRGT)objcopy
|
||||||
AS = $(TRGT)gcc -x assembler-with-cpp
|
AS = $(TRGT)gcc -x assembler-with-cpp
|
||||||
OD = $(TRGT)objdump
|
OD = $(TRGT)objdump
|
||||||
|
SZ = $(TRGT)size
|
||||||
HEX = $(CP) -O ihex
|
HEX = $(CP) -O ihex
|
||||||
BIN = $(CP) -O binary
|
BIN = $(CP) -O binary
|
||||||
|
|
||||||
|
@ -151,29 +166,6 @@ CPPWARN = -Wall -Wextra
|
||||||
# Compiler settings
|
# Compiler settings
|
||||||
##############################################################################
|
##############################################################################
|
||||||
|
|
||||||
##############################################################################
|
|
||||||
# Start of default section
|
|
||||||
#
|
|
||||||
|
|
||||||
# List all default C defines here, like -D_DEBUG=1
|
|
||||||
DDEFS =
|
|
||||||
|
|
||||||
# List all default ASM defines here, like -D_DEBUG=1
|
|
||||||
DADEFS =
|
|
||||||
|
|
||||||
# List all default directories to look for include files here
|
|
||||||
DINCDIR =
|
|
||||||
|
|
||||||
# List the default directory to look for the libraries here
|
|
||||||
DLIBDIR =
|
|
||||||
|
|
||||||
# List all default libraries here
|
|
||||||
DLIBS =
|
|
||||||
|
|
||||||
#
|
|
||||||
# End of default section
|
|
||||||
##############################################################################
|
|
||||||
|
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# Start of user section
|
# Start of user section
|
||||||
#
|
#
|
||||||
|
@ -197,11 +189,5 @@ ULIBS =
|
||||||
# End of user defines
|
# End of user defines
|
||||||
##############################################################################
|
##############################################################################
|
||||||
|
|
||||||
ifeq ($(USE_FWLIB),yes)
|
RULESPATH = $(CHIBIOS)/os/common/ports/ARMCMx/compilers/GCC
|
||||||
include $(CHIBIOS)/ext/stm32lib/stm32lib.mk
|
include $(RULESPATH)/rules.mk
|
||||||
CSRC += $(STM32SRC)
|
|
||||||
INCDIR += $(STM32INC)
|
|
||||||
USE_OPT += -DUSE_STDPERIPH_DRIVER
|
|
||||||
endif
|
|
||||||
|
|
||||||
include $(CHIBIOS)/os/ports/GCC/ARMCMx/rules.mk
|
|
||||||
|
|
|
@ -30,19 +30,49 @@
|
||||||
|
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
/**
|
/**
|
||||||
* @name Kernel parameters and options
|
* @name System timers settings
|
||||||
* @{
|
* @{
|
||||||
*/
|
*/
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief System time counter resolution.
|
||||||
|
* @note Allowed values are 16 or 32 bits.
|
||||||
|
*/
|
||||||
|
#define CH_CFG_ST_RESOLUTION 16
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief System tick frequency.
|
* @brief System tick frequency.
|
||||||
* @details Frequency of the system timer that drives the system ticks. This
|
* @details Frequency of the system timer that drives the system ticks. This
|
||||||
* setting also defines the system tick time unit.
|
* setting also defines the system tick time unit.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_FREQUENCY) || defined(__DOXYGEN__)
|
#define CH_CFG_ST_FREQUENCY 1000
|
||||||
#define CH_FREQUENCY 1000
|
|
||||||
#endif
|
/**
|
||||||
|
* @brief Time delta constant for the tick-less mode.
|
||||||
|
* @note If this value is zero then the system uses the classic
|
||||||
|
* periodic tick. This value represents the minimum number
|
||||||
|
* of ticks that is safe to specify in a timeout directive.
|
||||||
|
* The value one is not valid, timeouts are rounded up to
|
||||||
|
* this value.
|
||||||
|
*/
|
||||||
|
#define CH_CFG_ST_TIMEDELTA 2
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Realtime Counter frequency.
|
||||||
|
* @details Frequency of the system counter used for realtime delays and
|
||||||
|
* measurements.
|
||||||
|
*/
|
||||||
|
#define CH_CFG_RTC_FREQUENCY 72000000
|
||||||
|
|
||||||
|
/** @} */
|
||||||
|
|
||||||
|
/*===========================================================================*/
|
||||||
|
/**
|
||||||
|
* @name Kernel parameters and options
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
/*===========================================================================*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Round robin interval.
|
* @brief Round robin interval.
|
||||||
|
@ -51,13 +81,12 @@
|
||||||
* disables the preemption for threads with equal priority and the
|
* disables the preemption for threads with equal priority and the
|
||||||
* round robin becomes cooperative. Note that higher priority
|
* round robin becomes cooperative. Note that higher priority
|
||||||
* threads can still preempt, the kernel is always preemptive.
|
* threads can still preempt, the kernel is always preemptive.
|
||||||
*
|
|
||||||
* @note Disabling the round robin preemption makes the kernel more compact
|
* @note Disabling the round robin preemption makes the kernel more compact
|
||||||
* and generally faster.
|
* and generally faster.
|
||||||
|
* @note The round robin preemption is not supported in tickless mode and
|
||||||
|
* must be set to zero in that case.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_TIME_QUANTUM) || defined(__DOXYGEN__)
|
#define CH_CFG_TIME_QUANTUM 0
|
||||||
#define CH_TIME_QUANTUM 20
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Managed RAM size.
|
* @brief Managed RAM size.
|
||||||
|
@ -68,28 +97,17 @@
|
||||||
*
|
*
|
||||||
* @note In order to let the OS manage the whole RAM the linker script must
|
* @note In order to let the OS manage the whole RAM the linker script must
|
||||||
* provide the @p __heap_base__ and @p __heap_end__ symbols.
|
* provide the @p __heap_base__ and @p __heap_end__ symbols.
|
||||||
* @note Requires @p CH_USE_MEMCORE.
|
* @note Requires @p CH_CFG_USE_MEMCORE.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_MEMCORE_SIZE) || defined(__DOXYGEN__)
|
#define CH_CFG_MEMCORE_SIZE 0
|
||||||
#define CH_MEMCORE_SIZE 0
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Idle thread automatic spawn suppression.
|
* @brief Idle thread automatic spawn suppression.
|
||||||
* @details When this option is activated the function @p chSysInit()
|
* @details When this option is activated the function @p chSysInit()
|
||||||
* does not spawn the idle thread automatically. The application has
|
* does not spawn the idle thread. The application @p main()
|
||||||
* then the responsibility to do one of the following:
|
* function becomes the idle thread and must implement an
|
||||||
* - Spawn a custom idle thread at priority @p IDLEPRIO.
|
* infinite loop. */
|
||||||
* - Change the main() thread priority to @p IDLEPRIO then enter
|
#define CH_CFG_NO_IDLE_THREAD FALSE
|
||||||
* an endless loop. In this scenario the @p main() thread acts as
|
|
||||||
* the idle thread.
|
|
||||||
* .
|
|
||||||
* @note Unless an idle thread is spawned the @p main() thread must not
|
|
||||||
* enter a sleep state.
|
|
||||||
*/
|
|
||||||
#if !defined(CH_NO_IDLE_THREAD) || defined(__DOXYGEN__)
|
|
||||||
#define CH_NO_IDLE_THREAD FALSE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/** @} */
|
/** @} */
|
||||||
|
|
||||||
|
@ -108,9 +126,7 @@
|
||||||
* @note This is not related to the compiler optimization options.
|
* @note This is not related to the compiler optimization options.
|
||||||
* @note The default is @p TRUE.
|
* @note The default is @p TRUE.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_OPTIMIZE_SPEED) || defined(__DOXYGEN__)
|
#define CH_CFG_OPTIMIZE_SPEED TRUE
|
||||||
#define CH_OPTIMIZE_SPEED TRUE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/** @} */
|
/** @} */
|
||||||
|
|
||||||
|
@ -121,15 +137,22 @@
|
||||||
*/
|
*/
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Time Measurement APIs.
|
||||||
|
* @details If enabled then the time measurement APIs are included in
|
||||||
|
* the kernel.
|
||||||
|
*
|
||||||
|
* @note The default is @p TRUE.
|
||||||
|
*/
|
||||||
|
#define CH_CFG_USE_TM TRUE
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Threads registry APIs.
|
* @brief Threads registry APIs.
|
||||||
* @details If enabled then the registry APIs are included in the kernel.
|
* @details If enabled then the registry APIs are included in the kernel.
|
||||||
*
|
*
|
||||||
* @note The default is @p TRUE.
|
* @note The default is @p TRUE.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_USE_REGISTRY) || defined(__DOXYGEN__)
|
#define CH_CFG_USE_REGISTRY TRUE
|
||||||
#define CH_USE_REGISTRY TRUE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Threads synchronization APIs.
|
* @brief Threads synchronization APIs.
|
||||||
|
@ -138,9 +161,7 @@
|
||||||
*
|
*
|
||||||
* @note The default is @p TRUE.
|
* @note The default is @p TRUE.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_USE_WAITEXIT) || defined(__DOXYGEN__)
|
#define CH_CFG_USE_WAITEXIT TRUE
|
||||||
#define CH_USE_WAITEXIT TRUE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Semaphores APIs.
|
* @brief Semaphores APIs.
|
||||||
|
@ -148,33 +169,18 @@
|
||||||
*
|
*
|
||||||
* @note The default is @p TRUE.
|
* @note The default is @p TRUE.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_USE_SEMAPHORES) || defined(__DOXYGEN__)
|
#define CH_CFG_USE_SEMAPHORES TRUE
|
||||||
#define CH_USE_SEMAPHORES TRUE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Semaphores queuing mode.
|
* @brief Semaphores queuing mode.
|
||||||
* @details If enabled then the threads are enqueued on semaphores by
|
* @details If enabled then the threads are enqueued on semaphores by
|
||||||
* priority rather than in FIFO order.
|
* priority rather than in FIFO order.
|
||||||
*
|
*
|
||||||
* @note The default is @p FALSE. Enable this if you have special requirements.
|
* @note The default is @p FALSE. Enable this if you have special
|
||||||
* @note Requires @p CH_USE_SEMAPHORES.
|
* requirements.
|
||||||
|
* @note Requires @p CH_CFG_USE_SEMAPHORES.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_USE_SEMAPHORES_PRIORITY) || defined(__DOXYGEN__)
|
#define CH_CFG_USE_SEMAPHORES_PRIORITY FALSE
|
||||||
#define CH_USE_SEMAPHORES_PRIORITY FALSE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Atomic semaphore API.
|
|
||||||
* @details If enabled then the semaphores the @p chSemSignalWait() API
|
|
||||||
* is included in the kernel.
|
|
||||||
*
|
|
||||||
* @note The default is @p TRUE.
|
|
||||||
* @note Requires @p CH_USE_SEMAPHORES.
|
|
||||||
*/
|
|
||||||
#if !defined(CH_USE_SEMSW) || defined(__DOXYGEN__)
|
|
||||||
#define CH_USE_SEMSW TRUE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Mutexes APIs.
|
* @brief Mutexes APIs.
|
||||||
|
@ -182,9 +188,7 @@
|
||||||
*
|
*
|
||||||
* @note The default is @p TRUE.
|
* @note The default is @p TRUE.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_USE_MUTEXES) || defined(__DOXYGEN__)
|
#define CH_CFG_USE_MUTEXES TRUE
|
||||||
#define CH_USE_MUTEXES TRUE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Conditional Variables APIs.
|
* @brief Conditional Variables APIs.
|
||||||
|
@ -192,11 +196,9 @@
|
||||||
* in the kernel.
|
* in the kernel.
|
||||||
*
|
*
|
||||||
* @note The default is @p TRUE.
|
* @note The default is @p TRUE.
|
||||||
* @note Requires @p CH_USE_MUTEXES.
|
* @note Requires @p CH_CFG_USE_MUTEXES.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_USE_CONDVARS) || defined(__DOXYGEN__)
|
#define CH_CFG_USE_CONDVARS TRUE
|
||||||
#define CH_USE_CONDVARS TRUE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Conditional Variables APIs with timeout.
|
* @brief Conditional Variables APIs with timeout.
|
||||||
|
@ -204,11 +206,9 @@
|
||||||
* specification are included in the kernel.
|
* specification are included in the kernel.
|
||||||
*
|
*
|
||||||
* @note The default is @p TRUE.
|
* @note The default is @p TRUE.
|
||||||
* @note Requires @p CH_USE_CONDVARS.
|
* @note Requires @p CH_CFG_USE_CONDVARS.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_USE_CONDVARS_TIMEOUT) || defined(__DOXYGEN__)
|
#define CH_CFG_USE_CONDVARS_TIMEOUT TRUE
|
||||||
#define CH_USE_CONDVARS_TIMEOUT TRUE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Events Flags APIs.
|
* @brief Events Flags APIs.
|
||||||
|
@ -216,9 +216,7 @@
|
||||||
*
|
*
|
||||||
* @note The default is @p TRUE.
|
* @note The default is @p TRUE.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_USE_EVENTS) || defined(__DOXYGEN__)
|
#define CH_CFG_USE_EVENTS TRUE
|
||||||
#define CH_USE_EVENTS TRUE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Events Flags APIs with timeout.
|
* @brief Events Flags APIs with timeout.
|
||||||
|
@ -226,11 +224,9 @@
|
||||||
* are included in the kernel.
|
* are included in the kernel.
|
||||||
*
|
*
|
||||||
* @note The default is @p TRUE.
|
* @note The default is @p TRUE.
|
||||||
* @note Requires @p CH_USE_EVENTS.
|
* @note Requires @p CH_CFG_USE_EVENTS.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_USE_EVENTS_TIMEOUT) || defined(__DOXYGEN__)
|
#define CH_CFG_USE_EVENTS_TIMEOUT TRUE
|
||||||
#define CH_USE_EVENTS_TIMEOUT TRUE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Synchronous Messages APIs.
|
* @brief Synchronous Messages APIs.
|
||||||
|
@ -239,21 +235,18 @@
|
||||||
*
|
*
|
||||||
* @note The default is @p TRUE.
|
* @note The default is @p TRUE.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_USE_MESSAGES) || defined(__DOXYGEN__)
|
#define CH_CFG_USE_MESSAGES TRUE
|
||||||
#define CH_USE_MESSAGES TRUE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Synchronous Messages queuing mode.
|
* @brief Synchronous Messages queuing mode.
|
||||||
* @details If enabled then messages are served by priority rather than in
|
* @details If enabled then messages are served by priority rather than in
|
||||||
* FIFO order.
|
* FIFO order.
|
||||||
*
|
*
|
||||||
* @note The default is @p FALSE. Enable this if you have special requirements.
|
* @note The default is @p FALSE. Enable this if you have special
|
||||||
* @note Requires @p CH_USE_MESSAGES.
|
* requirements.
|
||||||
|
* @note Requires @p CH_CFG_USE_MESSAGES.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_USE_MESSAGES_PRIORITY) || defined(__DOXYGEN__)
|
#define CH_CFG_USE_MESSAGES_PRIORITY FALSE
|
||||||
#define CH_USE_MESSAGES_PRIORITY FALSE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Mailboxes APIs.
|
* @brief Mailboxes APIs.
|
||||||
|
@ -261,11 +254,9 @@
|
||||||
* included in the kernel.
|
* included in the kernel.
|
||||||
*
|
*
|
||||||
* @note The default is @p TRUE.
|
* @note The default is @p TRUE.
|
||||||
* @note Requires @p CH_USE_SEMAPHORES.
|
* @note Requires @p CH_CFG_USE_SEMAPHORES.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_USE_MAILBOXES) || defined(__DOXYGEN__)
|
#define CH_CFG_USE_MAILBOXES TRUE
|
||||||
#define CH_USE_MAILBOXES TRUE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief I/O Queues APIs.
|
* @brief I/O Queues APIs.
|
||||||
|
@ -273,9 +264,7 @@
|
||||||
*
|
*
|
||||||
* @note The default is @p TRUE.
|
* @note The default is @p TRUE.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_USE_QUEUES) || defined(__DOXYGEN__)
|
#define CH_CFG_USE_QUEUES TRUE
|
||||||
#define CH_USE_QUEUES TRUE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Core Memory Manager APIs.
|
* @brief Core Memory Manager APIs.
|
||||||
|
@ -284,9 +273,7 @@
|
||||||
*
|
*
|
||||||
* @note The default is @p TRUE.
|
* @note The default is @p TRUE.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_USE_MEMCORE) || defined(__DOXYGEN__)
|
#define CH_CFG_USE_MEMCORE TRUE
|
||||||
#define CH_USE_MEMCORE TRUE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Heap Allocator APIs.
|
* @brief Heap Allocator APIs.
|
||||||
|
@ -294,27 +281,11 @@
|
||||||
* in the kernel.
|
* in the kernel.
|
||||||
*
|
*
|
||||||
* @note The default is @p TRUE.
|
* @note The default is @p TRUE.
|
||||||
* @note Requires @p CH_USE_MEMCORE and either @p CH_USE_MUTEXES or
|
* @note Requires @p CH_CFG_USE_MEMCORE and either @p CH_CFG_USE_MUTEXES or
|
||||||
* @p CH_USE_SEMAPHORES.
|
* @p CH_CFG_USE_SEMAPHORES.
|
||||||
* @note Mutexes are recommended.
|
* @note Mutexes are recommended.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_USE_HEAP) || defined(__DOXYGEN__)
|
#define CH_CFG_USE_HEAP TRUE
|
||||||
#define CH_USE_HEAP TRUE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief C-runtime allocator.
|
|
||||||
* @details If enabled the the heap allocator APIs just wrap the C-runtime
|
|
||||||
* @p malloc() and @p free() functions.
|
|
||||||
*
|
|
||||||
* @note The default is @p FALSE.
|
|
||||||
* @note Requires @p CH_USE_HEAP.
|
|
||||||
* @note The C-runtime may or may not require @p CH_USE_MEMCORE, see the
|
|
||||||
* appropriate documentation.
|
|
||||||
*/
|
|
||||||
#if !defined(CH_USE_MALLOC_HEAP) || defined(__DOXYGEN__)
|
|
||||||
#define CH_USE_MALLOC_HEAP FALSE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Memory Pools Allocator APIs.
|
* @brief Memory Pools Allocator APIs.
|
||||||
|
@ -323,9 +294,7 @@
|
||||||
*
|
*
|
||||||
* @note The default is @p TRUE.
|
* @note The default is @p TRUE.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_USE_MEMPOOLS) || defined(__DOXYGEN__)
|
#define CH_CFG_USE_MEMPOOLS TRUE
|
||||||
#define CH_USE_MEMPOOLS TRUE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Dynamic Threads APIs.
|
* @brief Dynamic Threads APIs.
|
||||||
|
@ -333,12 +302,10 @@
|
||||||
* in the kernel.
|
* in the kernel.
|
||||||
*
|
*
|
||||||
* @note The default is @p TRUE.
|
* @note The default is @p TRUE.
|
||||||
* @note Requires @p CH_USE_WAITEXIT.
|
* @note Requires @p CH_CFG_USE_WAITEXIT.
|
||||||
* @note Requires @p CH_USE_HEAP and/or @p CH_USE_MEMPOOLS.
|
* @note Requires @p CH_CFG_USE_HEAP and/or @p CH_CFG_USE_MEMPOOLS.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_USE_DYNAMIC) || defined(__DOXYGEN__)
|
#define CH_CFG_USE_DYNAMIC TRUE
|
||||||
#define CH_USE_DYNAMIC TRUE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/** @} */
|
/** @} */
|
||||||
|
|
||||||
|
@ -349,6 +316,13 @@
|
||||||
*/
|
*/
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Debug option, kernel statistics.
|
||||||
|
*
|
||||||
|
* @note The default is @p FALSE.
|
||||||
|
*/
|
||||||
|
#define CH_DBG_STATISTICS FALSE
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Debug option, system state check.
|
* @brief Debug option, system state check.
|
||||||
* @details If enabled the correct call protocol for system APIs is checked
|
* @details If enabled the correct call protocol for system APIs is checked
|
||||||
|
@ -356,9 +330,7 @@
|
||||||
*
|
*
|
||||||
* @note The default is @p FALSE.
|
* @note The default is @p FALSE.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_DBG_SYSTEM_STATE_CHECK) || defined(__DOXYGEN__)
|
|
||||||
#define CH_DBG_SYSTEM_STATE_CHECK FALSE
|
#define CH_DBG_SYSTEM_STATE_CHECK FALSE
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Debug option, parameters checks.
|
* @brief Debug option, parameters checks.
|
||||||
|
@ -367,9 +339,7 @@
|
||||||
*
|
*
|
||||||
* @note The default is @p FALSE.
|
* @note The default is @p FALSE.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_DBG_ENABLE_CHECKS) || defined(__DOXYGEN__)
|
|
||||||
#define CH_DBG_ENABLE_CHECKS FALSE
|
#define CH_DBG_ENABLE_CHECKS FALSE
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Debug option, consistency checks.
|
* @brief Debug option, consistency checks.
|
||||||
|
@ -379,9 +349,7 @@
|
||||||
*
|
*
|
||||||
* @note The default is @p FALSE.
|
* @note The default is @p FALSE.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_DBG_ENABLE_ASSERTS) || defined(__DOXYGEN__)
|
|
||||||
#define CH_DBG_ENABLE_ASSERTS FALSE
|
#define CH_DBG_ENABLE_ASSERTS FALSE
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Debug option, trace buffer.
|
* @brief Debug option, trace buffer.
|
||||||
|
@ -390,9 +358,7 @@
|
||||||
*
|
*
|
||||||
* @note The default is @p FALSE.
|
* @note The default is @p FALSE.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_DBG_ENABLE_TRACE) || defined(__DOXYGEN__)
|
|
||||||
#define CH_DBG_ENABLE_TRACE FALSE
|
#define CH_DBG_ENABLE_TRACE FALSE
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Debug option, stack checks.
|
* @brief Debug option, stack checks.
|
||||||
|
@ -404,9 +370,7 @@
|
||||||
* @note The default failure mode is to halt the system with the global
|
* @note The default failure mode is to halt the system with the global
|
||||||
* @p panic_msg variable set to @p NULL.
|
* @p panic_msg variable set to @p NULL.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_DBG_ENABLE_STACK_CHECK) || defined(__DOXYGEN__)
|
|
||||||
#define CH_DBG_ENABLE_STACK_CHECK FALSE
|
#define CH_DBG_ENABLE_STACK_CHECK FALSE
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Debug option, stacks initialization.
|
* @brief Debug option, stacks initialization.
|
||||||
|
@ -416,22 +380,18 @@
|
||||||
*
|
*
|
||||||
* @note The default is @p FALSE.
|
* @note The default is @p FALSE.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_DBG_FILL_THREADS) || defined(__DOXYGEN__)
|
|
||||||
#define CH_DBG_FILL_THREADS FALSE
|
#define CH_DBG_FILL_THREADS FALSE
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Debug option, threads profiling.
|
* @brief Debug option, threads profiling.
|
||||||
* @details If enabled then a field is added to the @p Thread structure that
|
* @details If enabled then a field is added to the @p thread_t structure that
|
||||||
* counts the system ticks occurred while executing the thread.
|
* counts the system ticks occurred while executing the thread.
|
||||||
*
|
*
|
||||||
* @note The default is @p TRUE.
|
* @note The default is @p FALSE.
|
||||||
* @note This debug option is defaulted to TRUE because it is required by
|
* @note This debug option is not currently compatible with the
|
||||||
* some test cases into the test suite.
|
* tickless mode.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_DBG_THREADS_PROFILING) || defined(__DOXYGEN__)
|
#define CH_DBG_THREADS_PROFILING FALSE
|
||||||
#define CH_DBG_THREADS_PROFILING TRUE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/** @} */
|
/** @} */
|
||||||
|
|
||||||
|
@ -444,12 +404,10 @@
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Threads descriptor structure extension.
|
* @brief Threads descriptor structure extension.
|
||||||
* @details User fields added to the end of the @p Thread structure.
|
* @details User fields added to the end of the @p thread_t structure.
|
||||||
*/
|
*/
|
||||||
#if !defined(THREAD_EXT_FIELDS) || defined(__DOXYGEN__)
|
#define CH_CFG_THREAD_EXTRA_FIELDS \
|
||||||
#define THREAD_EXT_FIELDS \
|
|
||||||
/* Add threads custom fields here.*/
|
/* Add threads custom fields here.*/
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Threads initialization hook.
|
* @brief Threads initialization hook.
|
||||||
|
@ -458,11 +416,9 @@
|
||||||
* @note It is invoked from within @p chThdInit() and implicitly from all
|
* @note It is invoked from within @p chThdInit() and implicitly from all
|
||||||
* the threads creation APIs.
|
* the threads creation APIs.
|
||||||
*/
|
*/
|
||||||
#if !defined(THREAD_EXT_INIT_HOOK) || defined(__DOXYGEN__)
|
#define CH_CFG_THREAD_INIT_HOOK(tp) { \
|
||||||
#define THREAD_EXT_INIT_HOOK(tp) { \
|
|
||||||
/* Add threads initialization code here.*/ \
|
/* Add threads initialization code here.*/ \
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Threads finalization hook.
|
* @brief Threads finalization hook.
|
||||||
|
@ -472,53 +428,61 @@
|
||||||
* @note It is also invoked when the threads simply return in order to
|
* @note It is also invoked when the threads simply return in order to
|
||||||
* terminate.
|
* terminate.
|
||||||
*/
|
*/
|
||||||
#if !defined(THREAD_EXT_EXIT_HOOK) || defined(__DOXYGEN__)
|
#define CH_CFG_THREAD_EXIT_HOOK(tp) { \
|
||||||
#define THREAD_EXT_EXIT_HOOK(tp) { \
|
|
||||||
/* Add threads finalization code here.*/ \
|
/* Add threads finalization code here.*/ \
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Context switch hook.
|
* @brief Context switch hook.
|
||||||
* @details This hook is invoked just before switching between threads.
|
* @details This hook is invoked just before switching between threads.
|
||||||
*/
|
*/
|
||||||
#if !defined(THREAD_CONTEXT_SWITCH_HOOK) || defined(__DOXYGEN__)
|
#define CH_CFG_CONTEXT_SWITCH_HOOK(ntp, otp) { \
|
||||||
#define THREAD_CONTEXT_SWITCH_HOOK(ntp, otp) { \
|
|
||||||
/* System halt code here.*/ \
|
/* System halt code here.*/ \
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
/**
|
||||||
|
* @brief Idle thread enter hook.
|
||||||
|
* @note This hook is invoked within a critical zone, no OS functions
|
||||||
|
* should be invoked from here.
|
||||||
|
* @note This macro can be used to activate a power saving mode.
|
||||||
|
*/
|
||||||
|
#define CH_CFG_IDLE_ENTER_HOOK() { \
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Idle thread leave hook.
|
||||||
|
* @note This hook is invoked within a critical zone, no OS functions
|
||||||
|
* should be invoked from here.
|
||||||
|
* @note This macro can be used to deactivate a power saving mode.
|
||||||
|
*/
|
||||||
|
#define CH_CFG_IDLE_LEAVE_HOOK() { \
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Idle Loop hook.
|
* @brief Idle Loop hook.
|
||||||
* @details This hook is continuously invoked by the idle thread loop.
|
* @details This hook is continuously invoked by the idle thread loop.
|
||||||
*/
|
*/
|
||||||
#if !defined(IDLE_LOOP_HOOK) || defined(__DOXYGEN__)
|
#define CH_CFG_IDLE_LOOP_HOOK() { \
|
||||||
#define IDLE_LOOP_HOOK() { \
|
|
||||||
/* Idle loop code here.*/ \
|
/* Idle loop code here.*/ \
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief System tick event hook.
|
* @brief System tick event hook.
|
||||||
* @details This hook is invoked in the system tick handler immediately
|
* @details This hook is invoked in the system tick handler immediately
|
||||||
* after processing the virtual timers queue.
|
* after processing the virtual timers queue.
|
||||||
*/
|
*/
|
||||||
#if !defined(SYSTEM_TICK_EVENT_HOOK) || defined(__DOXYGEN__)
|
#define CH_CFG_SYSTEM_TICK_HOOK() { \
|
||||||
#define SYSTEM_TICK_EVENT_HOOK() { \
|
|
||||||
/* System tick event code here.*/ \
|
/* System tick event code here.*/ \
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief System halt hook.
|
* @brief System halt hook.
|
||||||
* @details This hook is invoked in case to a system halting error before
|
* @details This hook is invoked in case to a system halting error before
|
||||||
* the system is halted.
|
* the system is halted.
|
||||||
*/
|
*/
|
||||||
#if !defined(SYSTEM_HALT_HOOK) || defined(__DOXYGEN__)
|
#define CH_CFG_SYSTEM_HALT_HOOK(reason) { \
|
||||||
#define SYSTEM_HALT_HOOK() { \
|
|
||||||
/* System halt code here.*/ \
|
/* System halt code here.*/ \
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
/** @} */
|
/** @} */
|
||||||
|
|
||||||
|
|
|
@ -46,18 +46,18 @@
|
||||||
#define MSG_SEND_LEFT 0
|
#define MSG_SEND_LEFT 0
|
||||||
#define MSG_SEND_RIGHT 1
|
#define MSG_SEND_RIGHT 1
|
||||||
|
|
||||||
static bool_t saturated;
|
static bool saturated;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Mailboxes and buffers.
|
* Mailboxes and buffers.
|
||||||
*/
|
*/
|
||||||
static Mailbox mb[NUM_THREADS];
|
static mailbox_t mb[NUM_THREADS];
|
||||||
static msg_t b[NUM_THREADS][MAILBOX_SIZE];
|
static msg_t b[NUM_THREADS][MAILBOX_SIZE];
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Test worker threads.
|
* Test worker threads.
|
||||||
*/
|
*/
|
||||||
static WORKING_AREA(waWorkerThread[NUM_THREADS], 128);
|
static THD_WORKING_AREA(waWorkerThread[NUM_THREADS], 128);
|
||||||
static msg_t WorkerThread(void *arg) {
|
static msg_t WorkerThread(void *arg) {
|
||||||
static volatile unsigned x = 0;
|
static volatile unsigned x = 0;
|
||||||
static unsigned cnt = 0;
|
static unsigned cnt = 0;
|
||||||
|
@ -101,7 +101,7 @@ static msg_t WorkerThread(void *arg) {
|
||||||
/* If this thread is not at the end of a chain re-sending the message,
|
/* If this thread is not at the end of a chain re-sending the message,
|
||||||
note this check works because the variable target is unsigned.*/
|
note this check works because the variable target is unsigned.*/
|
||||||
msg = chMBPost(&mb[target], msg, TIME_IMMEDIATE);
|
msg = chMBPost(&mb[target], msg, TIME_IMMEDIATE);
|
||||||
if (msg != RDY_OK)
|
if (msg != MSG_OK)
|
||||||
saturated = TRUE;
|
saturated = TRUE;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -117,15 +117,15 @@ static msg_t WorkerThread(void *arg) {
|
||||||
/*
|
/*
|
||||||
* GPT2 callback.
|
* GPT2 callback.
|
||||||
*/
|
*/
|
||||||
static void gpt2cb(GPTDriver *gptp) {
|
static void gpt4cb(GPTDriver *gptp) {
|
||||||
msg_t msg;
|
msg_t msg;
|
||||||
|
|
||||||
(void)gptp;
|
(void)gptp;
|
||||||
chSysLockFromIsr();
|
chSysLockFromISR();
|
||||||
msg = chMBPostI(&mb[0], MSG_SEND_RIGHT);
|
msg = chMBPostI(&mb[0], MSG_SEND_RIGHT);
|
||||||
if (msg != RDY_OK)
|
if (msg != MSG_OK)
|
||||||
saturated = TRUE;
|
saturated = TRUE;
|
||||||
chSysUnlockFromIsr();
|
chSysUnlockFromISR();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -135,19 +135,19 @@ static void gpt3cb(GPTDriver *gptp) {
|
||||||
msg_t msg;
|
msg_t msg;
|
||||||
|
|
||||||
(void)gptp;
|
(void)gptp;
|
||||||
chSysLockFromIsr();
|
chSysLockFromISR();
|
||||||
msg = chMBPostI(&mb[NUM_THREADS - 1], MSG_SEND_LEFT);
|
msg = chMBPostI(&mb[NUM_THREADS - 1], MSG_SEND_LEFT);
|
||||||
if (msg != RDY_OK)
|
if (msg != MSG_OK)
|
||||||
saturated = TRUE;
|
saturated = TRUE;
|
||||||
chSysUnlockFromIsr();
|
chSysUnlockFromISR();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* GPT2 configuration.
|
* GPT2 configuration.
|
||||||
*/
|
*/
|
||||||
static const GPTConfig gpt2cfg = {
|
static const GPTConfig gpt4cfg = {
|
||||||
1000000, /* 1MHz timer clock.*/
|
1000000, /* 1MHz timer clock.*/
|
||||||
gpt2cb, /* Timer callback.*/
|
gpt4cb, /* Timer callback.*/
|
||||||
0
|
0
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -212,19 +212,23 @@ int main(void) {
|
||||||
chSysInit();
|
chSysInit();
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Prepares the Serial driver 1 and GPT drivers 2 and 3.
|
* Activates the serial driver 1, PA9 and PA10 are routed to USART1.
|
||||||
*/
|
*/
|
||||||
sdStart(&SD1, NULL); /* Default is 38400-8-N-1.*/
|
sdStart(&SD1, NULL);
|
||||||
palSetPadMode(GPIOA, 9, PAL_MODE_ALTERNATE(7));
|
palSetPadMode(GPIOA, 9, PAL_MODE_ALTERNATE(7)); /* USART1 TX. */
|
||||||
palSetPadMode(GPIOA, 10, PAL_MODE_ALTERNATE(7));
|
palSetPadMode(GPIOA, 10, PAL_MODE_ALTERNATE(7)); /* USART1 RX. */
|
||||||
gptStart(&GPTD2, &gpt2cfg);
|
|
||||||
|
/*
|
||||||
|
* Activates GPTs.
|
||||||
|
*/
|
||||||
|
gptStart(&GPTD4, &gpt4cfg);
|
||||||
gptStart(&GPTD3, &gpt3cfg);
|
gptStart(&GPTD3, &gpt3cfg);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Initializes the mailboxes and creates the worker threads.
|
* Initializes the mailboxes and creates the worker threads.
|
||||||
*/
|
*/
|
||||||
for (i = 0; i < NUM_THREADS; i++) {
|
for (i = 0; i < NUM_THREADS; i++) {
|
||||||
chMBInit(&mb[i], b[i], MAILBOX_SIZE);
|
chMBObjectInit(&mb[i], b[i], MAILBOX_SIZE);
|
||||||
chThdCreateStatic(waWorkerThread[i], sizeof waWorkerThread[i],
|
chThdCreateStatic(waWorkerThread[i], sizeof waWorkerThread[i],
|
||||||
NORMALPRIO - 20, WorkerThread, (void *)i);
|
NORMALPRIO - 20, WorkerThread, (void *)i);
|
||||||
}
|
}
|
||||||
|
@ -239,19 +243,19 @@ int main(void) {
|
||||||
println(CH_KERNEL_VERSION);
|
println(CH_KERNEL_VERSION);
|
||||||
print("*** Compiled: ");
|
print("*** Compiled: ");
|
||||||
println(__DATE__ " - " __TIME__);
|
println(__DATE__ " - " __TIME__);
|
||||||
#ifdef CH_COMPILER_NAME
|
#ifdef PORT_COMPILER_NAME
|
||||||
print("*** Compiler: ");
|
print("*** Compiler: ");
|
||||||
println(CH_COMPILER_NAME);
|
println(PORT_COMPILER_NAME);
|
||||||
#endif
|
#endif
|
||||||
print("*** Architecture: ");
|
print("*** Architecture: ");
|
||||||
println(CH_ARCHITECTURE_NAME);
|
println(PORT_ARCHITECTURE_NAME);
|
||||||
#ifdef CH_CORE_VARIANT_NAME
|
#ifdef PORT_CORE_VARIANT_NAME
|
||||||
print("*** Core Variant: ");
|
print("*** Core Variant: ");
|
||||||
println(CH_CORE_VARIANT_NAME);
|
println(PORT_CORE_VARIANT_NAME);
|
||||||
#endif
|
#endif
|
||||||
#ifdef CH_PORT_INFO
|
#ifdef PORT_INFO
|
||||||
print("*** Port Info: ");
|
print("*** Port Info: ");
|
||||||
println(CH_PORT_INFO);
|
println(PORT_INFO);
|
||||||
#endif
|
#endif
|
||||||
#ifdef PLATFORM_NAME
|
#ifdef PLATFORM_NAME
|
||||||
print("*** Platform: ");
|
print("*** Platform: ");
|
||||||
|
@ -286,11 +290,11 @@ int main(void) {
|
||||||
println("");
|
println("");
|
||||||
saturated = FALSE;
|
saturated = FALSE;
|
||||||
threshold = 0;
|
threshold = 0;
|
||||||
for (interval = 2000; interval >= 20; interval -= interval / 10) {
|
for (interval = 2000; interval >= 10; interval -= interval / 10) {
|
||||||
gptStartContinuous(&GPTD2, interval - 1); /* Slightly out of phase.*/
|
gptStartContinuous(&GPTD4, interval - 1); /* Slightly out of phase.*/
|
||||||
gptStartContinuous(&GPTD3, interval + 1); /* Slightly out of phase.*/
|
gptStartContinuous(&GPTD3, interval + 1); /* Slightly out of phase.*/
|
||||||
chThdSleepMilliseconds(1000);
|
chThdSleepMilliseconds(1000);
|
||||||
gptStopTimer(&GPTD2);
|
gptStopTimer(&GPTD4);
|
||||||
gptStopTimer(&GPTD3);
|
gptStopTimer(&GPTD3);
|
||||||
if (!saturated)
|
if (!saturated)
|
||||||
print(".");
|
print(".");
|
||||||
|
@ -311,7 +315,7 @@ int main(void) {
|
||||||
if (threshold > worst)
|
if (threshold > worst)
|
||||||
worst = threshold;
|
worst = threshold;
|
||||||
}
|
}
|
||||||
gptStopTimer(&GPTD2);
|
gptStopTimer(&GPTD4);
|
||||||
gptStopTimer(&GPTD3);
|
gptStopTimer(&GPTD3);
|
||||||
|
|
||||||
print("Worst case at ");
|
print("Worst case at ");
|
||||||
|
@ -326,5 +330,4 @@ int main(void) {
|
||||||
while (TRUE) {
|
while (TRUE) {
|
||||||
chThdSleepMilliseconds(5000);
|
chThdSleepMilliseconds(5000);
|
||||||
}
|
}
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -84,24 +84,24 @@
|
||||||
/*
|
/*
|
||||||
* GPT driver system settings.
|
* GPT driver system settings.
|
||||||
*/
|
*/
|
||||||
#define STM32_GPT_USE_TIM2 TRUE
|
#define STM32_GPT_USE_TIM2 FALSE
|
||||||
#define STM32_GPT_USE_TIM3 TRUE
|
#define STM32_GPT_USE_TIM3 TRUE
|
||||||
#define STM32_GPT_USE_TIM4 FALSE
|
#define STM32_GPT_USE_TIM4 TRUE
|
||||||
#define STM32_GPT_TIM2_IRQ_PRIORITY 6
|
#define STM32_GPT_TIM2_IRQ_PRIORITY 7
|
||||||
#define STM32_GPT_TIM3_IRQ_PRIORITY 10
|
#define STM32_GPT_TIM3_IRQ_PRIORITY 10
|
||||||
#define STM32_GPT_TIM4_IRQ_PRIORITY 7
|
#define STM32_GPT_TIM4_IRQ_PRIORITY 6
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* I2C driver system settings.
|
* I2C driver system settings.
|
||||||
*/
|
*/
|
||||||
#define STM32_I2C_USE_I2C1 FALSE
|
#define STM32_I2C_USE_I2C1 FALSE
|
||||||
#define STM32_I2C_USE_I2C2 FALSE
|
#define STM32_I2C_USE_I2C2 FALSE
|
||||||
|
#define STM32_I2C_BUSY_TIMEOUT 50
|
||||||
#define STM32_I2C_I2C1_IRQ_PRIORITY 5
|
#define STM32_I2C_I2C1_IRQ_PRIORITY 5
|
||||||
#define STM32_I2C_I2C2_IRQ_PRIORITY 5
|
#define STM32_I2C_I2C2_IRQ_PRIORITY 5
|
||||||
#define STM32_I2C_I2C1_DMA_PRIORITY 3
|
#define STM32_I2C_I2C1_DMA_PRIORITY 3
|
||||||
#define STM32_I2C_I2C2_DMA_PRIORITY 3
|
#define STM32_I2C_I2C2_DMA_PRIORITY 3
|
||||||
#define STM32_I2C_I2C1_DMA_ERROR_HOOK() chSysHalt()
|
#define STM32_I2C_DMA_ERROR_HOOK(i2cp) osalSysHalt("DMA failure")
|
||||||
#define STM32_I2C_I2C2_DMA_ERROR_HOOK() chSysHalt()
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* ICU driver system settings.
|
* ICU driver system settings.
|
||||||
|
@ -146,7 +146,13 @@
|
||||||
#define STM32_SPI_SPI2_DMA_PRIORITY 1
|
#define STM32_SPI_SPI2_DMA_PRIORITY 1
|
||||||
#define STM32_SPI_SPI1_IRQ_PRIORITY 10
|
#define STM32_SPI_SPI1_IRQ_PRIORITY 10
|
||||||
#define STM32_SPI_SPI2_IRQ_PRIORITY 10
|
#define STM32_SPI_SPI2_IRQ_PRIORITY 10
|
||||||
#define STM32_SPI_DMA_ERROR_HOOK(spip) chSysHalt()
|
#define STM32_SPI_DMA_ERROR_HOOK(spip) osalSysHalt("DMA failure")
|
||||||
|
|
||||||
|
/*
|
||||||
|
* ST driver system settings.
|
||||||
|
*/
|
||||||
|
#define STM32_ST_IRQ_PRIORITY 8
|
||||||
|
#define STM32_ST_USE_TIMER 2
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* UART driver system settings.
|
* UART driver system settings.
|
||||||
|
@ -160,12 +166,12 @@
|
||||||
#define STM32_UART_USART1_DMA_PRIORITY 0
|
#define STM32_UART_USART1_DMA_PRIORITY 0
|
||||||
#define STM32_UART_USART2_DMA_PRIORITY 0
|
#define STM32_UART_USART2_DMA_PRIORITY 0
|
||||||
#define STM32_UART_USART3_DMA_PRIORITY 0
|
#define STM32_UART_USART3_DMA_PRIORITY 0
|
||||||
#define STM32_UART_DMA_ERROR_HOOK(uartp) chSysHalt()
|
#define STM32_UART_DMA_ERROR_HOOK(uartp) osalSysHalt("DMA failure")
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* USB driver system settings.
|
* USB driver system settings.
|
||||||
*/
|
*/
|
||||||
#define STM32_USB_USE_USB1 TRUE
|
#define STM32_USB_USE_USB1 FALSE
|
||||||
#define STM32_USB_LOW_POWER_ON_SUSPEND FALSE
|
#define STM32_USB_LOW_POWER_ON_SUSPEND FALSE
|
||||||
#define STM32_USB_USB1_HP_IRQ_PRIORITY 13
|
#define STM32_USB_USB1_HP_IRQ_PRIORITY 13
|
||||||
#define STM32_USB_USB1_LP_IRQ_PRIORITY 14
|
#define STM32_USB_USB1_LP_IRQ_PRIORITY 14
|
||||||
|
|
|
@ -24,11 +24,6 @@
|
||||||
<nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
|
<nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
|
||||||
</natures>
|
</natures>
|
||||||
<linkedResources>
|
<linkedResources>
|
||||||
<link>
|
|
||||||
<name>board</name>
|
|
||||||
<type>2</type>
|
|
||||||
<locationURI>CHIBIOS/boards/ST_STM32L_DISCOVERY</locationURI>
|
|
||||||
</link>
|
|
||||||
<link>
|
<link>
|
||||||
<name>os</name>
|
<name>os</name>
|
||||||
<type>2</type>
|
<type>2</type>
|
||||||
|
|
|
@ -23,6 +23,11 @@ ifeq ($(USE_LINK_GC),)
|
||||||
USE_LINK_GC = yes
|
USE_LINK_GC = yes
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
# Enable this if you want link time optimizations (LTO)
|
||||||
|
ifeq ($(USE_LTO),)
|
||||||
|
USE_LTO = yes
|
||||||
|
endif
|
||||||
|
|
||||||
# If enabled, this option allows to compile the application in THUMB mode.
|
# If enabled, this option allows to compile the application in THUMB mode.
|
||||||
ifeq ($(USE_THUMB),)
|
ifeq ($(USE_THUMB),)
|
||||||
USE_THUMB = yes
|
USE_THUMB = yes
|
||||||
|
@ -41,9 +46,16 @@ endif
|
||||||
# Architecture or project specific options
|
# Architecture or project specific options
|
||||||
#
|
#
|
||||||
|
|
||||||
# Enable this if you really want to use the STM FWLib.
|
# Stack size to be allocated to the Cortex-M process stack. This stack is
|
||||||
ifeq ($(USE_FWLIB),)
|
# the stack used by the main() thread.
|
||||||
USE_FWLIB = no
|
ifeq ($(USE_PROCESS_STACKSIZE),)
|
||||||
|
USE_PROCESS_STACKSIZE = 0x400
|
||||||
|
endif
|
||||||
|
|
||||||
|
# Stack size to the allocated to the Cortex-M main/exceptions stack. This
|
||||||
|
# stack is used for processing interrupts and exceptions.
|
||||||
|
ifeq ($(USE_EXCEPTIONS_STACKSIZE),)
|
||||||
|
USE_EXCEPTIONS_STACKSIZE = 0x400
|
||||||
endif
|
endif
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -59,11 +71,12 @@ PROJECT = ch
|
||||||
|
|
||||||
# Imported source files and paths
|
# Imported source files and paths
|
||||||
CHIBIOS = ../../..
|
CHIBIOS = ../../..
|
||||||
include $(CHIBIOS)/boards/ST_STM32L_DISCOVERY/board.mk
|
|
||||||
include $(CHIBIOS)/os/hal/platforms/STM32L1xx/platform.mk
|
|
||||||
include $(CHIBIOS)/os/hal/hal.mk
|
include $(CHIBIOS)/os/hal/hal.mk
|
||||||
include $(CHIBIOS)/os/ports/GCC/ARMCMx/STM32L1xx/port.mk
|
include $(CHIBIOS)/os/hal/boards/ST_STM32L_DISCOVERY/board.mk
|
||||||
include $(CHIBIOS)/os/kernel/kernel.mk
|
include $(CHIBIOS)/os/hal/ports/STM32L1xx/platform.mk
|
||||||
|
include $(CHIBIOS)/os/rt/rt.mk
|
||||||
|
include $(CHIBIOS)/os/rt/osal/osal.mk
|
||||||
|
include $(CHIBIOS)/os/rt/ports/ARMCMx/compilers/GCC/mk/port_stm32l1xx.mk
|
||||||
#include $(CHIBIOS)/test/test.mk
|
#include $(CHIBIOS)/test/test.mk
|
||||||
|
|
||||||
# Define linker script file here
|
# Define linker script file here
|
||||||
|
@ -75,6 +88,7 @@ CSRC = $(PORTSRC) \
|
||||||
$(KERNSRC) \
|
$(KERNSRC) \
|
||||||
$(TESTSRC) \
|
$(TESTSRC) \
|
||||||
$(HALSRC) \
|
$(HALSRC) \
|
||||||
|
$(OSALSRC) \
|
||||||
$(PLATFORMSRC) \
|
$(PLATFORMSRC) \
|
||||||
$(BOARDSRC) \
|
$(BOARDSRC) \
|
||||||
main.c
|
main.c
|
||||||
|
@ -107,7 +121,7 @@ TCPPSRC =
|
||||||
ASMSRC = $(PORTASM)
|
ASMSRC = $(PORTASM)
|
||||||
|
|
||||||
INCDIR = $(PORTINC) $(KERNINC) $(TESTINC) \
|
INCDIR = $(PORTINC) $(KERNINC) $(TESTINC) \
|
||||||
$(HALINC) $(PLATFORMINC) $(BOARDINC) \
|
$(HALINC) $(OSALINC) $(PLATFORMINC) $(BOARDINC) \
|
||||||
$(CHIBIOS)/os/various
|
$(CHIBIOS)/os/various
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -132,6 +146,7 @@ LD = $(TRGT)gcc
|
||||||
CP = $(TRGT)objcopy
|
CP = $(TRGT)objcopy
|
||||||
AS = $(TRGT)gcc -x assembler-with-cpp
|
AS = $(TRGT)gcc -x assembler-with-cpp
|
||||||
OD = $(TRGT)objdump
|
OD = $(TRGT)objdump
|
||||||
|
SZ = $(TRGT)size
|
||||||
HEX = $(CP) -O ihex
|
HEX = $(CP) -O ihex
|
||||||
BIN = $(CP) -O binary
|
BIN = $(CP) -O binary
|
||||||
|
|
||||||
|
@ -151,29 +166,6 @@ CPPWARN = -Wall -Wextra
|
||||||
# Compiler settings
|
# Compiler settings
|
||||||
##############################################################################
|
##############################################################################
|
||||||
|
|
||||||
##############################################################################
|
|
||||||
# Start of default section
|
|
||||||
#
|
|
||||||
|
|
||||||
# List all default C defines here, like -D_DEBUG=1
|
|
||||||
DDEFS =
|
|
||||||
|
|
||||||
# List all default ASM defines here, like -D_DEBUG=1
|
|
||||||
DADEFS =
|
|
||||||
|
|
||||||
# List all default directories to look for include files here
|
|
||||||
DINCDIR =
|
|
||||||
|
|
||||||
# List the default directory to look for the libraries here
|
|
||||||
DLIBDIR =
|
|
||||||
|
|
||||||
# List all default libraries here
|
|
||||||
DLIBS =
|
|
||||||
|
|
||||||
#
|
|
||||||
# End of default section
|
|
||||||
##############################################################################
|
|
||||||
|
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# Start of user section
|
# Start of user section
|
||||||
#
|
#
|
||||||
|
@ -197,11 +189,5 @@ ULIBS =
|
||||||
# End of user defines
|
# End of user defines
|
||||||
##############################################################################
|
##############################################################################
|
||||||
|
|
||||||
ifeq ($(USE_FWLIB),yes)
|
RULESPATH = $(CHIBIOS)/os/common/ports/ARMCMx/compilers/GCC
|
||||||
include $(CHIBIOS)/ext/stm32lib/stm32lib.mk
|
include $(RULESPATH)/rules.mk
|
||||||
CSRC += $(STM32SRC)
|
|
||||||
INCDIR += $(STM32INC)
|
|
||||||
USE_OPT += -DUSE_STDPERIPH_DRIVER
|
|
||||||
endif
|
|
||||||
|
|
||||||
include $(CHIBIOS)/os/ports/GCC/ARMCMx/rules.mk
|
|
||||||
|
|
|
@ -30,19 +30,49 @@
|
||||||
|
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
/**
|
/**
|
||||||
* @name Kernel parameters and options
|
* @name System timers settings
|
||||||
* @{
|
* @{
|
||||||
*/
|
*/
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief System time counter resolution.
|
||||||
|
* @note Allowed values are 16 or 32 bits.
|
||||||
|
*/
|
||||||
|
#define CH_CFG_ST_RESOLUTION 16
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief System tick frequency.
|
* @brief System tick frequency.
|
||||||
* @details Frequency of the system timer that drives the system ticks. This
|
* @details Frequency of the system timer that drives the system ticks. This
|
||||||
* setting also defines the system tick time unit.
|
* setting also defines the system tick time unit.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_FREQUENCY) || defined(__DOXYGEN__)
|
#define CH_CFG_ST_FREQUENCY 1000
|
||||||
#define CH_FREQUENCY 1000
|
|
||||||
#endif
|
/**
|
||||||
|
* @brief Time delta constant for the tick-less mode.
|
||||||
|
* @note If this value is zero then the system uses the classic
|
||||||
|
* periodic tick. This value represents the minimum number
|
||||||
|
* of ticks that is safe to specify in a timeout directive.
|
||||||
|
* The value one is not valid, timeouts are rounded up to
|
||||||
|
* this value.
|
||||||
|
*/
|
||||||
|
#define CH_CFG_ST_TIMEDELTA 2
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Realtime Counter frequency.
|
||||||
|
* @details Frequency of the system counter used for realtime delays and
|
||||||
|
* measurements.
|
||||||
|
*/
|
||||||
|
#define CH_CFG_RTC_FREQUENCY 72000000
|
||||||
|
|
||||||
|
/** @} */
|
||||||
|
|
||||||
|
/*===========================================================================*/
|
||||||
|
/**
|
||||||
|
* @name Kernel parameters and options
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
/*===========================================================================*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Round robin interval.
|
* @brief Round robin interval.
|
||||||
|
@ -51,13 +81,12 @@
|
||||||
* disables the preemption for threads with equal priority and the
|
* disables the preemption for threads with equal priority and the
|
||||||
* round robin becomes cooperative. Note that higher priority
|
* round robin becomes cooperative. Note that higher priority
|
||||||
* threads can still preempt, the kernel is always preemptive.
|
* threads can still preempt, the kernel is always preemptive.
|
||||||
*
|
|
||||||
* @note Disabling the round robin preemption makes the kernel more compact
|
* @note Disabling the round robin preemption makes the kernel more compact
|
||||||
* and generally faster.
|
* and generally faster.
|
||||||
|
* @note The round robin preemption is not supported in tickless mode and
|
||||||
|
* must be set to zero in that case.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_TIME_QUANTUM) || defined(__DOXYGEN__)
|
#define CH_CFG_TIME_QUANTUM 0
|
||||||
#define CH_TIME_QUANTUM 20
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Managed RAM size.
|
* @brief Managed RAM size.
|
||||||
|
@ -68,28 +97,17 @@
|
||||||
*
|
*
|
||||||
* @note In order to let the OS manage the whole RAM the linker script must
|
* @note In order to let the OS manage the whole RAM the linker script must
|
||||||
* provide the @p __heap_base__ and @p __heap_end__ symbols.
|
* provide the @p __heap_base__ and @p __heap_end__ symbols.
|
||||||
* @note Requires @p CH_USE_MEMCORE.
|
* @note Requires @p CH_CFG_USE_MEMCORE.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_MEMCORE_SIZE) || defined(__DOXYGEN__)
|
#define CH_CFG_MEMCORE_SIZE 0
|
||||||
#define CH_MEMCORE_SIZE 0
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Idle thread automatic spawn suppression.
|
* @brief Idle thread automatic spawn suppression.
|
||||||
* @details When this option is activated the function @p chSysInit()
|
* @details When this option is activated the function @p chSysInit()
|
||||||
* does not spawn the idle thread automatically. The application has
|
* does not spawn the idle thread. The application @p main()
|
||||||
* then the responsibility to do one of the following:
|
* function becomes the idle thread and must implement an
|
||||||
* - Spawn a custom idle thread at priority @p IDLEPRIO.
|
* infinite loop. */
|
||||||
* - Change the main() thread priority to @p IDLEPRIO then enter
|
#define CH_CFG_NO_IDLE_THREAD FALSE
|
||||||
* an endless loop. In this scenario the @p main() thread acts as
|
|
||||||
* the idle thread.
|
|
||||||
* .
|
|
||||||
* @note Unless an idle thread is spawned the @p main() thread must not
|
|
||||||
* enter a sleep state.
|
|
||||||
*/
|
|
||||||
#if !defined(CH_NO_IDLE_THREAD) || defined(__DOXYGEN__)
|
|
||||||
#define CH_NO_IDLE_THREAD FALSE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/** @} */
|
/** @} */
|
||||||
|
|
||||||
|
@ -108,9 +126,7 @@
|
||||||
* @note This is not related to the compiler optimization options.
|
* @note This is not related to the compiler optimization options.
|
||||||
* @note The default is @p TRUE.
|
* @note The default is @p TRUE.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_OPTIMIZE_SPEED) || defined(__DOXYGEN__)
|
#define CH_CFG_OPTIMIZE_SPEED TRUE
|
||||||
#define CH_OPTIMIZE_SPEED TRUE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/** @} */
|
/** @} */
|
||||||
|
|
||||||
|
@ -121,15 +137,22 @@
|
||||||
*/
|
*/
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Time Measurement APIs.
|
||||||
|
* @details If enabled then the time measurement APIs are included in
|
||||||
|
* the kernel.
|
||||||
|
*
|
||||||
|
* @note The default is @p TRUE.
|
||||||
|
*/
|
||||||
|
#define CH_CFG_USE_TM TRUE
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Threads registry APIs.
|
* @brief Threads registry APIs.
|
||||||
* @details If enabled then the registry APIs are included in the kernel.
|
* @details If enabled then the registry APIs are included in the kernel.
|
||||||
*
|
*
|
||||||
* @note The default is @p TRUE.
|
* @note The default is @p TRUE.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_USE_REGISTRY) || defined(__DOXYGEN__)
|
#define CH_CFG_USE_REGISTRY TRUE
|
||||||
#define CH_USE_REGISTRY TRUE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Threads synchronization APIs.
|
* @brief Threads synchronization APIs.
|
||||||
|
@ -138,9 +161,7 @@
|
||||||
*
|
*
|
||||||
* @note The default is @p TRUE.
|
* @note The default is @p TRUE.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_USE_WAITEXIT) || defined(__DOXYGEN__)
|
#define CH_CFG_USE_WAITEXIT TRUE
|
||||||
#define CH_USE_WAITEXIT TRUE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Semaphores APIs.
|
* @brief Semaphores APIs.
|
||||||
|
@ -148,33 +169,18 @@
|
||||||
*
|
*
|
||||||
* @note The default is @p TRUE.
|
* @note The default is @p TRUE.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_USE_SEMAPHORES) || defined(__DOXYGEN__)
|
#define CH_CFG_USE_SEMAPHORES TRUE
|
||||||
#define CH_USE_SEMAPHORES TRUE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Semaphores queuing mode.
|
* @brief Semaphores queuing mode.
|
||||||
* @details If enabled then the threads are enqueued on semaphores by
|
* @details If enabled then the threads are enqueued on semaphores by
|
||||||
* priority rather than in FIFO order.
|
* priority rather than in FIFO order.
|
||||||
*
|
*
|
||||||
* @note The default is @p FALSE. Enable this if you have special requirements.
|
* @note The default is @p FALSE. Enable this if you have special
|
||||||
* @note Requires @p CH_USE_SEMAPHORES.
|
* requirements.
|
||||||
|
* @note Requires @p CH_CFG_USE_SEMAPHORES.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_USE_SEMAPHORES_PRIORITY) || defined(__DOXYGEN__)
|
#define CH_CFG_USE_SEMAPHORES_PRIORITY FALSE
|
||||||
#define CH_USE_SEMAPHORES_PRIORITY FALSE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Atomic semaphore API.
|
|
||||||
* @details If enabled then the semaphores the @p chSemSignalWait() API
|
|
||||||
* is included in the kernel.
|
|
||||||
*
|
|
||||||
* @note The default is @p TRUE.
|
|
||||||
* @note Requires @p CH_USE_SEMAPHORES.
|
|
||||||
*/
|
|
||||||
#if !defined(CH_USE_SEMSW) || defined(__DOXYGEN__)
|
|
||||||
#define CH_USE_SEMSW TRUE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Mutexes APIs.
|
* @brief Mutexes APIs.
|
||||||
|
@ -182,9 +188,7 @@
|
||||||
*
|
*
|
||||||
* @note The default is @p TRUE.
|
* @note The default is @p TRUE.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_USE_MUTEXES) || defined(__DOXYGEN__)
|
#define CH_CFG_USE_MUTEXES TRUE
|
||||||
#define CH_USE_MUTEXES TRUE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Conditional Variables APIs.
|
* @brief Conditional Variables APIs.
|
||||||
|
@ -192,11 +196,9 @@
|
||||||
* in the kernel.
|
* in the kernel.
|
||||||
*
|
*
|
||||||
* @note The default is @p TRUE.
|
* @note The default is @p TRUE.
|
||||||
* @note Requires @p CH_USE_MUTEXES.
|
* @note Requires @p CH_CFG_USE_MUTEXES.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_USE_CONDVARS) || defined(__DOXYGEN__)
|
#define CH_CFG_USE_CONDVARS TRUE
|
||||||
#define CH_USE_CONDVARS TRUE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Conditional Variables APIs with timeout.
|
* @brief Conditional Variables APIs with timeout.
|
||||||
|
@ -204,11 +206,9 @@
|
||||||
* specification are included in the kernel.
|
* specification are included in the kernel.
|
||||||
*
|
*
|
||||||
* @note The default is @p TRUE.
|
* @note The default is @p TRUE.
|
||||||
* @note Requires @p CH_USE_CONDVARS.
|
* @note Requires @p CH_CFG_USE_CONDVARS.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_USE_CONDVARS_TIMEOUT) || defined(__DOXYGEN__)
|
#define CH_CFG_USE_CONDVARS_TIMEOUT TRUE
|
||||||
#define CH_USE_CONDVARS_TIMEOUT TRUE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Events Flags APIs.
|
* @brief Events Flags APIs.
|
||||||
|
@ -216,9 +216,7 @@
|
||||||
*
|
*
|
||||||
* @note The default is @p TRUE.
|
* @note The default is @p TRUE.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_USE_EVENTS) || defined(__DOXYGEN__)
|
#define CH_CFG_USE_EVENTS TRUE
|
||||||
#define CH_USE_EVENTS TRUE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Events Flags APIs with timeout.
|
* @brief Events Flags APIs with timeout.
|
||||||
|
@ -226,11 +224,9 @@
|
||||||
* are included in the kernel.
|
* are included in the kernel.
|
||||||
*
|
*
|
||||||
* @note The default is @p TRUE.
|
* @note The default is @p TRUE.
|
||||||
* @note Requires @p CH_USE_EVENTS.
|
* @note Requires @p CH_CFG_USE_EVENTS.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_USE_EVENTS_TIMEOUT) || defined(__DOXYGEN__)
|
#define CH_CFG_USE_EVENTS_TIMEOUT TRUE
|
||||||
#define CH_USE_EVENTS_TIMEOUT TRUE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Synchronous Messages APIs.
|
* @brief Synchronous Messages APIs.
|
||||||
|
@ -239,21 +235,18 @@
|
||||||
*
|
*
|
||||||
* @note The default is @p TRUE.
|
* @note The default is @p TRUE.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_USE_MESSAGES) || defined(__DOXYGEN__)
|
#define CH_CFG_USE_MESSAGES TRUE
|
||||||
#define CH_USE_MESSAGES TRUE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Synchronous Messages queuing mode.
|
* @brief Synchronous Messages queuing mode.
|
||||||
* @details If enabled then messages are served by priority rather than in
|
* @details If enabled then messages are served by priority rather than in
|
||||||
* FIFO order.
|
* FIFO order.
|
||||||
*
|
*
|
||||||
* @note The default is @p FALSE. Enable this if you have special requirements.
|
* @note The default is @p FALSE. Enable this if you have special
|
||||||
* @note Requires @p CH_USE_MESSAGES.
|
* requirements.
|
||||||
|
* @note Requires @p CH_CFG_USE_MESSAGES.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_USE_MESSAGES_PRIORITY) || defined(__DOXYGEN__)
|
#define CH_CFG_USE_MESSAGES_PRIORITY FALSE
|
||||||
#define CH_USE_MESSAGES_PRIORITY FALSE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Mailboxes APIs.
|
* @brief Mailboxes APIs.
|
||||||
|
@ -261,11 +254,9 @@
|
||||||
* included in the kernel.
|
* included in the kernel.
|
||||||
*
|
*
|
||||||
* @note The default is @p TRUE.
|
* @note The default is @p TRUE.
|
||||||
* @note Requires @p CH_USE_SEMAPHORES.
|
* @note Requires @p CH_CFG_USE_SEMAPHORES.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_USE_MAILBOXES) || defined(__DOXYGEN__)
|
#define CH_CFG_USE_MAILBOXES TRUE
|
||||||
#define CH_USE_MAILBOXES TRUE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief I/O Queues APIs.
|
* @brief I/O Queues APIs.
|
||||||
|
@ -273,9 +264,7 @@
|
||||||
*
|
*
|
||||||
* @note The default is @p TRUE.
|
* @note The default is @p TRUE.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_USE_QUEUES) || defined(__DOXYGEN__)
|
#define CH_CFG_USE_QUEUES TRUE
|
||||||
#define CH_USE_QUEUES TRUE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Core Memory Manager APIs.
|
* @brief Core Memory Manager APIs.
|
||||||
|
@ -284,9 +273,7 @@
|
||||||
*
|
*
|
||||||
* @note The default is @p TRUE.
|
* @note The default is @p TRUE.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_USE_MEMCORE) || defined(__DOXYGEN__)
|
#define CH_CFG_USE_MEMCORE TRUE
|
||||||
#define CH_USE_MEMCORE TRUE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Heap Allocator APIs.
|
* @brief Heap Allocator APIs.
|
||||||
|
@ -294,27 +281,11 @@
|
||||||
* in the kernel.
|
* in the kernel.
|
||||||
*
|
*
|
||||||
* @note The default is @p TRUE.
|
* @note The default is @p TRUE.
|
||||||
* @note Requires @p CH_USE_MEMCORE and either @p CH_USE_MUTEXES or
|
* @note Requires @p CH_CFG_USE_MEMCORE and either @p CH_CFG_USE_MUTEXES or
|
||||||
* @p CH_USE_SEMAPHORES.
|
* @p CH_CFG_USE_SEMAPHORES.
|
||||||
* @note Mutexes are recommended.
|
* @note Mutexes are recommended.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_USE_HEAP) || defined(__DOXYGEN__)
|
#define CH_CFG_USE_HEAP TRUE
|
||||||
#define CH_USE_HEAP TRUE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief C-runtime allocator.
|
|
||||||
* @details If enabled the the heap allocator APIs just wrap the C-runtime
|
|
||||||
* @p malloc() and @p free() functions.
|
|
||||||
*
|
|
||||||
* @note The default is @p FALSE.
|
|
||||||
* @note Requires @p CH_USE_HEAP.
|
|
||||||
* @note The C-runtime may or may not require @p CH_USE_MEMCORE, see the
|
|
||||||
* appropriate documentation.
|
|
||||||
*/
|
|
||||||
#if !defined(CH_USE_MALLOC_HEAP) || defined(__DOXYGEN__)
|
|
||||||
#define CH_USE_MALLOC_HEAP FALSE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Memory Pools Allocator APIs.
|
* @brief Memory Pools Allocator APIs.
|
||||||
|
@ -323,9 +294,7 @@
|
||||||
*
|
*
|
||||||
* @note The default is @p TRUE.
|
* @note The default is @p TRUE.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_USE_MEMPOOLS) || defined(__DOXYGEN__)
|
#define CH_CFG_USE_MEMPOOLS TRUE
|
||||||
#define CH_USE_MEMPOOLS TRUE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Dynamic Threads APIs.
|
* @brief Dynamic Threads APIs.
|
||||||
|
@ -333,12 +302,10 @@
|
||||||
* in the kernel.
|
* in the kernel.
|
||||||
*
|
*
|
||||||
* @note The default is @p TRUE.
|
* @note The default is @p TRUE.
|
||||||
* @note Requires @p CH_USE_WAITEXIT.
|
* @note Requires @p CH_CFG_USE_WAITEXIT.
|
||||||
* @note Requires @p CH_USE_HEAP and/or @p CH_USE_MEMPOOLS.
|
* @note Requires @p CH_CFG_USE_HEAP and/or @p CH_CFG_USE_MEMPOOLS.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_USE_DYNAMIC) || defined(__DOXYGEN__)
|
#define CH_CFG_USE_DYNAMIC TRUE
|
||||||
#define CH_USE_DYNAMIC TRUE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/** @} */
|
/** @} */
|
||||||
|
|
||||||
|
@ -349,6 +316,13 @@
|
||||||
*/
|
*/
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Debug option, kernel statistics.
|
||||||
|
*
|
||||||
|
* @note The default is @p FALSE.
|
||||||
|
*/
|
||||||
|
#define CH_DBG_STATISTICS TRUE
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Debug option, system state check.
|
* @brief Debug option, system state check.
|
||||||
* @details If enabled the correct call protocol for system APIs is checked
|
* @details If enabled the correct call protocol for system APIs is checked
|
||||||
|
@ -356,9 +330,7 @@
|
||||||
*
|
*
|
||||||
* @note The default is @p FALSE.
|
* @note The default is @p FALSE.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_DBG_SYSTEM_STATE_CHECK) || defined(__DOXYGEN__)
|
|
||||||
#define CH_DBG_SYSTEM_STATE_CHECK TRUE
|
#define CH_DBG_SYSTEM_STATE_CHECK TRUE
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Debug option, parameters checks.
|
* @brief Debug option, parameters checks.
|
||||||
|
@ -367,9 +339,7 @@
|
||||||
*
|
*
|
||||||
* @note The default is @p FALSE.
|
* @note The default is @p FALSE.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_DBG_ENABLE_CHECKS) || defined(__DOXYGEN__)
|
|
||||||
#define CH_DBG_ENABLE_CHECKS TRUE
|
#define CH_DBG_ENABLE_CHECKS TRUE
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Debug option, consistency checks.
|
* @brief Debug option, consistency checks.
|
||||||
|
@ -379,9 +349,7 @@
|
||||||
*
|
*
|
||||||
* @note The default is @p FALSE.
|
* @note The default is @p FALSE.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_DBG_ENABLE_ASSERTS) || defined(__DOXYGEN__)
|
|
||||||
#define CH_DBG_ENABLE_ASSERTS TRUE
|
#define CH_DBG_ENABLE_ASSERTS TRUE
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Debug option, trace buffer.
|
* @brief Debug option, trace buffer.
|
||||||
|
@ -390,9 +358,7 @@
|
||||||
*
|
*
|
||||||
* @note The default is @p FALSE.
|
* @note The default is @p FALSE.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_DBG_ENABLE_TRACE) || defined(__DOXYGEN__)
|
|
||||||
#define CH_DBG_ENABLE_TRACE TRUE
|
#define CH_DBG_ENABLE_TRACE TRUE
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Debug option, stack checks.
|
* @brief Debug option, stack checks.
|
||||||
|
@ -404,9 +370,7 @@
|
||||||
* @note The default failure mode is to halt the system with the global
|
* @note The default failure mode is to halt the system with the global
|
||||||
* @p panic_msg variable set to @p NULL.
|
* @p panic_msg variable set to @p NULL.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_DBG_ENABLE_STACK_CHECK) || defined(__DOXYGEN__)
|
|
||||||
#define CH_DBG_ENABLE_STACK_CHECK TRUE
|
#define CH_DBG_ENABLE_STACK_CHECK TRUE
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Debug option, stacks initialization.
|
* @brief Debug option, stacks initialization.
|
||||||
|
@ -416,22 +380,18 @@
|
||||||
*
|
*
|
||||||
* @note The default is @p FALSE.
|
* @note The default is @p FALSE.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_DBG_FILL_THREADS) || defined(__DOXYGEN__)
|
|
||||||
#define CH_DBG_FILL_THREADS TRUE
|
#define CH_DBG_FILL_THREADS TRUE
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Debug option, threads profiling.
|
* @brief Debug option, threads profiling.
|
||||||
* @details If enabled then a field is added to the @p Thread structure that
|
* @details If enabled then a field is added to the @p thread_t structure that
|
||||||
* counts the system ticks occurred while executing the thread.
|
* counts the system ticks occurred while executing the thread.
|
||||||
*
|
*
|
||||||
* @note The default is @p TRUE.
|
* @note The default is @p FALSE.
|
||||||
* @note This debug option is defaulted to TRUE because it is required by
|
* @note This debug option is not currently compatible with the
|
||||||
* some test cases into the test suite.
|
* tickless mode.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_DBG_THREADS_PROFILING) || defined(__DOXYGEN__)
|
#define CH_DBG_THREADS_PROFILING FALSE
|
||||||
#define CH_DBG_THREADS_PROFILING TRUE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/** @} */
|
/** @} */
|
||||||
|
|
||||||
|
@ -444,12 +404,10 @@
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Threads descriptor structure extension.
|
* @brief Threads descriptor structure extension.
|
||||||
* @details User fields added to the end of the @p Thread structure.
|
* @details User fields added to the end of the @p thread_t structure.
|
||||||
*/
|
*/
|
||||||
#if !defined(THREAD_EXT_FIELDS) || defined(__DOXYGEN__)
|
#define CH_CFG_THREAD_EXTRA_FIELDS \
|
||||||
#define THREAD_EXT_FIELDS \
|
|
||||||
/* Add threads custom fields here.*/
|
/* Add threads custom fields here.*/
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Threads initialization hook.
|
* @brief Threads initialization hook.
|
||||||
|
@ -458,11 +416,9 @@
|
||||||
* @note It is invoked from within @p chThdInit() and implicitly from all
|
* @note It is invoked from within @p chThdInit() and implicitly from all
|
||||||
* the threads creation APIs.
|
* the threads creation APIs.
|
||||||
*/
|
*/
|
||||||
#if !defined(THREAD_EXT_INIT_HOOK) || defined(__DOXYGEN__)
|
#define CH_CFG_THREAD_INIT_HOOK(tp) { \
|
||||||
#define THREAD_EXT_INIT_HOOK(tp) { \
|
|
||||||
/* Add threads initialization code here.*/ \
|
/* Add threads initialization code here.*/ \
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Threads finalization hook.
|
* @brief Threads finalization hook.
|
||||||
|
@ -472,53 +428,61 @@
|
||||||
* @note It is also invoked when the threads simply return in order to
|
* @note It is also invoked when the threads simply return in order to
|
||||||
* terminate.
|
* terminate.
|
||||||
*/
|
*/
|
||||||
#if !defined(THREAD_EXT_EXIT_HOOK) || defined(__DOXYGEN__)
|
#define CH_CFG_THREAD_EXIT_HOOK(tp) { \
|
||||||
#define THREAD_EXT_EXIT_HOOK(tp) { \
|
|
||||||
/* Add threads finalization code here.*/ \
|
/* Add threads finalization code here.*/ \
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Context switch hook.
|
* @brief Context switch hook.
|
||||||
* @details This hook is invoked just before switching between threads.
|
* @details This hook is invoked just before switching between threads.
|
||||||
*/
|
*/
|
||||||
#if !defined(THREAD_CONTEXT_SWITCH_HOOK) || defined(__DOXYGEN__)
|
#define CH_CFG_CONTEXT_SWITCH_HOOK(ntp, otp) { \
|
||||||
#define THREAD_CONTEXT_SWITCH_HOOK(ntp, otp) { \
|
|
||||||
/* System halt code here.*/ \
|
/* System halt code here.*/ \
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
/**
|
||||||
|
* @brief Idle thread enter hook.
|
||||||
|
* @note This hook is invoked within a critical zone, no OS functions
|
||||||
|
* should be invoked from here.
|
||||||
|
* @note This macro can be used to activate a power saving mode.
|
||||||
|
*/
|
||||||
|
#define CH_CFG_IDLE_ENTER_HOOK() { \
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Idle thread leave hook.
|
||||||
|
* @note This hook is invoked within a critical zone, no OS functions
|
||||||
|
* should be invoked from here.
|
||||||
|
* @note This macro can be used to deactivate a power saving mode.
|
||||||
|
*/
|
||||||
|
#define CH_CFG_IDLE_LEAVE_HOOK() { \
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Idle Loop hook.
|
* @brief Idle Loop hook.
|
||||||
* @details This hook is continuously invoked by the idle thread loop.
|
* @details This hook is continuously invoked by the idle thread loop.
|
||||||
*/
|
*/
|
||||||
#if !defined(IDLE_LOOP_HOOK) || defined(__DOXYGEN__)
|
#define CH_CFG_IDLE_LOOP_HOOK() { \
|
||||||
#define IDLE_LOOP_HOOK() { \
|
|
||||||
/* Idle loop code here.*/ \
|
/* Idle loop code here.*/ \
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief System tick event hook.
|
* @brief System tick event hook.
|
||||||
* @details This hook is invoked in the system tick handler immediately
|
* @details This hook is invoked in the system tick handler immediately
|
||||||
* after processing the virtual timers queue.
|
* after processing the virtual timers queue.
|
||||||
*/
|
*/
|
||||||
#if !defined(SYSTEM_TICK_EVENT_HOOK) || defined(__DOXYGEN__)
|
#define CH_CFG_SYSTEM_TICK_HOOK() { \
|
||||||
#define SYSTEM_TICK_EVENT_HOOK() { \
|
|
||||||
/* System tick event code here.*/ \
|
/* System tick event code here.*/ \
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief System halt hook.
|
* @brief System halt hook.
|
||||||
* @details This hook is invoked in case to a system halting error before
|
* @details This hook is invoked in case to a system halting error before
|
||||||
* the system is halted.
|
* the system is halted.
|
||||||
*/
|
*/
|
||||||
#if !defined(SYSTEM_HALT_HOOK) || defined(__DOXYGEN__)
|
#define CH_CFG_SYSTEM_HALT_HOOK(reason) { \
|
||||||
#define SYSTEM_HALT_HOOK() { \
|
|
||||||
/* System halt code here.*/ \
|
/* System halt code here.*/ \
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
/** @} */
|
/** @} */
|
||||||
|
|
||||||
|
|
|
@ -96,12 +96,12 @@
|
||||||
*/
|
*/
|
||||||
#define STM32_I2C_USE_I2C1 FALSE
|
#define STM32_I2C_USE_I2C1 FALSE
|
||||||
#define STM32_I2C_USE_I2C2 FALSE
|
#define STM32_I2C_USE_I2C2 FALSE
|
||||||
|
#define STM32_I2C_BUSY_TIMEOUT 50
|
||||||
#define STM32_I2C_I2C1_IRQ_PRIORITY 5
|
#define STM32_I2C_I2C1_IRQ_PRIORITY 5
|
||||||
#define STM32_I2C_I2C2_IRQ_PRIORITY 5
|
#define STM32_I2C_I2C2_IRQ_PRIORITY 5
|
||||||
#define STM32_I2C_I2C1_DMA_PRIORITY 3
|
#define STM32_I2C_I2C1_DMA_PRIORITY 3
|
||||||
#define STM32_I2C_I2C2_DMA_PRIORITY 3
|
#define STM32_I2C_I2C2_DMA_PRIORITY 3
|
||||||
#define STM32_I2C_I2C1_DMA_ERROR_HOOK() chSysHalt()
|
#define STM32_I2C_DMA_ERROR_HOOK(i2cp) osalSysHalt("DMA failure")
|
||||||
#define STM32_I2C_I2C2_DMA_ERROR_HOOK() chSysHalt()
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* ICU driver system settings.
|
* ICU driver system settings.
|
||||||
|
@ -146,7 +146,13 @@
|
||||||
#define STM32_SPI_SPI2_DMA_PRIORITY 1
|
#define STM32_SPI_SPI2_DMA_PRIORITY 1
|
||||||
#define STM32_SPI_SPI1_IRQ_PRIORITY 10
|
#define STM32_SPI_SPI1_IRQ_PRIORITY 10
|
||||||
#define STM32_SPI_SPI2_IRQ_PRIORITY 10
|
#define STM32_SPI_SPI2_IRQ_PRIORITY 10
|
||||||
#define STM32_SPI_DMA_ERROR_HOOK(spip) chSysHalt()
|
#define STM32_SPI_DMA_ERROR_HOOK(spip) osalSysHalt("DMA failure")
|
||||||
|
|
||||||
|
/*
|
||||||
|
* ST driver system settings.
|
||||||
|
*/
|
||||||
|
#define STM32_ST_IRQ_PRIORITY 8
|
||||||
|
#define STM32_ST_USE_TIMER 4
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* UART driver system settings.
|
* UART driver system settings.
|
||||||
|
@ -160,12 +166,12 @@
|
||||||
#define STM32_UART_USART1_DMA_PRIORITY 0
|
#define STM32_UART_USART1_DMA_PRIORITY 0
|
||||||
#define STM32_UART_USART2_DMA_PRIORITY 0
|
#define STM32_UART_USART2_DMA_PRIORITY 0
|
||||||
#define STM32_UART_USART3_DMA_PRIORITY 0
|
#define STM32_UART_USART3_DMA_PRIORITY 0
|
||||||
#define STM32_UART_DMA_ERROR_HOOK(uartp) chSysHalt()
|
#define STM32_UART_DMA_ERROR_HOOK(uartp) osalSysHalt("DMA failure")
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* USB driver system settings.
|
* USB driver system settings.
|
||||||
*/
|
*/
|
||||||
#define STM32_USB_USE_USB1 TRUE
|
#define STM32_USB_USE_USB1 FALSE
|
||||||
#define STM32_USB_LOW_POWER_ON_SUSPEND FALSE
|
#define STM32_USB_LOW_POWER_ON_SUSPEND FALSE
|
||||||
#define STM32_USB_USB1_HP_IRQ_PRIORITY 13
|
#define STM32_USB_USB1_HP_IRQ_PRIORITY 13
|
||||||
#define STM32_USB_USB1_LP_IRQ_PRIORITY 14
|
#define STM32_USB_USB1_LP_IRQ_PRIORITY 14
|
||||||
|
|
|
@ -24,11 +24,6 @@
|
||||||
<nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
|
<nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
|
||||||
</natures>
|
</natures>
|
||||||
<linkedResources>
|
<linkedResources>
|
||||||
<link>
|
|
||||||
<name>board</name>
|
|
||||||
<type>2</type>
|
|
||||||
<locationURI>CHIBIOS/boards/ST_STM32L_DISCOVERY</locationURI>
|
|
||||||
</link>
|
|
||||||
<link>
|
<link>
|
||||||
<name>os</name>
|
<name>os</name>
|
||||||
<type>2</type>
|
<type>2</type>
|
||||||
|
|
|
@ -23,6 +23,11 @@ ifeq ($(USE_LINK_GC),)
|
||||||
USE_LINK_GC = yes
|
USE_LINK_GC = yes
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
# Enable this if you want link time optimizations (LTO)
|
||||||
|
ifeq ($(USE_LTO),)
|
||||||
|
USE_LTO = yes
|
||||||
|
endif
|
||||||
|
|
||||||
# If enabled, this option allows to compile the application in THUMB mode.
|
# If enabled, this option allows to compile the application in THUMB mode.
|
||||||
ifeq ($(USE_THUMB),)
|
ifeq ($(USE_THUMB),)
|
||||||
USE_THUMB = yes
|
USE_THUMB = yes
|
||||||
|
@ -41,9 +46,16 @@ endif
|
||||||
# Architecture or project specific options
|
# Architecture or project specific options
|
||||||
#
|
#
|
||||||
|
|
||||||
# Enable this if you really want to use the STM FWLib.
|
# Stack size to be allocated to the Cortex-M process stack. This stack is
|
||||||
ifeq ($(USE_FWLIB),)
|
# the stack used by the main() thread.
|
||||||
USE_FWLIB = no
|
ifeq ($(USE_PROCESS_STACKSIZE),)
|
||||||
|
USE_PROCESS_STACKSIZE = 0x400
|
||||||
|
endif
|
||||||
|
|
||||||
|
# Stack size to the allocated to the Cortex-M main/exceptions stack. This
|
||||||
|
# stack is used for processing interrupts and exceptions.
|
||||||
|
ifeq ($(USE_EXCEPTIONS_STACKSIZE),)
|
||||||
|
USE_EXCEPTIONS_STACKSIZE = 0x400
|
||||||
endif
|
endif
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -59,11 +71,12 @@ PROJECT = ch
|
||||||
|
|
||||||
# Imported source files and paths
|
# Imported source files and paths
|
||||||
CHIBIOS = ../../..
|
CHIBIOS = ../../..
|
||||||
include $(CHIBIOS)/boards/ST_STM32L_DISCOVERY/board.mk
|
|
||||||
include $(CHIBIOS)/os/hal/platforms/STM32L1xx/platform.mk
|
|
||||||
include $(CHIBIOS)/os/hal/hal.mk
|
include $(CHIBIOS)/os/hal/hal.mk
|
||||||
include $(CHIBIOS)/os/ports/GCC/ARMCMx/STM32L1xx/port.mk
|
include $(CHIBIOS)/os/hal/boards/ST_STM32L_DISCOVERY/board.mk
|
||||||
include $(CHIBIOS)/os/kernel/kernel.mk
|
include $(CHIBIOS)/os/hal/ports/STM32L1xx/platform.mk
|
||||||
|
include $(CHIBIOS)/os/rt/rt.mk
|
||||||
|
include $(CHIBIOS)/os/rt/osal/osal.mk
|
||||||
|
include $(CHIBIOS)/os/rt/ports/ARMCMx/compilers/GCC/mk/port_stm32l1xx.mk
|
||||||
#include $(CHIBIOS)/test/test.mk
|
#include $(CHIBIOS)/test/test.mk
|
||||||
|
|
||||||
# Define linker script file here
|
# Define linker script file here
|
||||||
|
@ -75,6 +88,7 @@ CSRC = $(PORTSRC) \
|
||||||
$(KERNSRC) \
|
$(KERNSRC) \
|
||||||
$(TESTSRC) \
|
$(TESTSRC) \
|
||||||
$(HALSRC) \
|
$(HALSRC) \
|
||||||
|
$(OSALSRC) \
|
||||||
$(PLATFORMSRC) \
|
$(PLATFORMSRC) \
|
||||||
$(BOARDSRC) \
|
$(BOARDSRC) \
|
||||||
main.c
|
main.c
|
||||||
|
@ -107,7 +121,7 @@ TCPPSRC =
|
||||||
ASMSRC = $(PORTASM)
|
ASMSRC = $(PORTASM)
|
||||||
|
|
||||||
INCDIR = $(PORTINC) $(KERNINC) $(TESTINC) \
|
INCDIR = $(PORTINC) $(KERNINC) $(TESTINC) \
|
||||||
$(HALINC) $(PLATFORMINC) $(BOARDINC) \
|
$(HALINC) $(OSALINC) $(PLATFORMINC) $(BOARDINC) \
|
||||||
$(CHIBIOS)/os/various
|
$(CHIBIOS)/os/various
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -132,6 +146,7 @@ LD = $(TRGT)gcc
|
||||||
CP = $(TRGT)objcopy
|
CP = $(TRGT)objcopy
|
||||||
AS = $(TRGT)gcc -x assembler-with-cpp
|
AS = $(TRGT)gcc -x assembler-with-cpp
|
||||||
OD = $(TRGT)objdump
|
OD = $(TRGT)objdump
|
||||||
|
SZ = $(TRGT)size
|
||||||
HEX = $(CP) -O ihex
|
HEX = $(CP) -O ihex
|
||||||
BIN = $(CP) -O binary
|
BIN = $(CP) -O binary
|
||||||
|
|
||||||
|
@ -151,29 +166,6 @@ CPPWARN = -Wall -Wextra
|
||||||
# Compiler settings
|
# Compiler settings
|
||||||
##############################################################################
|
##############################################################################
|
||||||
|
|
||||||
##############################################################################
|
|
||||||
# Start of default section
|
|
||||||
#
|
|
||||||
|
|
||||||
# List all default C defines here, like -D_DEBUG=1
|
|
||||||
DDEFS =
|
|
||||||
|
|
||||||
# List all default ASM defines here, like -D_DEBUG=1
|
|
||||||
DADEFS =
|
|
||||||
|
|
||||||
# List all default directories to look for include files here
|
|
||||||
DINCDIR =
|
|
||||||
|
|
||||||
# List the default directory to look for the libraries here
|
|
||||||
DLIBDIR =
|
|
||||||
|
|
||||||
# List all default libraries here
|
|
||||||
DLIBS =
|
|
||||||
|
|
||||||
#
|
|
||||||
# End of default section
|
|
||||||
##############################################################################
|
|
||||||
|
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# Start of user section
|
# Start of user section
|
||||||
#
|
#
|
||||||
|
@ -197,11 +189,5 @@ ULIBS =
|
||||||
# End of user defines
|
# End of user defines
|
||||||
##############################################################################
|
##############################################################################
|
||||||
|
|
||||||
ifeq ($(USE_FWLIB),yes)
|
RULESPATH = $(CHIBIOS)/os/common/ports/ARMCMx/compilers/GCC
|
||||||
include $(CHIBIOS)/ext/stm32lib/stm32lib.mk
|
include $(RULESPATH)/rules.mk
|
||||||
CSRC += $(STM32SRC)
|
|
||||||
INCDIR += $(STM32INC)
|
|
||||||
USE_OPT += -DUSE_STDPERIPH_DRIVER
|
|
||||||
endif
|
|
||||||
|
|
||||||
include $(CHIBIOS)/os/ports/GCC/ARMCMx/rules.mk
|
|
||||||
|
|
|
@ -30,19 +30,49 @@
|
||||||
|
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
/**
|
/**
|
||||||
* @name Kernel parameters and options
|
* @name System timers settings
|
||||||
* @{
|
* @{
|
||||||
*/
|
*/
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief System time counter resolution.
|
||||||
|
* @note Allowed values are 16 or 32 bits.
|
||||||
|
*/
|
||||||
|
#define CH_CFG_ST_RESOLUTION 16
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief System tick frequency.
|
* @brief System tick frequency.
|
||||||
* @details Frequency of the system timer that drives the system ticks. This
|
* @details Frequency of the system timer that drives the system ticks. This
|
||||||
* setting also defines the system tick time unit.
|
* setting also defines the system tick time unit.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_FREQUENCY) || defined(__DOXYGEN__)
|
#define CH_CFG_ST_FREQUENCY 1000
|
||||||
#define CH_FREQUENCY 1000
|
|
||||||
#endif
|
/**
|
||||||
|
* @brief Time delta constant for the tick-less mode.
|
||||||
|
* @note If this value is zero then the system uses the classic
|
||||||
|
* periodic tick. This value represents the minimum number
|
||||||
|
* of ticks that is safe to specify in a timeout directive.
|
||||||
|
* The value one is not valid, timeouts are rounded up to
|
||||||
|
* this value.
|
||||||
|
*/
|
||||||
|
#define CH_CFG_ST_TIMEDELTA 2
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Realtime Counter frequency.
|
||||||
|
* @details Frequency of the system counter used for realtime delays and
|
||||||
|
* measurements.
|
||||||
|
*/
|
||||||
|
#define CH_CFG_RTC_FREQUENCY 72000000
|
||||||
|
|
||||||
|
/** @} */
|
||||||
|
|
||||||
|
/*===========================================================================*/
|
||||||
|
/**
|
||||||
|
* @name Kernel parameters and options
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
/*===========================================================================*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Round robin interval.
|
* @brief Round robin interval.
|
||||||
|
@ -51,13 +81,12 @@
|
||||||
* disables the preemption for threads with equal priority and the
|
* disables the preemption for threads with equal priority and the
|
||||||
* round robin becomes cooperative. Note that higher priority
|
* round robin becomes cooperative. Note that higher priority
|
||||||
* threads can still preempt, the kernel is always preemptive.
|
* threads can still preempt, the kernel is always preemptive.
|
||||||
*
|
|
||||||
* @note Disabling the round robin preemption makes the kernel more compact
|
* @note Disabling the round robin preemption makes the kernel more compact
|
||||||
* and generally faster.
|
* and generally faster.
|
||||||
|
* @note The round robin preemption is not supported in tickless mode and
|
||||||
|
* must be set to zero in that case.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_TIME_QUANTUM) || defined(__DOXYGEN__)
|
#define CH_CFG_TIME_QUANTUM 0
|
||||||
#define CH_TIME_QUANTUM 20
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Managed RAM size.
|
* @brief Managed RAM size.
|
||||||
|
@ -68,28 +97,17 @@
|
||||||
*
|
*
|
||||||
* @note In order to let the OS manage the whole RAM the linker script must
|
* @note In order to let the OS manage the whole RAM the linker script must
|
||||||
* provide the @p __heap_base__ and @p __heap_end__ symbols.
|
* provide the @p __heap_base__ and @p __heap_end__ symbols.
|
||||||
* @note Requires @p CH_USE_MEMCORE.
|
* @note Requires @p CH_CFG_USE_MEMCORE.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_MEMCORE_SIZE) || defined(__DOXYGEN__)
|
#define CH_CFG_MEMCORE_SIZE 0
|
||||||
#define CH_MEMCORE_SIZE 0
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Idle thread automatic spawn suppression.
|
* @brief Idle thread automatic spawn suppression.
|
||||||
* @details When this option is activated the function @p chSysInit()
|
* @details When this option is activated the function @p chSysInit()
|
||||||
* does not spawn the idle thread automatically. The application has
|
* does not spawn the idle thread. The application @p main()
|
||||||
* then the responsibility to do one of the following:
|
* function becomes the idle thread and must implement an
|
||||||
* - Spawn a custom idle thread at priority @p IDLEPRIO.
|
* infinite loop. */
|
||||||
* - Change the main() thread priority to @p IDLEPRIO then enter
|
#define CH_CFG_NO_IDLE_THREAD FALSE
|
||||||
* an endless loop. In this scenario the @p main() thread acts as
|
|
||||||
* the idle thread.
|
|
||||||
* .
|
|
||||||
* @note Unless an idle thread is spawned the @p main() thread must not
|
|
||||||
* enter a sleep state.
|
|
||||||
*/
|
|
||||||
#if !defined(CH_NO_IDLE_THREAD) || defined(__DOXYGEN__)
|
|
||||||
#define CH_NO_IDLE_THREAD FALSE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/** @} */
|
/** @} */
|
||||||
|
|
||||||
|
@ -108,9 +126,7 @@
|
||||||
* @note This is not related to the compiler optimization options.
|
* @note This is not related to the compiler optimization options.
|
||||||
* @note The default is @p TRUE.
|
* @note The default is @p TRUE.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_OPTIMIZE_SPEED) || defined(__DOXYGEN__)
|
#define CH_CFG_OPTIMIZE_SPEED TRUE
|
||||||
#define CH_OPTIMIZE_SPEED TRUE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/** @} */
|
/** @} */
|
||||||
|
|
||||||
|
@ -121,15 +137,22 @@
|
||||||
*/
|
*/
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Time Measurement APIs.
|
||||||
|
* @details If enabled then the time measurement APIs are included in
|
||||||
|
* the kernel.
|
||||||
|
*
|
||||||
|
* @note The default is @p TRUE.
|
||||||
|
*/
|
||||||
|
#define CH_CFG_USE_TM TRUE
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Threads registry APIs.
|
* @brief Threads registry APIs.
|
||||||
* @details If enabled then the registry APIs are included in the kernel.
|
* @details If enabled then the registry APIs are included in the kernel.
|
||||||
*
|
*
|
||||||
* @note The default is @p TRUE.
|
* @note The default is @p TRUE.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_USE_REGISTRY) || defined(__DOXYGEN__)
|
#define CH_CFG_USE_REGISTRY TRUE
|
||||||
#define CH_USE_REGISTRY TRUE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Threads synchronization APIs.
|
* @brief Threads synchronization APIs.
|
||||||
|
@ -138,9 +161,7 @@
|
||||||
*
|
*
|
||||||
* @note The default is @p TRUE.
|
* @note The default is @p TRUE.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_USE_WAITEXIT) || defined(__DOXYGEN__)
|
#define CH_CFG_USE_WAITEXIT TRUE
|
||||||
#define CH_USE_WAITEXIT TRUE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Semaphores APIs.
|
* @brief Semaphores APIs.
|
||||||
|
@ -148,33 +169,18 @@
|
||||||
*
|
*
|
||||||
* @note The default is @p TRUE.
|
* @note The default is @p TRUE.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_USE_SEMAPHORES) || defined(__DOXYGEN__)
|
#define CH_CFG_USE_SEMAPHORES TRUE
|
||||||
#define CH_USE_SEMAPHORES TRUE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Semaphores queuing mode.
|
* @brief Semaphores queuing mode.
|
||||||
* @details If enabled then the threads are enqueued on semaphores by
|
* @details If enabled then the threads are enqueued on semaphores by
|
||||||
* priority rather than in FIFO order.
|
* priority rather than in FIFO order.
|
||||||
*
|
*
|
||||||
* @note The default is @p FALSE. Enable this if you have special requirements.
|
* @note The default is @p FALSE. Enable this if you have special
|
||||||
* @note Requires @p CH_USE_SEMAPHORES.
|
* requirements.
|
||||||
|
* @note Requires @p CH_CFG_USE_SEMAPHORES.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_USE_SEMAPHORES_PRIORITY) || defined(__DOXYGEN__)
|
#define CH_CFG_USE_SEMAPHORES_PRIORITY FALSE
|
||||||
#define CH_USE_SEMAPHORES_PRIORITY FALSE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Atomic semaphore API.
|
|
||||||
* @details If enabled then the semaphores the @p chSemSignalWait() API
|
|
||||||
* is included in the kernel.
|
|
||||||
*
|
|
||||||
* @note The default is @p TRUE.
|
|
||||||
* @note Requires @p CH_USE_SEMAPHORES.
|
|
||||||
*/
|
|
||||||
#if !defined(CH_USE_SEMSW) || defined(__DOXYGEN__)
|
|
||||||
#define CH_USE_SEMSW TRUE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Mutexes APIs.
|
* @brief Mutexes APIs.
|
||||||
|
@ -182,9 +188,7 @@
|
||||||
*
|
*
|
||||||
* @note The default is @p TRUE.
|
* @note The default is @p TRUE.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_USE_MUTEXES) || defined(__DOXYGEN__)
|
#define CH_CFG_USE_MUTEXES TRUE
|
||||||
#define CH_USE_MUTEXES TRUE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Conditional Variables APIs.
|
* @brief Conditional Variables APIs.
|
||||||
|
@ -192,11 +196,9 @@
|
||||||
* in the kernel.
|
* in the kernel.
|
||||||
*
|
*
|
||||||
* @note The default is @p TRUE.
|
* @note The default is @p TRUE.
|
||||||
* @note Requires @p CH_USE_MUTEXES.
|
* @note Requires @p CH_CFG_USE_MUTEXES.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_USE_CONDVARS) || defined(__DOXYGEN__)
|
#define CH_CFG_USE_CONDVARS TRUE
|
||||||
#define CH_USE_CONDVARS TRUE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Conditional Variables APIs with timeout.
|
* @brief Conditional Variables APIs with timeout.
|
||||||
|
@ -204,11 +206,9 @@
|
||||||
* specification are included in the kernel.
|
* specification are included in the kernel.
|
||||||
*
|
*
|
||||||
* @note The default is @p TRUE.
|
* @note The default is @p TRUE.
|
||||||
* @note Requires @p CH_USE_CONDVARS.
|
* @note Requires @p CH_CFG_USE_CONDVARS.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_USE_CONDVARS_TIMEOUT) || defined(__DOXYGEN__)
|
#define CH_CFG_USE_CONDVARS_TIMEOUT TRUE
|
||||||
#define CH_USE_CONDVARS_TIMEOUT TRUE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Events Flags APIs.
|
* @brief Events Flags APIs.
|
||||||
|
@ -216,9 +216,7 @@
|
||||||
*
|
*
|
||||||
* @note The default is @p TRUE.
|
* @note The default is @p TRUE.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_USE_EVENTS) || defined(__DOXYGEN__)
|
#define CH_CFG_USE_EVENTS TRUE
|
||||||
#define CH_USE_EVENTS TRUE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Events Flags APIs with timeout.
|
* @brief Events Flags APIs with timeout.
|
||||||
|
@ -226,11 +224,9 @@
|
||||||
* are included in the kernel.
|
* are included in the kernel.
|
||||||
*
|
*
|
||||||
* @note The default is @p TRUE.
|
* @note The default is @p TRUE.
|
||||||
* @note Requires @p CH_USE_EVENTS.
|
* @note Requires @p CH_CFG_USE_EVENTS.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_USE_EVENTS_TIMEOUT) || defined(__DOXYGEN__)
|
#define CH_CFG_USE_EVENTS_TIMEOUT TRUE
|
||||||
#define CH_USE_EVENTS_TIMEOUT TRUE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Synchronous Messages APIs.
|
* @brief Synchronous Messages APIs.
|
||||||
|
@ -239,21 +235,18 @@
|
||||||
*
|
*
|
||||||
* @note The default is @p TRUE.
|
* @note The default is @p TRUE.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_USE_MESSAGES) || defined(__DOXYGEN__)
|
#define CH_CFG_USE_MESSAGES TRUE
|
||||||
#define CH_USE_MESSAGES TRUE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Synchronous Messages queuing mode.
|
* @brief Synchronous Messages queuing mode.
|
||||||
* @details If enabled then messages are served by priority rather than in
|
* @details If enabled then messages are served by priority rather than in
|
||||||
* FIFO order.
|
* FIFO order.
|
||||||
*
|
*
|
||||||
* @note The default is @p FALSE. Enable this if you have special requirements.
|
* @note The default is @p FALSE. Enable this if you have special
|
||||||
* @note Requires @p CH_USE_MESSAGES.
|
* requirements.
|
||||||
|
* @note Requires @p CH_CFG_USE_MESSAGES.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_USE_MESSAGES_PRIORITY) || defined(__DOXYGEN__)
|
#define CH_CFG_USE_MESSAGES_PRIORITY FALSE
|
||||||
#define CH_USE_MESSAGES_PRIORITY FALSE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Mailboxes APIs.
|
* @brief Mailboxes APIs.
|
||||||
|
@ -261,11 +254,9 @@
|
||||||
* included in the kernel.
|
* included in the kernel.
|
||||||
*
|
*
|
||||||
* @note The default is @p TRUE.
|
* @note The default is @p TRUE.
|
||||||
* @note Requires @p CH_USE_SEMAPHORES.
|
* @note Requires @p CH_CFG_USE_SEMAPHORES.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_USE_MAILBOXES) || defined(__DOXYGEN__)
|
#define CH_CFG_USE_MAILBOXES TRUE
|
||||||
#define CH_USE_MAILBOXES TRUE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief I/O Queues APIs.
|
* @brief I/O Queues APIs.
|
||||||
|
@ -273,9 +264,7 @@
|
||||||
*
|
*
|
||||||
* @note The default is @p TRUE.
|
* @note The default is @p TRUE.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_USE_QUEUES) || defined(__DOXYGEN__)
|
#define CH_CFG_USE_QUEUES TRUE
|
||||||
#define CH_USE_QUEUES TRUE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Core Memory Manager APIs.
|
* @brief Core Memory Manager APIs.
|
||||||
|
@ -284,9 +273,7 @@
|
||||||
*
|
*
|
||||||
* @note The default is @p TRUE.
|
* @note The default is @p TRUE.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_USE_MEMCORE) || defined(__DOXYGEN__)
|
#define CH_CFG_USE_MEMCORE TRUE
|
||||||
#define CH_USE_MEMCORE TRUE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Heap Allocator APIs.
|
* @brief Heap Allocator APIs.
|
||||||
|
@ -294,27 +281,11 @@
|
||||||
* in the kernel.
|
* in the kernel.
|
||||||
*
|
*
|
||||||
* @note The default is @p TRUE.
|
* @note The default is @p TRUE.
|
||||||
* @note Requires @p CH_USE_MEMCORE and either @p CH_USE_MUTEXES or
|
* @note Requires @p CH_CFG_USE_MEMCORE and either @p CH_CFG_USE_MUTEXES or
|
||||||
* @p CH_USE_SEMAPHORES.
|
* @p CH_CFG_USE_SEMAPHORES.
|
||||||
* @note Mutexes are recommended.
|
* @note Mutexes are recommended.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_USE_HEAP) || defined(__DOXYGEN__)
|
#define CH_CFG_USE_HEAP TRUE
|
||||||
#define CH_USE_HEAP TRUE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief C-runtime allocator.
|
|
||||||
* @details If enabled the the heap allocator APIs just wrap the C-runtime
|
|
||||||
* @p malloc() and @p free() functions.
|
|
||||||
*
|
|
||||||
* @note The default is @p FALSE.
|
|
||||||
* @note Requires @p CH_USE_HEAP.
|
|
||||||
* @note The C-runtime may or may not require @p CH_USE_MEMCORE, see the
|
|
||||||
* appropriate documentation.
|
|
||||||
*/
|
|
||||||
#if !defined(CH_USE_MALLOC_HEAP) || defined(__DOXYGEN__)
|
|
||||||
#define CH_USE_MALLOC_HEAP FALSE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Memory Pools Allocator APIs.
|
* @brief Memory Pools Allocator APIs.
|
||||||
|
@ -323,9 +294,7 @@
|
||||||
*
|
*
|
||||||
* @note The default is @p TRUE.
|
* @note The default is @p TRUE.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_USE_MEMPOOLS) || defined(__DOXYGEN__)
|
#define CH_CFG_USE_MEMPOOLS TRUE
|
||||||
#define CH_USE_MEMPOOLS TRUE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Dynamic Threads APIs.
|
* @brief Dynamic Threads APIs.
|
||||||
|
@ -333,12 +302,10 @@
|
||||||
* in the kernel.
|
* in the kernel.
|
||||||
*
|
*
|
||||||
* @note The default is @p TRUE.
|
* @note The default is @p TRUE.
|
||||||
* @note Requires @p CH_USE_WAITEXIT.
|
* @note Requires @p CH_CFG_USE_WAITEXIT.
|
||||||
* @note Requires @p CH_USE_HEAP and/or @p CH_USE_MEMPOOLS.
|
* @note Requires @p CH_CFG_USE_HEAP and/or @p CH_CFG_USE_MEMPOOLS.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_USE_DYNAMIC) || defined(__DOXYGEN__)
|
#define CH_CFG_USE_DYNAMIC TRUE
|
||||||
#define CH_USE_DYNAMIC TRUE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/** @} */
|
/** @} */
|
||||||
|
|
||||||
|
@ -349,6 +316,13 @@
|
||||||
*/
|
*/
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Debug option, kernel statistics.
|
||||||
|
*
|
||||||
|
* @note The default is @p FALSE.
|
||||||
|
*/
|
||||||
|
#define CH_DBG_STATISTICS TRUE
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Debug option, system state check.
|
* @brief Debug option, system state check.
|
||||||
* @details If enabled the correct call protocol for system APIs is checked
|
* @details If enabled the correct call protocol for system APIs is checked
|
||||||
|
@ -356,9 +330,7 @@
|
||||||
*
|
*
|
||||||
* @note The default is @p FALSE.
|
* @note The default is @p FALSE.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_DBG_SYSTEM_STATE_CHECK) || defined(__DOXYGEN__)
|
|
||||||
#define CH_DBG_SYSTEM_STATE_CHECK TRUE
|
#define CH_DBG_SYSTEM_STATE_CHECK TRUE
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Debug option, parameters checks.
|
* @brief Debug option, parameters checks.
|
||||||
|
@ -367,9 +339,7 @@
|
||||||
*
|
*
|
||||||
* @note The default is @p FALSE.
|
* @note The default is @p FALSE.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_DBG_ENABLE_CHECKS) || defined(__DOXYGEN__)
|
|
||||||
#define CH_DBG_ENABLE_CHECKS TRUE
|
#define CH_DBG_ENABLE_CHECKS TRUE
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Debug option, consistency checks.
|
* @brief Debug option, consistency checks.
|
||||||
|
@ -379,9 +349,7 @@
|
||||||
*
|
*
|
||||||
* @note The default is @p FALSE.
|
* @note The default is @p FALSE.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_DBG_ENABLE_ASSERTS) || defined(__DOXYGEN__)
|
|
||||||
#define CH_DBG_ENABLE_ASSERTS TRUE
|
#define CH_DBG_ENABLE_ASSERTS TRUE
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Debug option, trace buffer.
|
* @brief Debug option, trace buffer.
|
||||||
|
@ -390,9 +358,7 @@
|
||||||
*
|
*
|
||||||
* @note The default is @p FALSE.
|
* @note The default is @p FALSE.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_DBG_ENABLE_TRACE) || defined(__DOXYGEN__)
|
|
||||||
#define CH_DBG_ENABLE_TRACE TRUE
|
#define CH_DBG_ENABLE_TRACE TRUE
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Debug option, stack checks.
|
* @brief Debug option, stack checks.
|
||||||
|
@ -404,9 +370,7 @@
|
||||||
* @note The default failure mode is to halt the system with the global
|
* @note The default failure mode is to halt the system with the global
|
||||||
* @p panic_msg variable set to @p NULL.
|
* @p panic_msg variable set to @p NULL.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_DBG_ENABLE_STACK_CHECK) || defined(__DOXYGEN__)
|
|
||||||
#define CH_DBG_ENABLE_STACK_CHECK TRUE
|
#define CH_DBG_ENABLE_STACK_CHECK TRUE
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Debug option, stacks initialization.
|
* @brief Debug option, stacks initialization.
|
||||||
|
@ -416,22 +380,18 @@
|
||||||
*
|
*
|
||||||
* @note The default is @p FALSE.
|
* @note The default is @p FALSE.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_DBG_FILL_THREADS) || defined(__DOXYGEN__)
|
|
||||||
#define CH_DBG_FILL_THREADS TRUE
|
#define CH_DBG_FILL_THREADS TRUE
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Debug option, threads profiling.
|
* @brief Debug option, threads profiling.
|
||||||
* @details If enabled then a field is added to the @p Thread structure that
|
* @details If enabled then a field is added to the @p thread_t structure that
|
||||||
* counts the system ticks occurred while executing the thread.
|
* counts the system ticks occurred while executing the thread.
|
||||||
*
|
*
|
||||||
* @note The default is @p TRUE.
|
* @note The default is @p FALSE.
|
||||||
* @note This debug option is defaulted to TRUE because it is required by
|
* @note This debug option is not currently compatible with the
|
||||||
* some test cases into the test suite.
|
* tickless mode.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_DBG_THREADS_PROFILING) || defined(__DOXYGEN__)
|
#define CH_DBG_THREADS_PROFILING FALSE
|
||||||
#define CH_DBG_THREADS_PROFILING TRUE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/** @} */
|
/** @} */
|
||||||
|
|
||||||
|
@ -444,12 +404,10 @@
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Threads descriptor structure extension.
|
* @brief Threads descriptor structure extension.
|
||||||
* @details User fields added to the end of the @p Thread structure.
|
* @details User fields added to the end of the @p thread_t structure.
|
||||||
*/
|
*/
|
||||||
#if !defined(THREAD_EXT_FIELDS) || defined(__DOXYGEN__)
|
#define CH_CFG_THREAD_EXTRA_FIELDS \
|
||||||
#define THREAD_EXT_FIELDS \
|
|
||||||
/* Add threads custom fields here.*/
|
/* Add threads custom fields here.*/
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Threads initialization hook.
|
* @brief Threads initialization hook.
|
||||||
|
@ -458,11 +416,9 @@
|
||||||
* @note It is invoked from within @p chThdInit() and implicitly from all
|
* @note It is invoked from within @p chThdInit() and implicitly from all
|
||||||
* the threads creation APIs.
|
* the threads creation APIs.
|
||||||
*/
|
*/
|
||||||
#if !defined(THREAD_EXT_INIT_HOOK) || defined(__DOXYGEN__)
|
#define CH_CFG_THREAD_INIT_HOOK(tp) { \
|
||||||
#define THREAD_EXT_INIT_HOOK(tp) { \
|
|
||||||
/* Add threads initialization code here.*/ \
|
/* Add threads initialization code here.*/ \
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Threads finalization hook.
|
* @brief Threads finalization hook.
|
||||||
|
@ -472,53 +428,61 @@
|
||||||
* @note It is also invoked when the threads simply return in order to
|
* @note It is also invoked when the threads simply return in order to
|
||||||
* terminate.
|
* terminate.
|
||||||
*/
|
*/
|
||||||
#if !defined(THREAD_EXT_EXIT_HOOK) || defined(__DOXYGEN__)
|
#define CH_CFG_THREAD_EXIT_HOOK(tp) { \
|
||||||
#define THREAD_EXT_EXIT_HOOK(tp) { \
|
|
||||||
/* Add threads finalization code here.*/ \
|
/* Add threads finalization code here.*/ \
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Context switch hook.
|
* @brief Context switch hook.
|
||||||
* @details This hook is invoked just before switching between threads.
|
* @details This hook is invoked just before switching between threads.
|
||||||
*/
|
*/
|
||||||
#if !defined(THREAD_CONTEXT_SWITCH_HOOK) || defined(__DOXYGEN__)
|
#define CH_CFG_CONTEXT_SWITCH_HOOK(ntp, otp) { \
|
||||||
#define THREAD_CONTEXT_SWITCH_HOOK(ntp, otp) { \
|
|
||||||
/* System halt code here.*/ \
|
/* System halt code here.*/ \
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
/**
|
||||||
|
* @brief Idle thread enter hook.
|
||||||
|
* @note This hook is invoked within a critical zone, no OS functions
|
||||||
|
* should be invoked from here.
|
||||||
|
* @note This macro can be used to activate a power saving mode.
|
||||||
|
*/
|
||||||
|
#define CH_CFG_IDLE_ENTER_HOOK() { \
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Idle thread leave hook.
|
||||||
|
* @note This hook is invoked within a critical zone, no OS functions
|
||||||
|
* should be invoked from here.
|
||||||
|
* @note This macro can be used to deactivate a power saving mode.
|
||||||
|
*/
|
||||||
|
#define CH_CFG_IDLE_LEAVE_HOOK() { \
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Idle Loop hook.
|
* @brief Idle Loop hook.
|
||||||
* @details This hook is continuously invoked by the idle thread loop.
|
* @details This hook is continuously invoked by the idle thread loop.
|
||||||
*/
|
*/
|
||||||
#if !defined(IDLE_LOOP_HOOK) || defined(__DOXYGEN__)
|
#define CH_CFG_IDLE_LOOP_HOOK() { \
|
||||||
#define IDLE_LOOP_HOOK() { \
|
|
||||||
/* Idle loop code here.*/ \
|
/* Idle loop code here.*/ \
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief System tick event hook.
|
* @brief System tick event hook.
|
||||||
* @details This hook is invoked in the system tick handler immediately
|
* @details This hook is invoked in the system tick handler immediately
|
||||||
* after processing the virtual timers queue.
|
* after processing the virtual timers queue.
|
||||||
*/
|
*/
|
||||||
#if !defined(SYSTEM_TICK_EVENT_HOOK) || defined(__DOXYGEN__)
|
#define CH_CFG_SYSTEM_TICK_HOOK() { \
|
||||||
#define SYSTEM_TICK_EVENT_HOOK() { \
|
|
||||||
/* System tick event code here.*/ \
|
/* System tick event code here.*/ \
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief System halt hook.
|
* @brief System halt hook.
|
||||||
* @details This hook is invoked in case to a system halting error before
|
* @details This hook is invoked in case to a system halting error before
|
||||||
* the system is halted.
|
* the system is halted.
|
||||||
*/
|
*/
|
||||||
#if !defined(SYSTEM_HALT_HOOK) || defined(__DOXYGEN__)
|
#define CH_CFG_SYSTEM_HALT_HOOK(reason) { \
|
||||||
#define SYSTEM_HALT_HOOK() { \
|
|
||||||
/* System halt code here.*/ \
|
/* System halt code here.*/ \
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
/** @} */
|
/** @} */
|
||||||
|
|
||||||
|
|
|
@ -46,10 +46,11 @@ static uint8_t rxbuf[512];
|
||||||
/*
|
/*
|
||||||
* SPI bus contender 1.
|
* SPI bus contender 1.
|
||||||
*/
|
*/
|
||||||
static WORKING_AREA(spi_thread_1_wa, 256);
|
static THD_WORKING_AREA(spi_thread_1_wa, 256);
|
||||||
static msg_t spi_thread_1(void *p) {
|
static THD_FUNCTION(spi_thread_1, p) {
|
||||||
|
|
||||||
(void)p;
|
(void)p;
|
||||||
|
|
||||||
chRegSetThreadName("SPI thread 1");
|
chRegSetThreadName("SPI thread 1");
|
||||||
while (TRUE) {
|
while (TRUE) {
|
||||||
spiAcquireBus(&SPID2); /* Acquire ownership of the bus. */
|
spiAcquireBus(&SPID2); /* Acquire ownership of the bus. */
|
||||||
|
@ -67,10 +68,11 @@ static msg_t spi_thread_1(void *p) {
|
||||||
/*
|
/*
|
||||||
* SPI bus contender 2.
|
* SPI bus contender 2.
|
||||||
*/
|
*/
|
||||||
static WORKING_AREA(spi_thread_2_wa, 256);
|
static THD_WORKING_AREA(spi_thread_2_wa, 256);
|
||||||
static msg_t spi_thread_2(void *p) {
|
static THD_FUNCTION(spi_thread_2, p) {
|
||||||
|
|
||||||
(void)p;
|
(void)p;
|
||||||
|
|
||||||
chRegSetThreadName("SPI thread 2");
|
chRegSetThreadName("SPI thread 2");
|
||||||
while (TRUE) {
|
while (TRUE) {
|
||||||
spiAcquireBus(&SPID2); /* Acquire ownership of the bus. */
|
spiAcquireBus(&SPID2); /* Acquire ownership of the bus. */
|
||||||
|
|
|
@ -96,12 +96,12 @@
|
||||||
*/
|
*/
|
||||||
#define STM32_I2C_USE_I2C1 FALSE
|
#define STM32_I2C_USE_I2C1 FALSE
|
||||||
#define STM32_I2C_USE_I2C2 FALSE
|
#define STM32_I2C_USE_I2C2 FALSE
|
||||||
|
#define STM32_I2C_BUSY_TIMEOUT 50
|
||||||
#define STM32_I2C_I2C1_IRQ_PRIORITY 5
|
#define STM32_I2C_I2C1_IRQ_PRIORITY 5
|
||||||
#define STM32_I2C_I2C2_IRQ_PRIORITY 5
|
#define STM32_I2C_I2C2_IRQ_PRIORITY 5
|
||||||
#define STM32_I2C_I2C1_DMA_PRIORITY 3
|
#define STM32_I2C_I2C1_DMA_PRIORITY 3
|
||||||
#define STM32_I2C_I2C2_DMA_PRIORITY 3
|
#define STM32_I2C_I2C2_DMA_PRIORITY 3
|
||||||
#define STM32_I2C_I2C1_DMA_ERROR_HOOK() chSysHalt()
|
#define STM32_I2C_DMA_ERROR_HOOK(i2cp) osalSysHalt("DMA failure")
|
||||||
#define STM32_I2C_I2C2_DMA_ERROR_HOOK() chSysHalt()
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* ICU driver system settings.
|
* ICU driver system settings.
|
||||||
|
@ -146,7 +146,13 @@
|
||||||
#define STM32_SPI_SPI2_DMA_PRIORITY 1
|
#define STM32_SPI_SPI2_DMA_PRIORITY 1
|
||||||
#define STM32_SPI_SPI1_IRQ_PRIORITY 10
|
#define STM32_SPI_SPI1_IRQ_PRIORITY 10
|
||||||
#define STM32_SPI_SPI2_IRQ_PRIORITY 10
|
#define STM32_SPI_SPI2_IRQ_PRIORITY 10
|
||||||
#define STM32_SPI_DMA_ERROR_HOOK(spip) chSysHalt()
|
#define STM32_SPI_DMA_ERROR_HOOK(spip) osalSysHalt("DMA failure")
|
||||||
|
|
||||||
|
/*
|
||||||
|
* ST driver system settings.
|
||||||
|
*/
|
||||||
|
#define STM32_ST_IRQ_PRIORITY 8
|
||||||
|
#define STM32_ST_USE_TIMER 2
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* UART driver system settings.
|
* UART driver system settings.
|
||||||
|
@ -160,12 +166,12 @@
|
||||||
#define STM32_UART_USART1_DMA_PRIORITY 0
|
#define STM32_UART_USART1_DMA_PRIORITY 0
|
||||||
#define STM32_UART_USART2_DMA_PRIORITY 0
|
#define STM32_UART_USART2_DMA_PRIORITY 0
|
||||||
#define STM32_UART_USART3_DMA_PRIORITY 0
|
#define STM32_UART_USART3_DMA_PRIORITY 0
|
||||||
#define STM32_UART_DMA_ERROR_HOOK(uartp) chSysHalt()
|
#define STM32_UART_DMA_ERROR_HOOK(uartp) osalSysHalt("DMA failure")
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* USB driver system settings.
|
* USB driver system settings.
|
||||||
*/
|
*/
|
||||||
#define STM32_USB_USE_USB1 TRUE
|
#define STM32_USB_USE_USB1 FALSE
|
||||||
#define STM32_USB_LOW_POWER_ON_SUSPEND FALSE
|
#define STM32_USB_LOW_POWER_ON_SUSPEND FALSE
|
||||||
#define STM32_USB_USB1_HP_IRQ_PRIORITY 13
|
#define STM32_USB_USB1_HP_IRQ_PRIORITY 13
|
||||||
#define STM32_USB_USB1_LP_IRQ_PRIORITY 14
|
#define STM32_USB_USB1_LP_IRQ_PRIORITY 14
|
||||||
|
|
|
@ -24,11 +24,6 @@
|
||||||
<nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
|
<nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
|
||||||
</natures>
|
</natures>
|
||||||
<linkedResources>
|
<linkedResources>
|
||||||
<link>
|
|
||||||
<name>board</name>
|
|
||||||
<type>2</type>
|
|
||||||
<locationURI>CHIBIOS/boards/ST_STM32L_DISCOVERY</locationURI>
|
|
||||||
</link>
|
|
||||||
<link>
|
<link>
|
||||||
<name>os</name>
|
<name>os</name>
|
||||||
<type>2</type>
|
<type>2</type>
|
||||||
|
|
|
@ -23,6 +23,11 @@ ifeq ($(USE_LINK_GC),)
|
||||||
USE_LINK_GC = yes
|
USE_LINK_GC = yes
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
# Enable this if you want link time optimizations (LTO)
|
||||||
|
ifeq ($(USE_LTO),)
|
||||||
|
USE_LTO = yes
|
||||||
|
endif
|
||||||
|
|
||||||
# If enabled, this option allows to compile the application in THUMB mode.
|
# If enabled, this option allows to compile the application in THUMB mode.
|
||||||
ifeq ($(USE_THUMB),)
|
ifeq ($(USE_THUMB),)
|
||||||
USE_THUMB = yes
|
USE_THUMB = yes
|
||||||
|
@ -41,9 +46,16 @@ endif
|
||||||
# Architecture or project specific options
|
# Architecture or project specific options
|
||||||
#
|
#
|
||||||
|
|
||||||
# Enable this if you really want to use the STM FWLib.
|
# Stack size to be allocated to the Cortex-M process stack. This stack is
|
||||||
ifeq ($(USE_FWLIB),)
|
# the stack used by the main() thread.
|
||||||
USE_FWLIB = no
|
ifeq ($(USE_PROCESS_STACKSIZE),)
|
||||||
|
USE_PROCESS_STACKSIZE = 0x400
|
||||||
|
endif
|
||||||
|
|
||||||
|
# Stack size to the allocated to the Cortex-M main/exceptions stack. This
|
||||||
|
# stack is used for processing interrupts and exceptions.
|
||||||
|
ifeq ($(USE_EXCEPTIONS_STACKSIZE),)
|
||||||
|
USE_EXCEPTIONS_STACKSIZE = 0x400
|
||||||
endif
|
endif
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -59,11 +71,12 @@ PROJECT = ch
|
||||||
|
|
||||||
# Imported source files and paths
|
# Imported source files and paths
|
||||||
CHIBIOS = ../../..
|
CHIBIOS = ../../..
|
||||||
include $(CHIBIOS)/boards/ST_STM32L_DISCOVERY/board.mk
|
|
||||||
include $(CHIBIOS)/os/hal/platforms/STM32L1xx/platform.mk
|
|
||||||
include $(CHIBIOS)/os/hal/hal.mk
|
include $(CHIBIOS)/os/hal/hal.mk
|
||||||
include $(CHIBIOS)/os/ports/GCC/ARMCMx/STM32L1xx/port.mk
|
include $(CHIBIOS)/os/hal/boards/ST_STM32L_DISCOVERY/board.mk
|
||||||
include $(CHIBIOS)/os/kernel/kernel.mk
|
include $(CHIBIOS)/os/hal/ports/STM32L1xx/platform.mk
|
||||||
|
include $(CHIBIOS)/os/rt/rt.mk
|
||||||
|
include $(CHIBIOS)/os/rt/osal/osal.mk
|
||||||
|
include $(CHIBIOS)/os/rt/ports/ARMCMx/compilers/GCC/mk/port_stm32l1xx.mk
|
||||||
#include $(CHIBIOS)/test/test.mk
|
#include $(CHIBIOS)/test/test.mk
|
||||||
|
|
||||||
# Define linker script file here
|
# Define linker script file here
|
||||||
|
@ -75,6 +88,7 @@ CSRC = $(PORTSRC) \
|
||||||
$(KERNSRC) \
|
$(KERNSRC) \
|
||||||
$(TESTSRC) \
|
$(TESTSRC) \
|
||||||
$(HALSRC) \
|
$(HALSRC) \
|
||||||
|
$(OSALSRC) \
|
||||||
$(PLATFORMSRC) \
|
$(PLATFORMSRC) \
|
||||||
$(BOARDSRC) \
|
$(BOARDSRC) \
|
||||||
main.c
|
main.c
|
||||||
|
@ -107,7 +121,7 @@ TCPPSRC =
|
||||||
ASMSRC = $(PORTASM)
|
ASMSRC = $(PORTASM)
|
||||||
|
|
||||||
INCDIR = $(PORTINC) $(KERNINC) $(TESTINC) \
|
INCDIR = $(PORTINC) $(KERNINC) $(TESTINC) \
|
||||||
$(HALINC) $(PLATFORMINC) $(BOARDINC) \
|
$(HALINC) $(OSALINC) $(PLATFORMINC) $(BOARDINC) \
|
||||||
$(CHIBIOS)/os/various
|
$(CHIBIOS)/os/various
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -132,6 +146,7 @@ LD = $(TRGT)gcc
|
||||||
CP = $(TRGT)objcopy
|
CP = $(TRGT)objcopy
|
||||||
AS = $(TRGT)gcc -x assembler-with-cpp
|
AS = $(TRGT)gcc -x assembler-with-cpp
|
||||||
OD = $(TRGT)objdump
|
OD = $(TRGT)objdump
|
||||||
|
SZ = $(TRGT)size
|
||||||
HEX = $(CP) -O ihex
|
HEX = $(CP) -O ihex
|
||||||
BIN = $(CP) -O binary
|
BIN = $(CP) -O binary
|
||||||
|
|
||||||
|
@ -151,29 +166,6 @@ CPPWARN = -Wall -Wextra
|
||||||
# Compiler settings
|
# Compiler settings
|
||||||
##############################################################################
|
##############################################################################
|
||||||
|
|
||||||
##############################################################################
|
|
||||||
# Start of default section
|
|
||||||
#
|
|
||||||
|
|
||||||
# List all default C defines here, like -D_DEBUG=1
|
|
||||||
DDEFS =
|
|
||||||
|
|
||||||
# List all default ASM defines here, like -D_DEBUG=1
|
|
||||||
DADEFS =
|
|
||||||
|
|
||||||
# List all default directories to look for include files here
|
|
||||||
DINCDIR =
|
|
||||||
|
|
||||||
# List the default directory to look for the libraries here
|
|
||||||
DLIBDIR =
|
|
||||||
|
|
||||||
# List all default libraries here
|
|
||||||
DLIBS =
|
|
||||||
|
|
||||||
#
|
|
||||||
# End of default section
|
|
||||||
##############################################################################
|
|
||||||
|
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# Start of user section
|
# Start of user section
|
||||||
#
|
#
|
||||||
|
@ -197,11 +189,5 @@ ULIBS =
|
||||||
# End of user defines
|
# End of user defines
|
||||||
##############################################################################
|
##############################################################################
|
||||||
|
|
||||||
ifeq ($(USE_FWLIB),yes)
|
RULESPATH = $(CHIBIOS)/os/common/ports/ARMCMx/compilers/GCC
|
||||||
include $(CHIBIOS)/ext/stm32lib/stm32lib.mk
|
include $(RULESPATH)/rules.mk
|
||||||
CSRC += $(STM32SRC)
|
|
||||||
INCDIR += $(STM32INC)
|
|
||||||
USE_OPT += -DUSE_STDPERIPH_DRIVER
|
|
||||||
endif
|
|
||||||
|
|
||||||
include $(CHIBIOS)/os/ports/GCC/ARMCMx/rules.mk
|
|
||||||
|
|
|
@ -30,19 +30,49 @@
|
||||||
|
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
/**
|
/**
|
||||||
* @name Kernel parameters and options
|
* @name System timers settings
|
||||||
* @{
|
* @{
|
||||||
*/
|
*/
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief System time counter resolution.
|
||||||
|
* @note Allowed values are 16 or 32 bits.
|
||||||
|
*/
|
||||||
|
#define CH_CFG_ST_RESOLUTION 16
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief System tick frequency.
|
* @brief System tick frequency.
|
||||||
* @details Frequency of the system timer that drives the system ticks. This
|
* @details Frequency of the system timer that drives the system ticks. This
|
||||||
* setting also defines the system tick time unit.
|
* setting also defines the system tick time unit.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_FREQUENCY) || defined(__DOXYGEN__)
|
#define CH_CFG_ST_FREQUENCY 1000
|
||||||
#define CH_FREQUENCY 1000
|
|
||||||
#endif
|
/**
|
||||||
|
* @brief Time delta constant for the tick-less mode.
|
||||||
|
* @note If this value is zero then the system uses the classic
|
||||||
|
* periodic tick. This value represents the minimum number
|
||||||
|
* of ticks that is safe to specify in a timeout directive.
|
||||||
|
* The value one is not valid, timeouts are rounded up to
|
||||||
|
* this value.
|
||||||
|
*/
|
||||||
|
#define CH_CFG_ST_TIMEDELTA 2
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Realtime Counter frequency.
|
||||||
|
* @details Frequency of the system counter used for realtime delays and
|
||||||
|
* measurements.
|
||||||
|
*/
|
||||||
|
#define CH_CFG_RTC_FREQUENCY 72000000
|
||||||
|
|
||||||
|
/** @} */
|
||||||
|
|
||||||
|
/*===========================================================================*/
|
||||||
|
/**
|
||||||
|
* @name Kernel parameters and options
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
/*===========================================================================*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Round robin interval.
|
* @brief Round robin interval.
|
||||||
|
@ -51,13 +81,12 @@
|
||||||
* disables the preemption for threads with equal priority and the
|
* disables the preemption for threads with equal priority and the
|
||||||
* round robin becomes cooperative. Note that higher priority
|
* round robin becomes cooperative. Note that higher priority
|
||||||
* threads can still preempt, the kernel is always preemptive.
|
* threads can still preempt, the kernel is always preemptive.
|
||||||
*
|
|
||||||
* @note Disabling the round robin preemption makes the kernel more compact
|
* @note Disabling the round robin preemption makes the kernel more compact
|
||||||
* and generally faster.
|
* and generally faster.
|
||||||
|
* @note The round robin preemption is not supported in tickless mode and
|
||||||
|
* must be set to zero in that case.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_TIME_QUANTUM) || defined(__DOXYGEN__)
|
#define CH_CFG_TIME_QUANTUM 0
|
||||||
#define CH_TIME_QUANTUM 20
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Managed RAM size.
|
* @brief Managed RAM size.
|
||||||
|
@ -68,28 +97,17 @@
|
||||||
*
|
*
|
||||||
* @note In order to let the OS manage the whole RAM the linker script must
|
* @note In order to let the OS manage the whole RAM the linker script must
|
||||||
* provide the @p __heap_base__ and @p __heap_end__ symbols.
|
* provide the @p __heap_base__ and @p __heap_end__ symbols.
|
||||||
* @note Requires @p CH_USE_MEMCORE.
|
* @note Requires @p CH_CFG_USE_MEMCORE.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_MEMCORE_SIZE) || defined(__DOXYGEN__)
|
#define CH_CFG_MEMCORE_SIZE 0
|
||||||
#define CH_MEMCORE_SIZE 0
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Idle thread automatic spawn suppression.
|
* @brief Idle thread automatic spawn suppression.
|
||||||
* @details When this option is activated the function @p chSysInit()
|
* @details When this option is activated the function @p chSysInit()
|
||||||
* does not spawn the idle thread automatically. The application has
|
* does not spawn the idle thread. The application @p main()
|
||||||
* then the responsibility to do one of the following:
|
* function becomes the idle thread and must implement an
|
||||||
* - Spawn a custom idle thread at priority @p IDLEPRIO.
|
* infinite loop. */
|
||||||
* - Change the main() thread priority to @p IDLEPRIO then enter
|
#define CH_CFG_NO_IDLE_THREAD FALSE
|
||||||
* an endless loop. In this scenario the @p main() thread acts as
|
|
||||||
* the idle thread.
|
|
||||||
* .
|
|
||||||
* @note Unless an idle thread is spawned the @p main() thread must not
|
|
||||||
* enter a sleep state.
|
|
||||||
*/
|
|
||||||
#if !defined(CH_NO_IDLE_THREAD) || defined(__DOXYGEN__)
|
|
||||||
#define CH_NO_IDLE_THREAD FALSE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/** @} */
|
/** @} */
|
||||||
|
|
||||||
|
@ -108,9 +126,7 @@
|
||||||
* @note This is not related to the compiler optimization options.
|
* @note This is not related to the compiler optimization options.
|
||||||
* @note The default is @p TRUE.
|
* @note The default is @p TRUE.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_OPTIMIZE_SPEED) || defined(__DOXYGEN__)
|
#define CH_CFG_OPTIMIZE_SPEED TRUE
|
||||||
#define CH_OPTIMIZE_SPEED TRUE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/** @} */
|
/** @} */
|
||||||
|
|
||||||
|
@ -121,15 +137,22 @@
|
||||||
*/
|
*/
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Time Measurement APIs.
|
||||||
|
* @details If enabled then the time measurement APIs are included in
|
||||||
|
* the kernel.
|
||||||
|
*
|
||||||
|
* @note The default is @p TRUE.
|
||||||
|
*/
|
||||||
|
#define CH_CFG_USE_TM TRUE
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Threads registry APIs.
|
* @brief Threads registry APIs.
|
||||||
* @details If enabled then the registry APIs are included in the kernel.
|
* @details If enabled then the registry APIs are included in the kernel.
|
||||||
*
|
*
|
||||||
* @note The default is @p TRUE.
|
* @note The default is @p TRUE.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_USE_REGISTRY) || defined(__DOXYGEN__)
|
#define CH_CFG_USE_REGISTRY TRUE
|
||||||
#define CH_USE_REGISTRY TRUE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Threads synchronization APIs.
|
* @brief Threads synchronization APIs.
|
||||||
|
@ -138,9 +161,7 @@
|
||||||
*
|
*
|
||||||
* @note The default is @p TRUE.
|
* @note The default is @p TRUE.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_USE_WAITEXIT) || defined(__DOXYGEN__)
|
#define CH_CFG_USE_WAITEXIT TRUE
|
||||||
#define CH_USE_WAITEXIT TRUE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Semaphores APIs.
|
* @brief Semaphores APIs.
|
||||||
|
@ -148,33 +169,18 @@
|
||||||
*
|
*
|
||||||
* @note The default is @p TRUE.
|
* @note The default is @p TRUE.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_USE_SEMAPHORES) || defined(__DOXYGEN__)
|
#define CH_CFG_USE_SEMAPHORES TRUE
|
||||||
#define CH_USE_SEMAPHORES TRUE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Semaphores queuing mode.
|
* @brief Semaphores queuing mode.
|
||||||
* @details If enabled then the threads are enqueued on semaphores by
|
* @details If enabled then the threads are enqueued on semaphores by
|
||||||
* priority rather than in FIFO order.
|
* priority rather than in FIFO order.
|
||||||
*
|
*
|
||||||
* @note The default is @p FALSE. Enable this if you have special requirements.
|
* @note The default is @p FALSE. Enable this if you have special
|
||||||
* @note Requires @p CH_USE_SEMAPHORES.
|
* requirements.
|
||||||
|
* @note Requires @p CH_CFG_USE_SEMAPHORES.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_USE_SEMAPHORES_PRIORITY) || defined(__DOXYGEN__)
|
#define CH_CFG_USE_SEMAPHORES_PRIORITY FALSE
|
||||||
#define CH_USE_SEMAPHORES_PRIORITY FALSE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Atomic semaphore API.
|
|
||||||
* @details If enabled then the semaphores the @p chSemSignalWait() API
|
|
||||||
* is included in the kernel.
|
|
||||||
*
|
|
||||||
* @note The default is @p TRUE.
|
|
||||||
* @note Requires @p CH_USE_SEMAPHORES.
|
|
||||||
*/
|
|
||||||
#if !defined(CH_USE_SEMSW) || defined(__DOXYGEN__)
|
|
||||||
#define CH_USE_SEMSW TRUE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Mutexes APIs.
|
* @brief Mutexes APIs.
|
||||||
|
@ -182,9 +188,7 @@
|
||||||
*
|
*
|
||||||
* @note The default is @p TRUE.
|
* @note The default is @p TRUE.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_USE_MUTEXES) || defined(__DOXYGEN__)
|
#define CH_CFG_USE_MUTEXES TRUE
|
||||||
#define CH_USE_MUTEXES TRUE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Conditional Variables APIs.
|
* @brief Conditional Variables APIs.
|
||||||
|
@ -192,11 +196,9 @@
|
||||||
* in the kernel.
|
* in the kernel.
|
||||||
*
|
*
|
||||||
* @note The default is @p TRUE.
|
* @note The default is @p TRUE.
|
||||||
* @note Requires @p CH_USE_MUTEXES.
|
* @note Requires @p CH_CFG_USE_MUTEXES.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_USE_CONDVARS) || defined(__DOXYGEN__)
|
#define CH_CFG_USE_CONDVARS TRUE
|
||||||
#define CH_USE_CONDVARS TRUE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Conditional Variables APIs with timeout.
|
* @brief Conditional Variables APIs with timeout.
|
||||||
|
@ -204,11 +206,9 @@
|
||||||
* specification are included in the kernel.
|
* specification are included in the kernel.
|
||||||
*
|
*
|
||||||
* @note The default is @p TRUE.
|
* @note The default is @p TRUE.
|
||||||
* @note Requires @p CH_USE_CONDVARS.
|
* @note Requires @p CH_CFG_USE_CONDVARS.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_USE_CONDVARS_TIMEOUT) || defined(__DOXYGEN__)
|
#define CH_CFG_USE_CONDVARS_TIMEOUT TRUE
|
||||||
#define CH_USE_CONDVARS_TIMEOUT TRUE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Events Flags APIs.
|
* @brief Events Flags APIs.
|
||||||
|
@ -216,9 +216,7 @@
|
||||||
*
|
*
|
||||||
* @note The default is @p TRUE.
|
* @note The default is @p TRUE.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_USE_EVENTS) || defined(__DOXYGEN__)
|
#define CH_CFG_USE_EVENTS TRUE
|
||||||
#define CH_USE_EVENTS TRUE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Events Flags APIs with timeout.
|
* @brief Events Flags APIs with timeout.
|
||||||
|
@ -226,11 +224,9 @@
|
||||||
* are included in the kernel.
|
* are included in the kernel.
|
||||||
*
|
*
|
||||||
* @note The default is @p TRUE.
|
* @note The default is @p TRUE.
|
||||||
* @note Requires @p CH_USE_EVENTS.
|
* @note Requires @p CH_CFG_USE_EVENTS.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_USE_EVENTS_TIMEOUT) || defined(__DOXYGEN__)
|
#define CH_CFG_USE_EVENTS_TIMEOUT TRUE
|
||||||
#define CH_USE_EVENTS_TIMEOUT TRUE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Synchronous Messages APIs.
|
* @brief Synchronous Messages APIs.
|
||||||
|
@ -239,21 +235,18 @@
|
||||||
*
|
*
|
||||||
* @note The default is @p TRUE.
|
* @note The default is @p TRUE.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_USE_MESSAGES) || defined(__DOXYGEN__)
|
#define CH_CFG_USE_MESSAGES TRUE
|
||||||
#define CH_USE_MESSAGES TRUE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Synchronous Messages queuing mode.
|
* @brief Synchronous Messages queuing mode.
|
||||||
* @details If enabled then messages are served by priority rather than in
|
* @details If enabled then messages are served by priority rather than in
|
||||||
* FIFO order.
|
* FIFO order.
|
||||||
*
|
*
|
||||||
* @note The default is @p FALSE. Enable this if you have special requirements.
|
* @note The default is @p FALSE. Enable this if you have special
|
||||||
* @note Requires @p CH_USE_MESSAGES.
|
* requirements.
|
||||||
|
* @note Requires @p CH_CFG_USE_MESSAGES.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_USE_MESSAGES_PRIORITY) || defined(__DOXYGEN__)
|
#define CH_CFG_USE_MESSAGES_PRIORITY FALSE
|
||||||
#define CH_USE_MESSAGES_PRIORITY FALSE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Mailboxes APIs.
|
* @brief Mailboxes APIs.
|
||||||
|
@ -261,11 +254,9 @@
|
||||||
* included in the kernel.
|
* included in the kernel.
|
||||||
*
|
*
|
||||||
* @note The default is @p TRUE.
|
* @note The default is @p TRUE.
|
||||||
* @note Requires @p CH_USE_SEMAPHORES.
|
* @note Requires @p CH_CFG_USE_SEMAPHORES.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_USE_MAILBOXES) || defined(__DOXYGEN__)
|
#define CH_CFG_USE_MAILBOXES TRUE
|
||||||
#define CH_USE_MAILBOXES TRUE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief I/O Queues APIs.
|
* @brief I/O Queues APIs.
|
||||||
|
@ -273,9 +264,7 @@
|
||||||
*
|
*
|
||||||
* @note The default is @p TRUE.
|
* @note The default is @p TRUE.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_USE_QUEUES) || defined(__DOXYGEN__)
|
#define CH_CFG_USE_QUEUES TRUE
|
||||||
#define CH_USE_QUEUES TRUE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Core Memory Manager APIs.
|
* @brief Core Memory Manager APIs.
|
||||||
|
@ -284,9 +273,7 @@
|
||||||
*
|
*
|
||||||
* @note The default is @p TRUE.
|
* @note The default is @p TRUE.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_USE_MEMCORE) || defined(__DOXYGEN__)
|
#define CH_CFG_USE_MEMCORE TRUE
|
||||||
#define CH_USE_MEMCORE TRUE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Heap Allocator APIs.
|
* @brief Heap Allocator APIs.
|
||||||
|
@ -294,27 +281,11 @@
|
||||||
* in the kernel.
|
* in the kernel.
|
||||||
*
|
*
|
||||||
* @note The default is @p TRUE.
|
* @note The default is @p TRUE.
|
||||||
* @note Requires @p CH_USE_MEMCORE and either @p CH_USE_MUTEXES or
|
* @note Requires @p CH_CFG_USE_MEMCORE and either @p CH_CFG_USE_MUTEXES or
|
||||||
* @p CH_USE_SEMAPHORES.
|
* @p CH_CFG_USE_SEMAPHORES.
|
||||||
* @note Mutexes are recommended.
|
* @note Mutexes are recommended.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_USE_HEAP) || defined(__DOXYGEN__)
|
#define CH_CFG_USE_HEAP TRUE
|
||||||
#define CH_USE_HEAP TRUE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief C-runtime allocator.
|
|
||||||
* @details If enabled the the heap allocator APIs just wrap the C-runtime
|
|
||||||
* @p malloc() and @p free() functions.
|
|
||||||
*
|
|
||||||
* @note The default is @p FALSE.
|
|
||||||
* @note Requires @p CH_USE_HEAP.
|
|
||||||
* @note The C-runtime may or may not require @p CH_USE_MEMCORE, see the
|
|
||||||
* appropriate documentation.
|
|
||||||
*/
|
|
||||||
#if !defined(CH_USE_MALLOC_HEAP) || defined(__DOXYGEN__)
|
|
||||||
#define CH_USE_MALLOC_HEAP FALSE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Memory Pools Allocator APIs.
|
* @brief Memory Pools Allocator APIs.
|
||||||
|
@ -323,9 +294,7 @@
|
||||||
*
|
*
|
||||||
* @note The default is @p TRUE.
|
* @note The default is @p TRUE.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_USE_MEMPOOLS) || defined(__DOXYGEN__)
|
#define CH_CFG_USE_MEMPOOLS TRUE
|
||||||
#define CH_USE_MEMPOOLS TRUE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Dynamic Threads APIs.
|
* @brief Dynamic Threads APIs.
|
||||||
|
@ -333,12 +302,10 @@
|
||||||
* in the kernel.
|
* in the kernel.
|
||||||
*
|
*
|
||||||
* @note The default is @p TRUE.
|
* @note The default is @p TRUE.
|
||||||
* @note Requires @p CH_USE_WAITEXIT.
|
* @note Requires @p CH_CFG_USE_WAITEXIT.
|
||||||
* @note Requires @p CH_USE_HEAP and/or @p CH_USE_MEMPOOLS.
|
* @note Requires @p CH_CFG_USE_HEAP and/or @p CH_CFG_USE_MEMPOOLS.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_USE_DYNAMIC) || defined(__DOXYGEN__)
|
#define CH_CFG_USE_DYNAMIC TRUE
|
||||||
#define CH_USE_DYNAMIC TRUE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/** @} */
|
/** @} */
|
||||||
|
|
||||||
|
@ -349,6 +316,13 @@
|
||||||
*/
|
*/
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Debug option, kernel statistics.
|
||||||
|
*
|
||||||
|
* @note The default is @p FALSE.
|
||||||
|
*/
|
||||||
|
#define CH_DBG_STATISTICS TRUE
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Debug option, system state check.
|
* @brief Debug option, system state check.
|
||||||
* @details If enabled the correct call protocol for system APIs is checked
|
* @details If enabled the correct call protocol for system APIs is checked
|
||||||
|
@ -356,9 +330,7 @@
|
||||||
*
|
*
|
||||||
* @note The default is @p FALSE.
|
* @note The default is @p FALSE.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_DBG_SYSTEM_STATE_CHECK) || defined(__DOXYGEN__)
|
|
||||||
#define CH_DBG_SYSTEM_STATE_CHECK TRUE
|
#define CH_DBG_SYSTEM_STATE_CHECK TRUE
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Debug option, parameters checks.
|
* @brief Debug option, parameters checks.
|
||||||
|
@ -367,9 +339,7 @@
|
||||||
*
|
*
|
||||||
* @note The default is @p FALSE.
|
* @note The default is @p FALSE.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_DBG_ENABLE_CHECKS) || defined(__DOXYGEN__)
|
|
||||||
#define CH_DBG_ENABLE_CHECKS TRUE
|
#define CH_DBG_ENABLE_CHECKS TRUE
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Debug option, consistency checks.
|
* @brief Debug option, consistency checks.
|
||||||
|
@ -379,9 +349,7 @@
|
||||||
*
|
*
|
||||||
* @note The default is @p FALSE.
|
* @note The default is @p FALSE.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_DBG_ENABLE_ASSERTS) || defined(__DOXYGEN__)
|
|
||||||
#define CH_DBG_ENABLE_ASSERTS TRUE
|
#define CH_DBG_ENABLE_ASSERTS TRUE
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Debug option, trace buffer.
|
* @brief Debug option, trace buffer.
|
||||||
|
@ -390,9 +358,7 @@
|
||||||
*
|
*
|
||||||
* @note The default is @p FALSE.
|
* @note The default is @p FALSE.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_DBG_ENABLE_TRACE) || defined(__DOXYGEN__)
|
|
||||||
#define CH_DBG_ENABLE_TRACE TRUE
|
#define CH_DBG_ENABLE_TRACE TRUE
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Debug option, stack checks.
|
* @brief Debug option, stack checks.
|
||||||
|
@ -404,9 +370,7 @@
|
||||||
* @note The default failure mode is to halt the system with the global
|
* @note The default failure mode is to halt the system with the global
|
||||||
* @p panic_msg variable set to @p NULL.
|
* @p panic_msg variable set to @p NULL.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_DBG_ENABLE_STACK_CHECK) || defined(__DOXYGEN__)
|
|
||||||
#define CH_DBG_ENABLE_STACK_CHECK TRUE
|
#define CH_DBG_ENABLE_STACK_CHECK TRUE
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Debug option, stacks initialization.
|
* @brief Debug option, stacks initialization.
|
||||||
|
@ -416,22 +380,18 @@
|
||||||
*
|
*
|
||||||
* @note The default is @p FALSE.
|
* @note The default is @p FALSE.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_DBG_FILL_THREADS) || defined(__DOXYGEN__)
|
|
||||||
#define CH_DBG_FILL_THREADS TRUE
|
#define CH_DBG_FILL_THREADS TRUE
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Debug option, threads profiling.
|
* @brief Debug option, threads profiling.
|
||||||
* @details If enabled then a field is added to the @p Thread structure that
|
* @details If enabled then a field is added to the @p thread_t structure that
|
||||||
* counts the system ticks occurred while executing the thread.
|
* counts the system ticks occurred while executing the thread.
|
||||||
*
|
*
|
||||||
* @note The default is @p TRUE.
|
* @note The default is @p FALSE.
|
||||||
* @note This debug option is defaulted to TRUE because it is required by
|
* @note This debug option is not currently compatible with the
|
||||||
* some test cases into the test suite.
|
* tickless mode.
|
||||||
*/
|
*/
|
||||||
#if !defined(CH_DBG_THREADS_PROFILING) || defined(__DOXYGEN__)
|
#define CH_DBG_THREADS_PROFILING FALSE
|
||||||
#define CH_DBG_THREADS_PROFILING TRUE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/** @} */
|
/** @} */
|
||||||
|
|
||||||
|
@ -444,12 +404,10 @@
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Threads descriptor structure extension.
|
* @brief Threads descriptor structure extension.
|
||||||
* @details User fields added to the end of the @p Thread structure.
|
* @details User fields added to the end of the @p thread_t structure.
|
||||||
*/
|
*/
|
||||||
#if !defined(THREAD_EXT_FIELDS) || defined(__DOXYGEN__)
|
#define CH_CFG_THREAD_EXTRA_FIELDS \
|
||||||
#define THREAD_EXT_FIELDS \
|
|
||||||
/* Add threads custom fields here.*/
|
/* Add threads custom fields here.*/
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Threads initialization hook.
|
* @brief Threads initialization hook.
|
||||||
|
@ -458,11 +416,9 @@
|
||||||
* @note It is invoked from within @p chThdInit() and implicitly from all
|
* @note It is invoked from within @p chThdInit() and implicitly from all
|
||||||
* the threads creation APIs.
|
* the threads creation APIs.
|
||||||
*/
|
*/
|
||||||
#if !defined(THREAD_EXT_INIT_HOOK) || defined(__DOXYGEN__)
|
#define CH_CFG_THREAD_INIT_HOOK(tp) { \
|
||||||
#define THREAD_EXT_INIT_HOOK(tp) { \
|
|
||||||
/* Add threads initialization code here.*/ \
|
/* Add threads initialization code here.*/ \
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Threads finalization hook.
|
* @brief Threads finalization hook.
|
||||||
|
@ -472,53 +428,61 @@
|
||||||
* @note It is also invoked when the threads simply return in order to
|
* @note It is also invoked when the threads simply return in order to
|
||||||
* terminate.
|
* terminate.
|
||||||
*/
|
*/
|
||||||
#if !defined(THREAD_EXT_EXIT_HOOK) || defined(__DOXYGEN__)
|
#define CH_CFG_THREAD_EXIT_HOOK(tp) { \
|
||||||
#define THREAD_EXT_EXIT_HOOK(tp) { \
|
|
||||||
/* Add threads finalization code here.*/ \
|
/* Add threads finalization code here.*/ \
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Context switch hook.
|
* @brief Context switch hook.
|
||||||
* @details This hook is invoked just before switching between threads.
|
* @details This hook is invoked just before switching between threads.
|
||||||
*/
|
*/
|
||||||
#if !defined(THREAD_CONTEXT_SWITCH_HOOK) || defined(__DOXYGEN__)
|
#define CH_CFG_CONTEXT_SWITCH_HOOK(ntp, otp) { \
|
||||||
#define THREAD_CONTEXT_SWITCH_HOOK(ntp, otp) { \
|
|
||||||
/* System halt code here.*/ \
|
/* System halt code here.*/ \
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
/**
|
||||||
|
* @brief Idle thread enter hook.
|
||||||
|
* @note This hook is invoked within a critical zone, no OS functions
|
||||||
|
* should be invoked from here.
|
||||||
|
* @note This macro can be used to activate a power saving mode.
|
||||||
|
*/
|
||||||
|
#define CH_CFG_IDLE_ENTER_HOOK() { \
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Idle thread leave hook.
|
||||||
|
* @note This hook is invoked within a critical zone, no OS functions
|
||||||
|
* should be invoked from here.
|
||||||
|
* @note This macro can be used to deactivate a power saving mode.
|
||||||
|
*/
|
||||||
|
#define CH_CFG_IDLE_LEAVE_HOOK() { \
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Idle Loop hook.
|
* @brief Idle Loop hook.
|
||||||
* @details This hook is continuously invoked by the idle thread loop.
|
* @details This hook is continuously invoked by the idle thread loop.
|
||||||
*/
|
*/
|
||||||
#if !defined(IDLE_LOOP_HOOK) || defined(__DOXYGEN__)
|
#define CH_CFG_IDLE_LOOP_HOOK() { \
|
||||||
#define IDLE_LOOP_HOOK() { \
|
|
||||||
/* Idle loop code here.*/ \
|
/* Idle loop code here.*/ \
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief System tick event hook.
|
* @brief System tick event hook.
|
||||||
* @details This hook is invoked in the system tick handler immediately
|
* @details This hook is invoked in the system tick handler immediately
|
||||||
* after processing the virtual timers queue.
|
* after processing the virtual timers queue.
|
||||||
*/
|
*/
|
||||||
#if !defined(SYSTEM_TICK_EVENT_HOOK) || defined(__DOXYGEN__)
|
#define CH_CFG_SYSTEM_TICK_HOOK() { \
|
||||||
#define SYSTEM_TICK_EVENT_HOOK() { \
|
|
||||||
/* System tick event code here.*/ \
|
/* System tick event code here.*/ \
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief System halt hook.
|
* @brief System halt hook.
|
||||||
* @details This hook is invoked in case to a system halting error before
|
* @details This hook is invoked in case to a system halting error before
|
||||||
* the system is halted.
|
* the system is halted.
|
||||||
*/
|
*/
|
||||||
#if !defined(SYSTEM_HALT_HOOK) || defined(__DOXYGEN__)
|
#define CH_CFG_SYSTEM_HALT_HOOK(reason) { \
|
||||||
#define SYSTEM_HALT_HOOK() { \
|
|
||||||
/* System halt code here.*/ \
|
/* System halt code here.*/ \
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
/** @} */
|
/** @} */
|
||||||
|
|
||||||
|
|
|
@ -17,15 +17,15 @@
|
||||||
#include "ch.h"
|
#include "ch.h"
|
||||||
#include "hal.h"
|
#include "hal.h"
|
||||||
|
|
||||||
static VirtualTimer vt1, vt2;
|
static virtual_timer_t vt1, vt2;
|
||||||
|
|
||||||
static void restart(void *p) {
|
static void restart(void *p) {
|
||||||
|
|
||||||
(void)p;
|
(void)p;
|
||||||
|
|
||||||
chSysLockFromIsr();
|
chSysLockFromISR();
|
||||||
uartStartSendI(&UARTD1, 14, "Hello World!\r\n");
|
uartStartSendI(&UARTD1, 14, "Hello World!\r\n");
|
||||||
chSysUnlockFromIsr();
|
chSysUnlockFromISR();
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ledoff(void *p) {
|
static void ledoff(void *p) {
|
||||||
|
@ -51,11 +51,10 @@ static void txend2(UARTDriver *uartp) {
|
||||||
|
|
||||||
(void)uartp;
|
(void)uartp;
|
||||||
palClearPad(GPIOB, GPIOB_LED4);
|
palClearPad(GPIOB, GPIOB_LED4);
|
||||||
chSysLockFromIsr();
|
chSysLockFromISR();
|
||||||
if (chVTIsArmedI(&vt1))
|
|
||||||
chVTResetI(&vt1);
|
chVTResetI(&vt1);
|
||||||
chVTSetI(&vt1, MS2ST(5000), restart, NULL);
|
chVTDoSetI(&vt1, MS2ST(5000), restart, NULL);
|
||||||
chSysUnlockFromIsr();
|
chSysUnlockFromISR();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -78,11 +77,10 @@ static void rxchar(UARTDriver *uartp, uint16_t c) {
|
||||||
(void)c;
|
(void)c;
|
||||||
/* Flashing the LED each time a character is received.*/
|
/* Flashing the LED each time a character is received.*/
|
||||||
palSetPad(GPIOB, GPIOB_LED4);
|
palSetPad(GPIOB, GPIOB_LED4);
|
||||||
chSysLockFromIsr();
|
chSysLockFromISR();
|
||||||
if (chVTIsArmedI(&vt2))
|
|
||||||
chVTResetI(&vt2);
|
chVTResetI(&vt2);
|
||||||
chVTSetI(&vt2, MS2ST(200), ledoff, NULL);
|
chVTDoSetI(&vt2, MS2ST(200), ledoff, NULL);
|
||||||
chSysUnlockFromIsr();
|
chSysUnlockFromISR();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -96,12 +96,12 @@
|
||||||
*/
|
*/
|
||||||
#define STM32_I2C_USE_I2C1 FALSE
|
#define STM32_I2C_USE_I2C1 FALSE
|
||||||
#define STM32_I2C_USE_I2C2 FALSE
|
#define STM32_I2C_USE_I2C2 FALSE
|
||||||
|
#define STM32_I2C_BUSY_TIMEOUT 50
|
||||||
#define STM32_I2C_I2C1_IRQ_PRIORITY 5
|
#define STM32_I2C_I2C1_IRQ_PRIORITY 5
|
||||||
#define STM32_I2C_I2C2_IRQ_PRIORITY 5
|
#define STM32_I2C_I2C2_IRQ_PRIORITY 5
|
||||||
#define STM32_I2C_I2C1_DMA_PRIORITY 3
|
#define STM32_I2C_I2C1_DMA_PRIORITY 3
|
||||||
#define STM32_I2C_I2C2_DMA_PRIORITY 3
|
#define STM32_I2C_I2C2_DMA_PRIORITY 3
|
||||||
#define STM32_I2C_I2C1_DMA_ERROR_HOOK() chSysHalt()
|
#define STM32_I2C_DMA_ERROR_HOOK(i2cp) osalSysHalt("DMA failure")
|
||||||
#define STM32_I2C_I2C2_DMA_ERROR_HOOK() chSysHalt()
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* ICU driver system settings.
|
* ICU driver system settings.
|
||||||
|
@ -146,7 +146,13 @@
|
||||||
#define STM32_SPI_SPI2_DMA_PRIORITY 1
|
#define STM32_SPI_SPI2_DMA_PRIORITY 1
|
||||||
#define STM32_SPI_SPI1_IRQ_PRIORITY 10
|
#define STM32_SPI_SPI1_IRQ_PRIORITY 10
|
||||||
#define STM32_SPI_SPI2_IRQ_PRIORITY 10
|
#define STM32_SPI_SPI2_IRQ_PRIORITY 10
|
||||||
#define STM32_SPI_DMA_ERROR_HOOK(spip) chSysHalt()
|
#define STM32_SPI_DMA_ERROR_HOOK(spip) osalSysHalt("DMA failure")
|
||||||
|
|
||||||
|
/*
|
||||||
|
* ST driver system settings.
|
||||||
|
*/
|
||||||
|
#define STM32_ST_IRQ_PRIORITY 8
|
||||||
|
#define STM32_ST_USE_TIMER 2
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* UART driver system settings.
|
* UART driver system settings.
|
||||||
|
@ -160,12 +166,12 @@
|
||||||
#define STM32_UART_USART1_DMA_PRIORITY 0
|
#define STM32_UART_USART1_DMA_PRIORITY 0
|
||||||
#define STM32_UART_USART2_DMA_PRIORITY 0
|
#define STM32_UART_USART2_DMA_PRIORITY 0
|
||||||
#define STM32_UART_USART3_DMA_PRIORITY 0
|
#define STM32_UART_USART3_DMA_PRIORITY 0
|
||||||
#define STM32_UART_DMA_ERROR_HOOK(uartp) chSysHalt()
|
#define STM32_UART_DMA_ERROR_HOOK(uartp) osalSysHalt("DMA failure")
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* USB driver system settings.
|
* USB driver system settings.
|
||||||
*/
|
*/
|
||||||
#define STM32_USB_USE_USB1 TRUE
|
#define STM32_USB_USE_USB1 FALSE
|
||||||
#define STM32_USB_LOW_POWER_ON_SUSPEND FALSE
|
#define STM32_USB_LOW_POWER_ON_SUSPEND FALSE
|
||||||
#define STM32_USB_USB1_HP_IRQ_PRIORITY 13
|
#define STM32_USB_USB1_HP_IRQ_PRIORITY 13
|
||||||
#define STM32_USB_USB1_LP_IRQ_PRIORITY 14
|
#define STM32_USB_USB1_LP_IRQ_PRIORITY 14
|
||||||
|
|
Loading…
Reference in New Issue