Integrated NIL 4.0.

git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@12620 110e8d01-0319-4d1e-a829-52ad28d1bb01
This commit is contained in:
Giovanni Di Sirio 2019-02-02 10:59:16 +00:00
parent 8aa34e947c
commit 88a4752f81
49 changed files with 996 additions and 694 deletions

View File

@ -29,7 +29,7 @@
#define CHCONF_H
#define _CHIBIOS_NIL_CONF_
#define _CHIBIOS_NIL_CONF_VER_3_2_
#define _CHIBIOS_NIL_CONF_VER_4_0_
/*===========================================================================*/
/**
@ -39,11 +39,20 @@
/*===========================================================================*/
/**
* @brief Number of user threads in the application.
* @brief Maximum number of user threads in the application.
* @note This number is not inclusive of the idle thread which is
* Implicitly handled.
* implicitly handled.
* @note Set this value to be exactly equal to the number of threads you
* will use or you would be wasting RAM and cycles.
* @note This values also defines the number of available priorities
* (0..CH_CFG_MAX_THREADS-1).
*/
#define CH_CFG_NUM_THREADS 2
#define CH_CFG_MAX_THREADS 4
/**
* @brief Auto starts threads when @p chSysInit() is invoked.
*/
#define CH_CFG_AUTOSTART_THREADS TRUE
/** @} */
@ -87,6 +96,15 @@
*/
/*===========================================================================*/
/**
* @brief Threads synchronization APIs.
* @details If enabled then the @p chThdWait() function is included in
* the kernel.
*
* @note The default is @p TRUE.
*/
#define CH_CFG_USE_WAITEXIT TRUE
/**
* @brief Semaphores APIs.
* @details If enabled then the Semaphores APIs are included in the kernel.
@ -292,10 +310,8 @@
/**
* @brief System initialization hook.
*/
#if !defined(CH_CFG_SYSTEM_INIT_HOOK) || defined(__DOXYGEN__)
#define CH_CFG_SYSTEM_INIT_HOOK() { \
}
#endif
/**
* @brief Threads descriptor structure extension.
@ -311,6 +327,12 @@
/* Add custom threads initialization code here.*/ \
}
/**
* @brief Threads finalization hook.
* @details User finalization code added to the @p chThdExit() API.
*/
#define CH_CFG_THREAD_EXIT_HOOK(tp) {}
/**
* @brief Idle thread enter hook.
* @note This hook is invoked within a critical zone, no OS functions
@ -332,10 +354,8 @@
/**
* @brief System halt hook.
*/
#if !defined(CH_CFG_SYSTEM_HALT_HOOK) || defined(__DOXYGEN__)
#define CH_CFG_SYSTEM_HALT_HOOK(reason) { \
}
#endif
/** @} */

View File

@ -29,7 +29,7 @@
#define CHCONF_H
#define _CHIBIOS_NIL_CONF_
#define _CHIBIOS_NIL_CONF_VER_3_2_
#define _CHIBIOS_NIL_CONF_VER_4_0_
/*===========================================================================*/
/**
@ -39,11 +39,20 @@
/*===========================================================================*/
/**
* @brief Number of user threads in the application.
* @brief Maximum number of user threads in the application.
* @note This number is not inclusive of the idle thread which is
* Implicitly handled.
* implicitly handled.
* @note Set this value to be exactly equal to the number of threads you
* will use or you would be wasting RAM and cycles.
* @note This values also defines the number of available priorities
* (0..CH_CFG_MAX_THREADS-1).
*/
#define CH_CFG_NUM_THREADS 2
#define CH_CFG_MAX_THREADS 4
/**
* @brief Auto starts threads when @p chSysInit() is invoked.
*/
#define CH_CFG_AUTOSTART_THREADS TRUE
/** @} */
@ -87,6 +96,15 @@
*/
/*===========================================================================*/
/**
* @brief Threads synchronization APIs.
* @details If enabled then the @p chThdWait() function is included in
* the kernel.
*
* @note The default is @p TRUE.
*/
#define CH_CFG_USE_WAITEXIT TRUE
/**
* @brief Semaphores APIs.
* @details If enabled then the Semaphores APIs are included in the kernel.
@ -292,10 +310,8 @@
/**
* @brief System initialization hook.
*/
#if !defined(CH_CFG_SYSTEM_INIT_HOOK) || defined(__DOXYGEN__)
#define CH_CFG_SYSTEM_INIT_HOOK() { \
}
#endif
/**
* @brief Threads descriptor structure extension.
@ -311,6 +327,12 @@
/* Add custom threads initialization code here.*/ \
}
/**
* @brief Threads finalization hook.
* @details User finalization code added to the @p chThdExit() API.
*/
#define CH_CFG_THREAD_EXIT_HOOK(tp) {}
/**
* @brief Idle thread enter hook.
* @note This hook is invoked within a critical zone, no OS functions
@ -332,10 +354,8 @@
/**
* @brief System halt hook.
*/
#if !defined(CH_CFG_SYSTEM_HALT_HOOK) || defined(__DOXYGEN__)
#define CH_CFG_SYSTEM_HALT_HOOK(reason) { \
}
#endif
/** @} */

View File

@ -29,7 +29,7 @@
#define CHCONF_H
#define _CHIBIOS_NIL_CONF_
#define _CHIBIOS_NIL_CONF_VER_3_2_
#define _CHIBIOS_NIL_CONF_VER_4_0_
/*===========================================================================*/
/**
@ -39,11 +39,20 @@
/*===========================================================================*/
/**
* @brief Number of user threads in the application.
* @brief Maximum number of user threads in the application.
* @note This number is not inclusive of the idle thread which is
* Implicitly handled.
* implicitly handled.
* @note Set this value to be exactly equal to the number of threads you
* will use or you would be wasting RAM and cycles.
* @note This values also defines the number of available priorities
* (0..CH_CFG_MAX_THREADS-1).
*/
#define CH_CFG_NUM_THREADS 2
#define CH_CFG_MAX_THREADS 4
/**
* @brief Auto starts threads when @p chSysInit() is invoked.
*/
#define CH_CFG_AUTOSTART_THREADS TRUE
/** @} */
@ -87,6 +96,15 @@
*/
/*===========================================================================*/
/**
* @brief Threads synchronization APIs.
* @details If enabled then the @p chThdWait() function is included in
* the kernel.
*
* @note The default is @p TRUE.
*/
#define CH_CFG_USE_WAITEXIT TRUE
/**
* @brief Semaphores APIs.
* @details If enabled then the Semaphores APIs are included in the kernel.
@ -292,10 +310,8 @@
/**
* @brief System initialization hook.
*/
#if !defined(CH_CFG_SYSTEM_INIT_HOOK) || defined(__DOXYGEN__)
#define CH_CFG_SYSTEM_INIT_HOOK() { \
}
#endif
/**
* @brief Threads descriptor structure extension.
@ -311,6 +327,12 @@
/* Add custom threads initialization code here.*/ \
}
/**
* @brief Threads finalization hook.
* @details User finalization code added to the @p chThdExit() API.
*/
#define CH_CFG_THREAD_EXIT_HOOK(tp) {}
/**
* @brief Idle thread enter hook.
* @note This hook is invoked within a critical zone, no OS functions
@ -332,10 +354,8 @@
/**
* @brief System halt hook.
*/
#if !defined(CH_CFG_SYSTEM_HALT_HOOK) || defined(__DOXYGEN__)
#define CH_CFG_SYSTEM_HALT_HOOK(reason) { \
}
#endif
/** @} */

View File

@ -29,7 +29,7 @@
#define CHCONF_H
#define _CHIBIOS_NIL_CONF_
#define _CHIBIOS_NIL_CONF_VER_3_2_
#define _CHIBIOS_NIL_CONF_VER_4_0_
/*===========================================================================*/
/**
@ -39,11 +39,20 @@
/*===========================================================================*/
/**
* @brief Number of user threads in the application.
* @brief Maximum number of user threads in the application.
* @note This number is not inclusive of the idle thread which is
* Implicitly handled.
* implicitly handled.
* @note Set this value to be exactly equal to the number of threads you
* will use or you would be wasting RAM and cycles.
* @note This values also defines the number of available priorities
* (0..CH_CFG_MAX_THREADS-1).
*/
#define CH_CFG_NUM_THREADS 2
#define CH_CFG_MAX_THREADS 4
/**
* @brief Auto starts threads when @p chSysInit() is invoked.
*/
#define CH_CFG_AUTOSTART_THREADS TRUE
/** @} */
@ -87,6 +96,15 @@
*/
/*===========================================================================*/
/**
* @brief Threads synchronization APIs.
* @details If enabled then the @p chThdWait() function is included in
* the kernel.
*
* @note The default is @p TRUE.
*/
#define CH_CFG_USE_WAITEXIT TRUE
/**
* @brief Semaphores APIs.
* @details If enabled then the Semaphores APIs are included in the kernel.
@ -292,10 +310,8 @@
/**
* @brief System initialization hook.
*/
#if !defined(CH_CFG_SYSTEM_INIT_HOOK) || defined(__DOXYGEN__)
#define CH_CFG_SYSTEM_INIT_HOOK() { \
}
#endif
/**
* @brief Threads descriptor structure extension.
@ -311,6 +327,12 @@
/* Add custom threads initialization code here.*/ \
}
/**
* @brief Threads finalization hook.
* @details User finalization code added to the @p chThdExit() API.
*/
#define CH_CFG_THREAD_EXIT_HOOK(tp) {}
/**
* @brief Idle thread enter hook.
* @note This hook is invoked within a critical zone, no OS functions
@ -332,10 +354,8 @@
/**
* @brief System halt hook.
*/
#if !defined(CH_CFG_SYSTEM_HALT_HOOK) || defined(__DOXYGEN__)
#define CH_CFG_SYSTEM_HALT_HOOK(reason) { \
}
#endif
/** @} */

View File

@ -29,7 +29,7 @@
#define CHCONF_H
#define _CHIBIOS_NIL_CONF_
#define _CHIBIOS_NIL_CONF_VER_3_2_
#define _CHIBIOS_NIL_CONF_VER_4_0_
/*===========================================================================*/
/**
@ -39,11 +39,20 @@
/*===========================================================================*/
/**
* @brief Number of user threads in the application.
* @brief Maximum number of user threads in the application.
* @note This number is not inclusive of the idle thread which is
* Implicitly handled.
* implicitly handled.
* @note Set this value to be exactly equal to the number of threads you
* will use or you would be wasting RAM and cycles.
* @note This values also defines the number of available priorities
* (0..CH_CFG_MAX_THREADS-1).
*/
#define CH_CFG_NUM_THREADS 1
#define CH_CFG_MAX_THREADS 4
/**
* @brief Auto starts threads when @p chSysInit() is invoked.
*/
#define CH_CFG_AUTOSTART_THREADS TRUE
/** @} */
@ -87,6 +96,15 @@
*/
/*===========================================================================*/
/**
* @brief Threads synchronization APIs.
* @details If enabled then the @p chThdWait() function is included in
* the kernel.
*
* @note The default is @p TRUE.
*/
#define CH_CFG_USE_WAITEXIT TRUE
/**
* @brief Semaphores APIs.
* @details If enabled then the Semaphores APIs are included in the kernel.
@ -292,10 +310,8 @@
/**
* @brief System initialization hook.
*/
#if !defined(CH_CFG_SYSTEM_INIT_HOOK) || defined(__DOXYGEN__)
#define CH_CFG_SYSTEM_INIT_HOOK() { \
}
#endif
/**
* @brief Threads descriptor structure extension.
@ -311,6 +327,12 @@
/* Add custom threads initialization code here.*/ \
}
/**
* @brief Threads finalization hook.
* @details User finalization code added to the @p chThdExit() API.
*/
#define CH_CFG_THREAD_EXIT_HOOK(tp) {}
/**
* @brief Idle thread enter hook.
* @note This hook is invoked within a critical zone, no OS functions
@ -332,10 +354,8 @@
/**
* @brief System halt hook.
*/
#if !defined(CH_CFG_SYSTEM_HALT_HOOK) || defined(__DOXYGEN__)
#define CH_CFG_SYSTEM_HALT_HOOK(reason) { \
}
#endif
/** @} */

View File

@ -29,7 +29,7 @@
#define CHCONF_H
#define _CHIBIOS_NIL_CONF_
#define _CHIBIOS_NIL_CONF_VER_3_2_
#define _CHIBIOS_NIL_CONF_VER_4_0_
/*===========================================================================*/
/**
@ -39,11 +39,20 @@
/*===========================================================================*/
/**
* @brief Number of user threads in the application.
* @brief Maximum number of user threads in the application.
* @note This number is not inclusive of the idle thread which is
* Implicitly handled.
* implicitly handled.
* @note Set this value to be exactly equal to the number of threads you
* will use or you would be wasting RAM and cycles.
* @note This values also defines the number of available priorities
* (0..CH_CFG_MAX_THREADS-1).
*/
#define CH_CFG_NUM_THREADS 1
#define CH_CFG_MAX_THREADS 4
/**
* @brief Auto starts threads when @p chSysInit() is invoked.
*/
#define CH_CFG_AUTOSTART_THREADS TRUE
/** @} */
@ -87,6 +96,15 @@
*/
/*===========================================================================*/
/**
* @brief Threads synchronization APIs.
* @details If enabled then the @p chThdWait() function is included in
* the kernel.
*
* @note The default is @p TRUE.
*/
#define CH_CFG_USE_WAITEXIT TRUE
/**
* @brief Semaphores APIs.
* @details If enabled then the Semaphores APIs are included in the kernel.
@ -292,10 +310,8 @@
/**
* @brief System initialization hook.
*/
#if !defined(CH_CFG_SYSTEM_INIT_HOOK) || defined(__DOXYGEN__)
#define CH_CFG_SYSTEM_INIT_HOOK() { \
}
#endif
/**
* @brief Threads descriptor structure extension.
@ -311,6 +327,12 @@
/* Add custom threads initialization code here.*/ \
}
/**
* @brief Threads finalization hook.
* @details User finalization code added to the @p chThdExit() API.
*/
#define CH_CFG_THREAD_EXIT_HOOK(tp) {}
/**
* @brief Idle thread enter hook.
* @note This hook is invoked within a critical zone, no OS functions
@ -332,10 +354,8 @@
/**
* @brief System halt hook.
*/
#if !defined(CH_CFG_SYSTEM_HALT_HOOK) || defined(__DOXYGEN__)
#define CH_CFG_SYSTEM_HALT_HOOK(reason) { \
}
#endif
/** @} */

View File

@ -29,7 +29,7 @@
#define CHCONF_H
#define _CHIBIOS_NIL_CONF_
#define _CHIBIOS_NIL_CONF_VER_3_2_
#define _CHIBIOS_NIL_CONF_VER_4_0_
/*===========================================================================*/
/**
@ -39,11 +39,20 @@
/*===========================================================================*/
/**
* @brief Number of user threads in the application.
* @brief Maximum number of user threads in the application.
* @note This number is not inclusive of the idle thread which is
* Implicitly handled.
* implicitly handled.
* @note Set this value to be exactly equal to the number of threads you
* will use or you would be wasting RAM and cycles.
* @note This values also defines the number of available priorities
* (0..CH_CFG_MAX_THREADS-1).
*/
#define CH_CFG_NUM_THREADS 3
#define CH_CFG_MAX_THREADS 4
/**
* @brief Auto starts threads when @p chSysInit() is invoked.
*/
#define CH_CFG_AUTOSTART_THREADS TRUE
/** @} */
@ -87,6 +96,15 @@
*/
/*===========================================================================*/
/**
* @brief Threads synchronization APIs.
* @details If enabled then the @p chThdWait() function is included in
* the kernel.
*
* @note The default is @p TRUE.
*/
#define CH_CFG_USE_WAITEXIT TRUE
/**
* @brief Semaphores APIs.
* @details If enabled then the Semaphores APIs are included in the kernel.
@ -292,10 +310,8 @@
/**
* @brief System initialization hook.
*/
#if !defined(CH_CFG_SYSTEM_INIT_HOOK) || defined(__DOXYGEN__)
#define CH_CFG_SYSTEM_INIT_HOOK() { \
}
#endif
/**
* @brief Threads descriptor structure extension.
@ -311,6 +327,12 @@
/* Add custom threads initialization code here.*/ \
}
/**
* @brief Threads finalization hook.
* @details User finalization code added to the @p chThdExit() API.
*/
#define CH_CFG_THREAD_EXIT_HOOK(tp) {}
/**
* @brief Idle thread enter hook.
* @note This hook is invoked within a critical zone, no OS functions
@ -332,10 +354,8 @@
/**
* @brief System halt hook.
*/
#if !defined(CH_CFG_SYSTEM_HALT_HOOK) || defined(__DOXYGEN__)
#define CH_CFG_SYSTEM_HALT_HOOK(reason) { \
}
#endif
/** @} */

View File

@ -29,7 +29,7 @@
#define CHCONF_H
#define _CHIBIOS_NIL_CONF_
#define _CHIBIOS_NIL_CONF_VER_3_2_
#define _CHIBIOS_NIL_CONF_VER_4_0_
/*===========================================================================*/
/**
@ -39,11 +39,20 @@
/*===========================================================================*/
/**
* @brief Number of user threads in the application.
* @brief Maximum number of user threads in the application.
* @note This number is not inclusive of the idle thread which is
* Implicitly handled.
* implicitly handled.
* @note Set this value to be exactly equal to the number of threads you
* will use or you would be wasting RAM and cycles.
* @note This values also defines the number of available priorities
* (0..CH_CFG_MAX_THREADS-1).
*/
#define CH_CFG_NUM_THREADS 3
#define CH_CFG_MAX_THREADS 4
/**
* @brief Auto starts threads when @p chSysInit() is invoked.
*/
#define CH_CFG_AUTOSTART_THREADS TRUE
/** @} */
@ -87,6 +96,15 @@
*/
/*===========================================================================*/
/**
* @brief Threads synchronization APIs.
* @details If enabled then the @p chThdWait() function is included in
* the kernel.
*
* @note The default is @p TRUE.
*/
#define CH_CFG_USE_WAITEXIT TRUE
/**
* @brief Semaphores APIs.
* @details If enabled then the Semaphores APIs are included in the kernel.
@ -292,10 +310,8 @@
/**
* @brief System initialization hook.
*/
#if !defined(CH_CFG_SYSTEM_INIT_HOOK) || defined(__DOXYGEN__)
#define CH_CFG_SYSTEM_INIT_HOOK() { \
}
#endif
/**
* @brief Threads descriptor structure extension.
@ -311,6 +327,12 @@
/* Add custom threads initialization code here.*/ \
}
/**
* @brief Threads finalization hook.
* @details User finalization code added to the @p chThdExit() API.
*/
#define CH_CFG_THREAD_EXIT_HOOK(tp) {}
/**
* @brief Idle thread enter hook.
* @note This hook is invoked within a critical zone, no OS functions
@ -332,10 +354,8 @@
/**
* @brief System halt hook.
*/
#if !defined(CH_CFG_SYSTEM_HALT_HOOK) || defined(__DOXYGEN__)
#define CH_CFG_SYSTEM_HALT_HOOK(reason) { \
}
#endif
/** @} */

View File

@ -119,13 +119,12 @@ THD_FUNCTION(Thread2, arg) {
}
/*
* Threads static table, one entry per thread. The number of entries must
* match NIL_CFG_NUM_THREADS.
* Threads creation table, one entry per thread.
*/
THD_TABLE_BEGIN
THD_TABLE_ENTRY(waThread1, "blinker", Thread1, NULL)
THD_TABLE_ENTRY(wa_test_support, "test_support", test_support, (void *)&nil.threads[2])
THD_TABLE_ENTRY(waThread2, "tester", Thread2, NULL)
THD_TABLE_THREAD(0, "blinker", waThread1, Thread1, NULL)
THD_TABLE_THREAD(1, "test_support", wa_test_support, test_support, (void *)&nil.threads[2])
THD_TABLE_THREAD(2, "tester", waThread2, Thread2, NULL)
THD_TABLE_END
/*

View File

@ -29,7 +29,7 @@
#define CHCONF_H
#define _CHIBIOS_NIL_CONF_
#define _CHIBIOS_NIL_CONF_VER_3_2_
#define _CHIBIOS_NIL_CONF_VER_4_0_
/*===========================================================================*/
/**
@ -39,11 +39,20 @@
/*===========================================================================*/
/**
* @brief Number of user threads in the application.
* @brief Maximum number of user threads in the application.
* @note This number is not inclusive of the idle thread which is
* Implicitly handled.
* implicitly handled.
* @note Set this value to be exactly equal to the number of threads you
* will use or you would be wasting RAM and cycles.
* @note This values also defines the number of available priorities
* (0..CH_CFG_MAX_THREADS-1).
*/
#define CH_CFG_NUM_THREADS 4
#define CH_CFG_MAX_THREADS 4
/**
* @brief Auto starts threads when @p chSysInit() is invoked.
*/
#define CH_CFG_AUTOSTART_THREADS TRUE
/** @} */
@ -87,6 +96,15 @@
*/
/*===========================================================================*/
/**
* @brief Threads synchronization APIs.
* @details If enabled then the @p chThdWait() function is included in
* the kernel.
*
* @note The default is @p TRUE.
*/
#define CH_CFG_USE_WAITEXIT TRUE
/**
* @brief Semaphores APIs.
* @details If enabled then the Semaphores APIs are included in the kernel.
@ -292,10 +310,8 @@
/**
* @brief System initialization hook.
*/
#if !defined(CH_CFG_SYSTEM_INIT_HOOK) || defined(__DOXYGEN__)
#define CH_CFG_SYSTEM_INIT_HOOK() { \
}
#endif
/**
* @brief Threads descriptor structure extension.
@ -311,6 +327,12 @@
/* Add custom threads initialization code here.*/ \
}
/**
* @brief Threads finalization hook.
* @details User finalization code added to the @p chThdExit() API.
*/
#define CH_CFG_THREAD_EXIT_HOOK(tp) {}
/**
* @brief Idle thread enter hook.
* @note This hook is invoked within a critical zone, no OS functions
@ -332,10 +354,8 @@
/**
* @brief System halt hook.
*/
#if !defined(CH_CFG_SYSTEM_HALT_HOOK) || defined(__DOXYGEN__)
#define CH_CFG_SYSTEM_HALT_HOOK(reason) { \
}
#endif
/** @} */

View File

@ -81,14 +81,13 @@ THD_FUNCTION(Thread3, arg) {
}
/*
* Threads static table, one entry per thread. The number of entries must
* match NIL_CFG_NUM_THREADS.
* Threads creation table, one entry per thread.
*/
THD_TABLE_BEGIN
THD_TABLE_ENTRY(waThread1, "blinker1", Thread1, NULL)
THD_TABLE_ENTRY(waThread2, "blinker2", Thread2, NULL)
THD_TABLE_ENTRY(wa_test_support, "test_support", test_support, (void *)&nil.threads[3])
THD_TABLE_ENTRY(waThread3, "tester", Thread3, NULL)
THD_TABLE_THREAD(0, "blinker1", waThread1, Thread1, NULL)
THD_TABLE_THREAD(1, "blinker2", waThread2, Thread2, NULL)
THD_TABLE_THREAD(2, "test_support", wa_test_support, test_support, (void *)&nil.threads[3])
THD_TABLE_THREAD(3, "tester", waThread3, Thread3, NULL)
THD_TABLE_END
/*

View File

@ -29,7 +29,7 @@
#define CHCONF_H
#define _CHIBIOS_NIL_CONF_
#define _CHIBIOS_NIL_CONF_VER_3_2_
#define _CHIBIOS_NIL_CONF_VER_4_0_
/*===========================================================================*/
/**
@ -39,11 +39,20 @@
/*===========================================================================*/
/**
* @brief Number of user threads in the application.
* @brief Maximum number of user threads in the application.
* @note This number is not inclusive of the idle thread which is
* Implicitly handled.
* implicitly handled.
* @note Set this value to be exactly equal to the number of threads you
* will use or you would be wasting RAM and cycles.
* @note This values also defines the number of available priorities
* (0..CH_CFG_MAX_THREADS-1).
*/
#define CH_CFG_NUM_THREADS 3
#define CH_CFG_MAX_THREADS 3
/**
* @brief Auto starts threads when @p chSysInit() is invoked.
*/
#define CH_CFG_AUTOSTART_THREADS TRUE
/** @} */
@ -87,6 +96,15 @@
*/
/*===========================================================================*/
/**
* @brief Threads synchronization APIs.
* @details If enabled then the @p chThdWait() function is included in
* the kernel.
*
* @note The default is @p TRUE.
*/
#define CH_CFG_USE_WAITEXIT TRUE
/**
* @brief Semaphores APIs.
* @details If enabled then the Semaphores APIs are included in the kernel.
@ -292,10 +310,8 @@
/**
* @brief System initialization hook.
*/
#if !defined(CH_CFG_SYSTEM_INIT_HOOK) || defined(__DOXYGEN__)
#define CH_CFG_SYSTEM_INIT_HOOK() { \
}
#endif
/**
* @brief Threads descriptor structure extension.
@ -311,6 +327,12 @@
/* Add custom threads initialization code here.*/ \
}
/**
* @brief Threads finalization hook.
* @details User finalization code added to the @p chThdExit() API.
*/
#define CH_CFG_THREAD_EXIT_HOOK(tp) {}
/**
* @brief Idle thread enter hook.
* @note This hook is invoked within a critical zone, no OS functions
@ -332,10 +354,8 @@
/**
* @brief System halt hook.
*/
#if !defined(CH_CFG_SYSTEM_HALT_HOOK) || defined(__DOXYGEN__)
#define CH_CFG_SYSTEM_HALT_HOOK(reason) { \
}
#endif
/** @} */

View File

@ -69,13 +69,12 @@ THD_FUNCTION(Thread3, arg) {
}
/*
* Threads static table, one entry per thread. The number of entries must
* match NIL_CFG_NUM_THREADS.
* Threads creation table, one entry per thread.
*/
THD_TABLE_BEGIN
THD_TABLE_ENTRY(waThread1, "blinker1", Thread1, NULL)
THD_TABLE_ENTRY(waThread2, "blinker2", Thread2, NULL)
THD_TABLE_ENTRY(waThread3, "hello", Thread3, NULL)
THD_TABLE_THREAD(0, "blinker1", waThread1, Thread1, NULL)
THD_TABLE_THREAD(1, "blinker2", waThread2, Thread2, NULL)
THD_TABLE_THREAD(2, "hello", waThread3, Thread3, NULL)
THD_TABLE_END
/*

View File

@ -5,7 +5,7 @@
# Compiler options here.
ifeq ($(USE_OPT),)
USE_OPT = -O2 -ggdb -fomit-frame-pointer -falign-functions=16
USE_OPT = -O0 -ggdb -fomit-frame-pointer -falign-functions=16
endif
# C specific options here (added to USE_OPT).

View File

@ -29,7 +29,7 @@
#define CHCONF_H
#define _CHIBIOS_NIL_CONF_
#define _CHIBIOS_NIL_CONF_VER_3_2_
#define _CHIBIOS_NIL_CONF_VER_4_0_
/*===========================================================================*/
/**
@ -39,11 +39,20 @@
/*===========================================================================*/
/**
* @brief Number of user threads in the application.
* @brief Maximum number of user threads in the application.
* @note This number is not inclusive of the idle thread which is
* Implicitly handled.
* implicitly handled.
* @note Set this value to be exactly equal to the number of threads you
* will use or you would be wasting RAM and cycles.
* @note This values also defines the number of available priorities
* (0..CH_CFG_MAX_THREADS-1).
*/
#define CH_CFG_NUM_THREADS 4
#define CH_CFG_MAX_THREADS 4
/**
* @brief Auto starts threads when @p chSysInit() is invoked.
*/
#define CH_CFG_AUTOSTART_THREADS TRUE
/** @} */
@ -87,6 +96,15 @@
*/
/*===========================================================================*/
/**
* @brief Threads synchronization APIs.
* @details If enabled then the @p chThdWait() function is included in
* the kernel.
*
* @note The default is @p TRUE.
*/
#define CH_CFG_USE_WAITEXIT TRUE
/**
* @brief Semaphores APIs.
* @details If enabled then the Semaphores APIs are included in the kernel.
@ -257,21 +275,21 @@
*
* @note The default is @p FALSE.
*/
#define CH_DBG_SYSTEM_STATE_CHECK FALSE
#define CH_DBG_SYSTEM_STATE_CHECK TRUE
/**
* @brief Debug option, parameters checks.
*
* @note The default is @p FALSE.
*/
#define CH_DBG_ENABLE_CHECKS FALSE
#define CH_DBG_ENABLE_CHECKS TRUE
/**
* @brief System assertions.
*
* @note The default is @p FALSE.
*/
#define CH_DBG_ENABLE_ASSERTS FALSE
#define CH_DBG_ENABLE_ASSERTS TRUE
/**
* @brief Stack check.
@ -292,10 +310,8 @@
/**
* @brief System initialization hook.
*/
#if !defined(CH_CFG_SYSTEM_INIT_HOOK) || defined(__DOXYGEN__)
#define CH_CFG_SYSTEM_INIT_HOOK() { \
}
#endif
/**
* @brief Threads descriptor structure extension.
@ -311,6 +327,12 @@
/* Add custom threads initialization code here.*/ \
}
/**
* @brief Threads finalization hook.
* @details User finalization code added to the @p chThdExit() API.
*/
#define CH_CFG_THREAD_EXIT_HOOK(tp) {}
/**
* @brief Idle thread enter hook.
* @note This hook is invoked within a critical zone, no OS functions
@ -332,10 +354,8 @@
/**
* @brief System halt hook.
*/
#if !defined(CH_CFG_SYSTEM_HALT_HOOK) || defined(__DOXYGEN__)
#define CH_CFG_SYSTEM_HALT_HOOK(reason) { \
}
#endif
/** @} */

View File

@ -105,14 +105,13 @@ THD_FUNCTION(Thread3, arg) {
}
/*
* Threads static table, one entry per thread. The number of entries must
* match NIL_CFG_NUM_THREADS.
* Threads creation table, one entry per thread.
*/
THD_TABLE_BEGIN
THD_TABLE_ENTRY(waThread1, "blinker1", Thread1, NULL)
THD_TABLE_ENTRY(waThread2, "blinker2", Thread2, NULL)
THD_TABLE_ENTRY(wa_test_support, "test_support", test_support, (void *)&nil.threads[3])
THD_TABLE_ENTRY(waThread3, "tester", Thread3, NULL)
THD_TABLE_THREAD(0, "blinker1", waThread1, Thread1, NULL)
THD_TABLE_THREAD(1, "blinker2", waThread2, Thread2, NULL)
THD_TABLE_THREAD(2, "test_support", wa_test_support, test_support, (void *)&nil.threads[3])
THD_TABLE_THREAD(3, "tester", waThread3, Thread3, NULL)
THD_TABLE_END
/*

View File

@ -29,7 +29,7 @@
#define CHCONF_H
#define _CHIBIOS_NIL_CONF_
#define _CHIBIOS_NIL_CONF_VER_3_2_
#define _CHIBIOS_NIL_CONF_VER_4_0_
/*===========================================================================*/
/**
@ -39,11 +39,20 @@
/*===========================================================================*/
/**
* @brief Number of user threads in the application.
* @brief Maximum number of user threads in the application.
* @note This number is not inclusive of the idle thread which is
* Implicitly handled.
* implicitly handled.
* @note Set this value to be exactly equal to the number of threads you
* will use or you would be wasting RAM and cycles.
* @note This values also defines the number of available priorities
* (0..CH_CFG_MAX_THREADS-1).
*/
#define CH_CFG_NUM_THREADS 3
#define CH_CFG_MAX_THREADS 3
/**
* @brief Auto starts threads when @p chSysInit() is invoked.
*/
#define CH_CFG_AUTOSTART_THREADS TRUE
/** @} */
@ -87,6 +96,15 @@
*/
/*===========================================================================*/
/**
* @brief Threads synchronization APIs.
* @details If enabled then the @p chThdWait() function is included in
* the kernel.
*
* @note The default is @p TRUE.
*/
#define CH_CFG_USE_WAITEXIT TRUE
/**
* @brief Semaphores APIs.
* @details If enabled then the Semaphores APIs are included in the kernel.
@ -292,10 +310,8 @@
/**
* @brief System initialization hook.
*/
#if !defined(CH_CFG_SYSTEM_INIT_HOOK) || defined(__DOXYGEN__)
#define CH_CFG_SYSTEM_INIT_HOOK() { \
}
#endif
/**
* @brief Threads descriptor structure extension.
@ -311,6 +327,12 @@
/* Add custom threads initialization code here.*/ \
}
/**
* @brief Threads finalization hook.
* @details User finalization code added to the @p chThdExit() API.
*/
#define CH_CFG_THREAD_EXIT_HOOK(tp) {}
/**
* @brief Idle thread enter hook.
* @note This hook is invoked within a critical zone, no OS functions
@ -332,10 +354,8 @@
/**
* @brief System halt hook.
*/
#if !defined(CH_CFG_SYSTEM_HALT_HOOK) || defined(__DOXYGEN__)
#define CH_CFG_SYSTEM_HALT_HOOK(reason) { \
}
#endif
/** @} */

View File

@ -72,13 +72,12 @@ THD_FUNCTION(Thread3, arg) {
}
/*
* Threads static table, one entry per thread. The number of entries must
* match NIL_CFG_NUM_THREADS.
* Threads creation table, one entry per thread.
*/
THD_TABLE_BEGIN
THD_TABLE_ENTRY(waThread1, "blinker1", Thread1, NULL)
THD_TABLE_ENTRY(waThread2, "blinker2", Thread2, NULL)
THD_TABLE_ENTRY(waThread3, "hello", Thread3, NULL)
THD_TABLE_THREAD(0, "blinker1", waThread1, Thread1, NULL)
THD_TABLE_THREAD(1, "blinker2", waThread2, Thread2, NULL)
THD_TABLE_THREAD(2, "hello", waThread3, Thread3, NULL)
THD_TABLE_END
/*

View File

@ -29,7 +29,7 @@
#define CHCONF_H
#define _CHIBIOS_NIL_CONF_
#define _CHIBIOS_NIL_CONF_VER_3_2_
#define _CHIBIOS_NIL_CONF_VER_4_0_
/*===========================================================================*/
/**
@ -39,11 +39,20 @@
/*===========================================================================*/
/**
* @brief Number of user threads in the application.
* @brief Maximum number of user threads in the application.
* @note This number is not inclusive of the idle thread which is
* Implicitly handled.
* implicitly handled.
* @note Set this value to be exactly equal to the number of threads you
* will use or you would be wasting RAM and cycles.
* @note This values also defines the number of available priorities
* (0..CH_CFG_MAX_THREADS-1).
*/
#define CH_CFG_NUM_THREADS 3
#define CH_CFG_MAX_THREADS 3
/**
* @brief Auto starts threads when @p chSysInit() is invoked.
*/
#define CH_CFG_AUTOSTART_THREADS TRUE
/** @} */
@ -87,6 +96,15 @@
*/
/*===========================================================================*/
/**
* @brief Threads synchronization APIs.
* @details If enabled then the @p chThdWait() function is included in
* the kernel.
*
* @note The default is @p TRUE.
*/
#define CH_CFG_USE_WAITEXIT TRUE
/**
* @brief Semaphores APIs.
* @details If enabled then the Semaphores APIs are included in the kernel.
@ -292,10 +310,8 @@
/**
* @brief System initialization hook.
*/
#if !defined(CH_CFG_SYSTEM_INIT_HOOK) || defined(__DOXYGEN__)
#define CH_CFG_SYSTEM_INIT_HOOK() { \
}
#endif
/**
* @brief Threads descriptor structure extension.
@ -311,6 +327,12 @@
/* Add custom threads initialization code here.*/ \
}
/**
* @brief Threads finalization hook.
* @details User finalization code added to the @p chThdExit() API.
*/
#define CH_CFG_THREAD_EXIT_HOOK(tp) {}
/**
* @brief Idle thread enter hook.
* @note This hook is invoked within a critical zone, no OS functions
@ -332,10 +354,8 @@
/**
* @brief System halt hook.
*/
#if !defined(CH_CFG_SYSTEM_HALT_HOOK) || defined(__DOXYGEN__)
#define CH_CFG_SYSTEM_HALT_HOOK(reason) { \
}
#endif
/** @} */

View File

@ -68,13 +68,12 @@ THD_FUNCTION(Thread2, arg) {
}
/*
* Threads static table, one entry per thread. The number of entries must
* match CH_CFG_NUM_THREADS.
* Threads creation table, one entry per thread.
*/
THD_TABLE_BEGIN
THD_TABLE_ENTRY(waThread1, "blinker1", Thread1, NULL)
THD_TABLE_ENTRY(wa_test_support, "test_support", test_support, (void *)&nil.threads[2])
THD_TABLE_ENTRY(waThread2, "tester", Thread2, NULL)
THD_TABLE_THREAD(0, "blinker1", waThread1, Thread1, NULL)
THD_TABLE_THREAD(1, "test_support", wa_test_support, test_support, (void *)&nil.threads[2])
THD_TABLE_THREAD(2, "tester", waThread2, Thread2, NULL)
THD_TABLE_END
/*

View File

@ -29,7 +29,7 @@
#define CHCONF_H
#define _CHIBIOS_NIL_CONF_
#define _CHIBIOS_NIL_CONF_VER_3_2_
#define _CHIBIOS_NIL_CONF_VER_4_0_
/*===========================================================================*/
/**
@ -39,11 +39,20 @@
/*===========================================================================*/
/**
* @brief Number of user threads in the application.
* @brief Maximum number of user threads in the application.
* @note This number is not inclusive of the idle thread which is
* Implicitly handled.
* implicitly handled.
* @note Set this value to be exactly equal to the number of threads you
* will use or you would be wasting RAM and cycles.
* @note This values also defines the number of available priorities
* (0..CH_CFG_MAX_THREADS-1).
*/
#define CH_CFG_NUM_THREADS 2
#define CH_CFG_MAX_THREADS 2
/**
* @brief Auto starts threads when @p chSysInit() is invoked.
*/
#define CH_CFG_AUTOSTART_THREADS TRUE
/** @} */
@ -87,6 +96,15 @@
*/
/*===========================================================================*/
/**
* @brief Threads synchronization APIs.
* @details If enabled then the @p chThdWait() function is included in
* the kernel.
*
* @note The default is @p TRUE.
*/
#define CH_CFG_USE_WAITEXIT TRUE
/**
* @brief Semaphores APIs.
* @details If enabled then the Semaphores APIs are included in the kernel.
@ -292,10 +310,8 @@
/**
* @brief System initialization hook.
*/
#if !defined(CH_CFG_SYSTEM_INIT_HOOK) || defined(__DOXYGEN__)
#define CH_CFG_SYSTEM_INIT_HOOK() { \
}
#endif
/**
* @brief Threads descriptor structure extension.
@ -311,6 +327,12 @@
/* Add custom threads initialization code here.*/ \
}
/**
* @brief Threads finalization hook.
* @details User finalization code added to the @p chThdExit() API.
*/
#define CH_CFG_THREAD_EXIT_HOOK(tp) {}
/**
* @brief Idle thread enter hook.
* @note This hook is invoked within a critical zone, no OS functions
@ -332,10 +354,8 @@
/**
* @brief System halt hook.
*/
#if !defined(CH_CFG_SYSTEM_HALT_HOOK) || defined(__DOXYGEN__)
#define CH_CFG_SYSTEM_HALT_HOOK(reason) { \
}
#endif
/** @} */

View File

@ -51,12 +51,11 @@ THD_FUNCTION(Thread2, arg) {
/*
* Threads static table, one entry per thread. The number of entries must
* match NIL_CFG_NUM_THREADS.
* Threads creation table, one entry per thread.
*/
THD_TABLE_BEGIN
THD_TABLE_ENTRY(waThread1, "blinker", Thread1, NULL)
THD_TABLE_ENTRY(waThread2, "hello", Thread2, NULL)
THD_TABLE_THREAD(0, "blinker", waThread1, Thread1, NULL)
THD_TABLE_THREAD(1, "hello", waThread2, Thread2, NULL)
THD_TABLE_END
/*

View File

@ -29,7 +29,7 @@
#define CHCONF_H
#define _CHIBIOS_NIL_CONF_
#define _CHIBIOS_NIL_CONF_VER_3_2_
#define _CHIBIOS_NIL_CONF_VER_4_0_
/*===========================================================================*/
/**
@ -39,11 +39,20 @@
/*===========================================================================*/
/**
* @brief Number of user threads in the application.
* @brief Maximum number of user threads in the application.
* @note This number is not inclusive of the idle thread which is
* Implicitly handled.
* implicitly handled.
* @note Set this value to be exactly equal to the number of threads you
* will use or you would be wasting RAM and cycles.
* @note This values also defines the number of available priorities
* (0..CH_CFG_MAX_THREADS-1).
*/
#define CH_CFG_NUM_THREADS 3
#define CH_CFG_MAX_THREADS 3
/**
* @brief Auto starts threads when @p chSysInit() is invoked.
*/
#define CH_CFG_AUTOSTART_THREADS TRUE
/** @} */
@ -87,6 +96,15 @@
*/
/*===========================================================================*/
/**
* @brief Threads synchronization APIs.
* @details If enabled then the @p chThdWait() function is included in
* the kernel.
*
* @note The default is @p TRUE.
*/
#define CH_CFG_USE_WAITEXIT TRUE
/**
* @brief Semaphores APIs.
* @details If enabled then the Semaphores APIs are included in the kernel.
@ -292,10 +310,8 @@
/**
* @brief System initialization hook.
*/
#if !defined(CH_CFG_SYSTEM_INIT_HOOK) || defined(__DOXYGEN__)
#define CH_CFG_SYSTEM_INIT_HOOK() { \
}
#endif
/**
* @brief Threads descriptor structure extension.
@ -311,6 +327,12 @@
/* Add custom threads initialization code here.*/ \
}
/**
* @brief Threads finalization hook.
* @details User finalization code added to the @p chThdExit() API.
*/
#define CH_CFG_THREAD_EXIT_HOOK(tp) {}
/**
* @brief Idle thread enter hook.
* @note This hook is invoked within a critical zone, no OS functions
@ -332,10 +354,8 @@
/**
* @brief System halt hook.
*/
#if !defined(CH_CFG_SYSTEM_HALT_HOOK) || defined(__DOXYGEN__)
#define CH_CFG_SYSTEM_HALT_HOOK(reason) { \
}
#endif
/** @} */

View File

@ -72,13 +72,12 @@ THD_FUNCTION(Thread3, arg) {
}
/*
* Threads static table, one entry per thread. The number of entries must
* match NIL_CFG_NUM_THREADS.
* Threads creation table, one entry per thread.
*/
THD_TABLE_BEGIN
THD_TABLE_ENTRY(waThread1, "blinker1", Thread1, NULL)
THD_TABLE_ENTRY(waThread2, "blinker2", Thread2, NULL)
THD_TABLE_ENTRY(waThread3, "hello", Thread3, NULL)
THD_TABLE_THREAD(0, "blinker1", waThread1, Thread1, NULL)
THD_TABLE_THREAD(1, "blinker2", waThread2, Thread2, NULL)
THD_TABLE_THREAD(2, "hello", waThread3, Thread3, NULL)
THD_TABLE_END
/*

View File

@ -29,7 +29,7 @@
#define CHCONF_H
#define _CHIBIOS_NIL_CONF_
#define _CHIBIOS_NIL_CONF_VER_3_2_
#define _CHIBIOS_NIL_CONF_VER_4_0_
/*===========================================================================*/
/**
@ -39,11 +39,20 @@
/*===========================================================================*/
/**
* @brief Number of user threads in the application.
* @brief Maximum number of user threads in the application.
* @note This number is not inclusive of the idle thread which is
* Implicitly handled.
* implicitly handled.
* @note Set this value to be exactly equal to the number of threads you
* will use or you would be wasting RAM and cycles.
* @note This values also defines the number of available priorities
* (0..CH_CFG_MAX_THREADS-1).
*/
#define CH_CFG_NUM_THREADS 2
#define CH_CFG_MAX_THREADS 4
/**
* @brief Auto starts threads when @p chSysInit() is invoked.
*/
#define CH_CFG_AUTOSTART_THREADS TRUE
/** @} */
@ -87,6 +96,15 @@
*/
/*===========================================================================*/
/**
* @brief Threads synchronization APIs.
* @details If enabled then the @p chThdWait() function is included in
* the kernel.
*
* @note The default is @p TRUE.
*/
#define CH_CFG_USE_WAITEXIT TRUE
/**
* @brief Semaphores APIs.
* @details If enabled then the Semaphores APIs are included in the kernel.
@ -292,10 +310,8 @@
/**
* @brief System initialization hook.
*/
#if !defined(CH_CFG_SYSTEM_INIT_HOOK) || defined(__DOXYGEN__)
#define CH_CFG_SYSTEM_INIT_HOOK() { \
}
#endif
/**
* @brief Threads descriptor structure extension.
@ -311,6 +327,12 @@
/* Add custom threads initialization code here.*/ \
}
/**
* @brief Threads finalization hook.
* @details User finalization code added to the @p chThdExit() API.
*/
#define CH_CFG_THREAD_EXIT_HOOK(tp) {}
/**
* @brief Idle thread enter hook.
* @note This hook is invoked within a critical zone, no OS functions
@ -332,10 +354,8 @@
/**
* @brief System halt hook.
*/
#if !defined(CH_CFG_SYSTEM_HALT_HOOK) || defined(__DOXYGEN__)
#define CH_CFG_SYSTEM_HALT_HOOK(reason) { \
}
#endif
/** @} */

View File

@ -66,12 +66,11 @@ static THD_FUNCTION(Thread2, arg) {
}
/*
* Threads static table, one entry per thread. The number of entries must
* match NIL_CFG_NUM_THREADS.
* Threads creation table, one entry per thread.
*/
THD_TABLE_BEGIN
THD_TABLE_ENTRY(waThread1, "counter1", Thread1, NULL)
THD_TABLE_ENTRY(waThread2, "counter2", Thread2, NULL)
THD_TABLE_THREAD(0, "counter1", waThread1, Thread1, NULL)
THD_TABLE_THREAD(1, "counter2", waThread2, Thread2, NULL)
THD_TABLE_END
/*

View File

@ -29,7 +29,7 @@
#define CHCONF_H
#define _CHIBIOS_NIL_CONF_
#define _CHIBIOS_NIL_CONF_VER_3_2_
#define _CHIBIOS_NIL_CONF_VER_4_0_
/*===========================================================================*/
/**
@ -39,11 +39,20 @@
/*===========================================================================*/
/**
* @brief Number of user threads in the application.
* @brief Maximum number of user threads in the application.
* @note This number is not inclusive of the idle thread which is
* Implicitly handled.
* implicitly handled.
* @note Set this value to be exactly equal to the number of threads you
* will use or you would be wasting RAM and cycles.
* @note This values also defines the number of available priorities
* (0..CH_CFG_MAX_THREADS-1).
*/
#define CH_CFG_NUM_THREADS 2
#define CH_CFG_MAX_THREADS 4
/**
* @brief Auto starts threads when @p chSysInit() is invoked.
*/
#define CH_CFG_AUTOSTART_THREADS TRUE
/** @} */
@ -87,6 +96,15 @@
*/
/*===========================================================================*/
/**
* @brief Threads synchronization APIs.
* @details If enabled then the @p chThdWait() function is included in
* the kernel.
*
* @note The default is @p TRUE.
*/
#define CH_CFG_USE_WAITEXIT TRUE
/**
* @brief Semaphores APIs.
* @details If enabled then the Semaphores APIs are included in the kernel.
@ -292,10 +310,8 @@
/**
* @brief System initialization hook.
*/
#if !defined(CH_CFG_SYSTEM_INIT_HOOK) || defined(__DOXYGEN__)
#define CH_CFG_SYSTEM_INIT_HOOK() { \
}
#endif
/**
* @brief Threads descriptor structure extension.
@ -311,6 +327,12 @@
/* Add custom threads initialization code here.*/ \
}
/**
* @brief Threads finalization hook.
* @details User finalization code added to the @p chThdExit() API.
*/
#define CH_CFG_THREAD_EXIT_HOOK(tp) {}
/**
* @brief Idle thread enter hook.
* @note This hook is invoked within a critical zone, no OS functions
@ -332,10 +354,8 @@
/**
* @brief System halt hook.
*/
#if !defined(CH_CFG_SYSTEM_HALT_HOOK) || defined(__DOXYGEN__)
#define CH_CFG_SYSTEM_HALT_HOOK(reason) { \
}
#endif
/** @} */

View File

@ -66,12 +66,11 @@ static THD_FUNCTION(Thread2, arg) {
}
/*
* Threads static table, one entry per thread. The number of entries must
* match NIL_CFG_NUM_THREADS.
* Threads creation table, one entry per thread.
*/
THD_TABLE_BEGIN
THD_TABLE_ENTRY(waThread1, "counter1", Thread1, NULL)
THD_TABLE_ENTRY(waThread2, "counter2", Thread2, NULL)
THD_TABLE_THREAD(0, "counter1", waThread1, Thread1, NULL)
THD_TABLE_THREAD(1, "counter2", waThread2, Thread2, NULL)
THD_TABLE_END
/*

View File

@ -158,15 +158,9 @@ _port_thread_start:
mov r0, r5
mov lr, pc
bx r4
#if defined(_CHIBIOS_RT_CONF_)
mov r0, #0 /* MSG_OK */
bl chThdExit
_zombies: b _zombies
#endif
#if defined(_CHIBIOS_NIL_CONF_)
mov r0, #0
bl chSysHalt
#endif
#endif /* !defined(__DOXYGEN__) */

View File

@ -160,15 +160,9 @@ _port_thread_start:
mov r0, r5
mov lr, pc
bx r4
#if defined(_CHIBIOS_RT_CONF_)
mov r0, #0 /* MSG_OK */
bl chThdExit
_zombies: b _zombies
#endif
#if defined(_CHIBIOS_NIL_CONF_)
mov r0, #0
bl chSysHalt
#endif
#endif /* !defined(__DOXYGEN__) */

View File

@ -106,14 +106,9 @@ _port_thread_start:
cpsie i
mov r0, r5
blx r4
#if defined(_CHIBIOS_RT_CONF_)
movs r0, #0 /* MSG_OK */
bl chThdExit
#endif
#if defined(_CHIBIOS_NIL_CONF_)
mov r3, #0
bl chSysHalt
#endif
_zombies: b _zombies
/*--------------------------------------------------------------------------*
* Post-IRQ switch code.

View File

@ -117,14 +117,9 @@ _port_thread_start:
#endif
mov r0, r5
blx r4
#if defined(_CHIBIOS_RT_CONF_)
movs r0, #0 /* MSG_OK */
bl chThdExit
#endif
#if defined(_CHIBIOS_NIL_CONF_)
mov r3, #0
bl chSysHalt
#endif
_zombies: b _zombies
/*--------------------------------------------------------------------------*
* Post-IRQ switch code.

View File

@ -111,14 +111,9 @@ _port_thread_start:
cpsie i
mov r0, r5
blx r4
#if defined(_CHIBIOS_RT_CONF_)
movs r0, #0 /* MSG_OK */
bl chThdExit
#endif
#if defined(_CHIBIOS_NIL_CONF_)
mov r3, #0
bl chSysHalt
#endif
_zombies: b _zombies
/*
* Post-IRQ switch code.

View File

@ -121,14 +121,9 @@ _port_thread_start:
#endif
mov r0, r5
blx r4
#if defined(_CHIBIOS_RT_CONF_)
movs r0, #0 /* MSG_OK */
bl chThdExit
#endif
#if defined(_CHIBIOS_NIL_CONF_)
mov r3, #0
bl chSysHalt
#endif
_zombies: b _zombies
/*
* Post-IRQ switch code.

View File

@ -106,14 +106,9 @@ _port_thread_start PROC
cpsie i
mov r0, r5
blx r4
#if defined(_CHIBIOS_RT_CONF_)
movs r0, #0 /* MSG_OK */
bl chThdExit
#endif
#if defined(_CHIBIOS_NIL_CONF_)
mov r3, #0
bl chSysHalt
#endif
_zombies b _zombies
ENDP
/*

View File

@ -116,14 +116,9 @@ _port_thread_start PROC
#endif
mov r0, r5
blx r4
#if defined(_CHIBIOS_RT_CONF_)
movs r0, #0 /* MSG_OK */
bl chThdExit
#endif
#if defined(_CHIBIOS_NIL_CONF_)
mov r3, #0
bl chSysHalt
#endif
_zombies b _zombies
ENDP
/*

View File

@ -153,12 +153,7 @@ void _port_thread_start(void) {
asm volatile ("movw r24, r4");
asm volatile ("movw r30, r2");
asm volatile ("icall");
#if defined(_CHIBIOS_RT_)
asm volatile ("call chThdExit"); /* Used for avr5 Architecture. */
#endif
#if defined(_CHIBIOS_NIL_)
asm volatile ("call chSysHalt"); /* Used for avr5 Architecture. */
#endif
}
/** @} */

View File

@ -105,14 +105,8 @@ _port_thread_start:
mr r3, r31
mtctr r30
se_bctrl
#if defined(_CHIBIOS_RT_CONF_)
se_li r0, 0
e_bl chThdExit
#endif
#if defined(_CHIBIOS_NIL_CONF_)
se_li r0, 0
e_bl chSysHalt
#endif
#else /* PPC_USE_VLE == FALSE */

View File

@ -105,14 +105,8 @@ _port_thread_start:
mr r3, r31
mtctr r30
se_bctrl
#if defined(_CHIBIOS_RT_CONF_)
e_li r0, 0
e_bl chThdExit
#endif
#if defined(_CHIBIOS_NIL_CONF_)
se_li r0, 0
e_bl chSysHalt
#endif
#endif /* !defined(__DOXYGEN__) */

View File

@ -99,14 +99,8 @@ _port_thread_start:
mr r3, r31
mtctr r30
se_bctrl
#if defined(_CHIBIOS_RT_CONF_)
e_li r0, 0
e_bl chThdExit
#endif
#if defined(_CHIBIOS_NIL_CONF_)
se_li r0, 0
e_bl chSysHalt
#endif
#endif /* !defined(__DOXYGEN__) */

View File

@ -55,17 +55,17 @@
/**
* @brief Kernel version string.
*/
#define CH_KERNEL_VERSION "3.2.0"
#define CH_KERNEL_VERSION "4.0.0"
/**
* @brief Kernel version major number.
*/
#define CH_KERNEL_MAJOR 3
#define CH_KERNEL_MAJOR 4
/**
* @brief Kernel version minor number.
*/
#define CH_KERNEL_MINOR 2
#define CH_KERNEL_MINOR 0
/**
* @brief Kernel version patch number.
@ -81,7 +81,7 @@
* @note It is meant to be used in configuration files as switch.
*/
#if !defined(FALSE) || defined(__DOXYGEN__)
#define FALSE 0
#define FALSE 0
#endif
/**
@ -89,7 +89,7 @@
* @note It is meant to be used in configuration files as switch.
*/
#if !defined(TRUE) || defined(__DOXYGEN__)
#define TRUE 1
#define TRUE 1
#endif
/** @} */
@ -137,17 +137,31 @@
* @name Thread state related macros
* @{
*/
#define NIL_STATE_READY (tstate_t)0 /**< @brief Thread ready or
#define NIL_STATE_WTSTART (tstate_t)0 /**< @brief Thread not yet
started or terminated. */
#define NIL_STATE_READY (tstate_t)1 /**< @brief Thread ready or
executing. */
#define NIL_STATE_SLEEPING (tstate_t)1 /**< @brief Thread sleeping. */
#define NIL_STATE_SUSP (tstate_t)2 /**< @brief Thread suspended. */
#define NIL_STATE_WTQUEUE (tstate_t)3 /**< @brief On queue or semaph. */
#define NIL_STATE_WTOREVT (tstate_t)4 /**< @brief Waiting for events. */
#define NIL_THD_IS_READY(tp) ((tp)->state == NIL_STATE_READY)
#define NIL_THD_IS_SLEEPING(tp) ((tp)->state == NIL_STATE_SLEEPING)
#define NIL_THD_IS_SUSP(tp) ((tp)->state == NIL_STATE_SUSP)
#define NIL_THD_IS_WTQUEUE(tp) ((tp)->state == NIL_STATE_WTQUEUE)
#define NIL_THD_IS_WTOREVT(tp) ((tp)->state == NIL_STATE_WTOREVT)
#define NIL_STATE_SLEEPING (tstate_t)2 /**< @brief Thread sleeping. */
#define NIL_STATE_SUSPENDED (tstate_t)3 /**< @brief Thread suspended. */
#define NIL_STATE_WTEXIT (tstate_t)4 /**< @brief Waiting a thread. */
#define NIL_STATE_WTQUEUE (tstate_t)5 /**< @brief On queue or semaph. */
#define NIL_STATE_WTOREVT (tstate_t)6 /**< @brief Waiting for events. */
#define NIL_STATE_WTANDEVT (tstate_t)7 /**< @brief Waiting for events. */
#define NIL_STATE_FINAL (tstate_t)8 /**< @brief Thread terminated. */
#define NIL_THD_IS_WTSTART(tp) ((tp)->state == NIL_STATE_WTSTART)
#define NIL_THD_IS_READY(tp) ((tp)->state == NIL_STATE_READY)
#define NIL_THD_IS_SLEEPING(tp) ((tp)->state == NIL_STATE_SLEEPING)
#define NIL_THD_IS_SUSPENDED(tp) ((tp)->state == NIL_STATE_SUSPENDED)
#define NIL_THD_IS_WTEXIT(tp) ((tp)->state == NIL_STATE_WTEXIT)
#define NIL_THD_IS_WTQUEUE(tp) ((tp)->state == NIL_STATE_WTQUEUE)
#define NIL_THD_IS_WTOREVT(tp) ((tp)->state == NIL_STATE_WTOREVT)
#define NIL_THD_IS_WTANDEVT(tp) ((tp)->state == NIL_STATE_WTANDEVT)
#define NIL_THD_IS_FINAL(tp) ((tp)->state == NIL_STATE_FINAL)
#define CH_STATE_NAMES \
"WTSTART", "READY", "SLEEPING", "SUSPENDED", "WTEXIT", "WTQUEUE", \
"WTOREVT", "WTANDEVT", "FINAL"
/** @} */
/**
@ -170,12 +184,23 @@
/*===========================================================================*/
/*-*
* @brief Number of user threads in the application.
* @brief Maximum number of user threads in the application.
* @note This number is not inclusive of the idle thread which is
* implicitly handled.
* @note Set this value to be exactly equal to the number of threads you
* will use or you would be wasting RAM and cycles.
* @note This values also defines the number of available priorities
* (0..CH_CFG_MAX_THREADS-1).
*/
#if !defined(CH_CFG_NUM_THREADS) || defined(__DOXYGEN__)
#define CH_CFG_NUM_THREADS 2
#if !defined(CH_CFG_MAX_THREADS) || defined(__DOXYGEN__)
#define CH_CFG_MAX_THREADS 2
#endif
/*-*
* @brief Auto starts threads when @p chSysInit() is invoked.
*/
#if !defined(CH_CFG_AUTOSTART_THREADS) || defined(__DOXYGEN__)
#define CH_CFG_AUTOSTART_THREADS TRUE
#endif
/*-*
@ -208,6 +233,17 @@
#define CH_CFG_ST_TIMEDELTA 0
#endif
/*-*
* @brief Threads synchronization APIs.
* @details If enabled then the @p chThdWait() function is included in
* the kernel.
*
* @note The default is @p TRUE.
*/
#if !defined(CH_CFG_USE_WAITEXIT)
#define CH_CFG_USE_WAITEXIT TRUE
#endif
/*-*
* @brief Semaphores APIs.
* @details If enabled then the Semaphores APIs are included in the kernel.
@ -283,7 +319,8 @@
#if !defined(CH_CFG_USE_MEMPOOLS) || defined(__DOXYGEN__)
#define CH_CFG_USE_MEMPOOLS TRUE
#endif
/**
/*-*
* @brief Objects Factory APIs.
* @details If enabled then the objects factory APIs are included in the
* kernel.
@ -294,7 +331,7 @@
#define CH_CFG_USE_FACTORY TRUE
#endif
/**
/*-*
* @brief Maximum length for object names.
* @details If the specified length is zero then the name is stored by
* pointer but this could have unintended side effects.
@ -303,41 +340,52 @@
#define CH_CFG_FACTORY_MAX_NAMES_LENGTH 8
#endif
/**
/*-*
* @brief Enables the registry of generic objects.
*/
#if !defined(CH_CFG_FACTORY_OBJECTS_REGISTRY) || defined(__DOXYGEN__)
#define CH_CFG_FACTORY_OBJECTS_REGISTRY TRUE
#endif
/**
/*-*
* @brief Enables factory for generic buffers.
*/
#if !defined(CH_CFG_FACTORY_GENERIC_BUFFERS) || defined(__DOXYGEN__)
#define CH_CFG_FACTORY_GENERIC_BUFFERS TRUE
#endif
/**
/*-*
* @brief Enables factory for semaphores.
*/
#if !defined(CH_CFG_FACTORY_SEMAPHORES) || defined(__DOXYGEN__)
#define CH_CFG_FACTORY_SEMAPHORES TRUE
#endif
/**
/*-*
* @brief Enables factory for mailboxes.
*/
#if !defined(CH_CFG_FACTORY_MAILBOXES) || defined(__DOXYGEN__)
#define CH_CFG_FACTORY_MAILBOXES TRUE
#endif
/**
/*-*
* @brief Enables factory for objects FIFOs.
*/
#if !defined(CH_CFG_FACTORY_OBJ_FIFOS) || defined(__DOXYGEN__)
#define CH_CFG_FACTORY_OBJ_FIFOS TRUE
#endif
/*-*
* @brief Pipes APIs.
* @details If enabled then the pipes APIs are included
* in the kernel.
*
* @note The default is @p TRUE.
*/
#if !defined(CH_CFG_USE_PIPES) || defined(__DOXYGEN__)
#define CH_CFG_USE_PIPES TRUE
#endif
/*-*
* @brief Debug option, kernel statistics.
*
@ -407,6 +455,14 @@
#define CH_CFG_THREAD_EXT_INIT_HOOK(tp) {}
#endif
/*-*
* @brief Threads finalization hook.
* @details User finalization code added to the @p chThdExit() API.
*/
#if !defined(CH_CFG_THREAD_EXIT_HOOK) || defined(__DOXYGEN__)
#define CH_CFG_THREAD_EXIT_HOOK(tp) {}
#endif
/*-*
* @brief Idle thread enter hook.
* @note This hook is invoked within a critical zone, no OS functions
@ -479,15 +535,15 @@
#error "missing or wrong configuration file"
#endif
#if !defined(_CHIBIOS_NIL_CONF_VER_3_2_)
#if !defined(_CHIBIOS_NIL_CONF_VER_4_0_)
#error "obsolete or unknown configuration file"
#endif
#if CH_CFG_NUM_THREADS < 1
#if CH_CFG_MAX_THREADS < 1
#error "at least one thread must be defined"
#endif
#if CH_CFG_NUM_THREADS > 16
#if CH_CFG_MAX_THREADS > 16
#error "ChibiOS/NIL is not recommended for thread-intensive applications," \
"consider ChibiOS/RT instead"
#endif
@ -562,20 +618,31 @@ typedef uint16_t sysinterval_t;
typedef uint32_t time_conv_t;
#endif
/**
* @brief Type of a structure representing the system.
*/
typedef struct nil_system nil_system_t;
/**
* @brief Thread function.
*/
typedef void (*tfunc_t)(void *p);
/**
* @brief Type of a structure representing a thread static configuration.
*/
typedef struct nil_thread_cfg thread_config_t;
/**
* @brief Type of a structure representing a thread.
* @note It is required as an early definition.
*/
typedef struct nil_thread thread_t;
#include "chcore.h"
/**
* @brief Structure representing a queue of threads.
* @brief Type of a thread reference.
*/
struct nil_threads_queue {
volatile cnt_t cnt; /**< @brief Threads Queue counter. */
};
typedef thread_t * thread_reference_t;
/**
* @brief Type of a queue of threads.
@ -591,45 +658,43 @@ typedef struct nil_threads_queue threads_queue_t;
typedef threads_queue_t semaphore_t;
#endif /* CH_CFG_USE_SEMAPHORES == TRUE */
/**
* @brief Thread function.
*/
typedef void (*tfunc_t)(void *p);
/* Late inclusion of port core layer.*/
#include "chcore.h"
/**
* @brief Type of a structure representing a thread static configuration.
* @brief Structure representing a queue of threads.
*/
typedef struct nil_thread_cfg thread_config_t;
struct nil_threads_queue {
volatile cnt_t cnt; /**< @brief Threads Queue counter. */
};
/**
* @brief Structure representing a thread static configuration.
*/
struct nil_thread_cfg {
tprio_t prio; /**< @brief Thread priority slot. */
const char *namep; /**< @brief Thread name, for debugging. */
stkalign_t *wbase; /**< @brief Thread working area base. */
stkalign_t *wend; /**< @brief Thread working area end. */
const char *namep; /**< @brief Thread name, for debugging. */
tfunc_t funcp; /**< @brief Thread function. */
void *arg; /**< @brief Thread function argument. */
};
/**
* @brief Type of a thread reference.
*/
typedef thread_t * thread_reference_t;
/**
* @brief Structure representing a thread.
*/
struct nil_thread {
struct port_context ctx; /**< @brief Processor context. */
tstate_t state; /**< @brief Thread state. */
/* Note, the following union contains a pointer while the thread is in a
sleeping state (!NIL_THD_IS_READY()) else contains the wake-up message.*/
/* Note, the following union contains a pointer/value while the thread is
in a sleeping state or a wake-up message when the thread is made ready.*/
union {
msg_t msg; /**< @brief Wake-up message. */
void *p; /**< @brief Generic pointer. */
nil_system_t *nsp; /**< @brief Pointer to nil base struct. */
thread_reference_t *trp; /**< @brief Pointer to thread reference.*/
threads_queue_t *tqp; /**< @brief Pointer to thread queue. */
thread_t *tp; /**< @brief Pointer to thread. */
#if (CH_CFG_USE_SEMAPHORES == TRUE) || defined(__DOXYGEN__)
semaphore_t *semp; /**< @brief Pointer to semaphore. */
#endif
@ -649,11 +714,6 @@ struct nil_thread {
CH_CFG_THREAD_EXT_FIELDS
};
/**
* @brief Type of a structure representing the system.
*/
typedef struct nil_system nil_system_t;
/**
* @brief System data structure.
* @note This structure contain all the data areas used by the OS except
@ -709,7 +769,7 @@ struct nil_system {
/**
* @brief Thread structures for all the defined threads.
*/
thread_t threads[CH_CFG_NUM_THREADS + 1];
thread_t threads[CH_CFG_MAX_THREADS + 1];
};
/*===========================================================================*/
@ -734,20 +794,21 @@ struct nil_system {
* @brief Start of user threads table.
*/
#define THD_TABLE_BEGIN \
const thread_config_t nil_thd_configs[CH_CFG_NUM_THREADS + 1] = {
const thread_config_t nil_thd_configs[] = {
/**
* @brief Entry of user threads table
*/
#define THD_TABLE_ENTRY(wap, name, funcp, arg) \
{wap, ((stkalign_t *)(wap)) + (sizeof (wap) / sizeof(stkalign_t)), \
name, funcp, arg},
#define THD_TABLE_THREAD(prio, name, wap, funcp, arg) \
{prio, name, \
wap, ((stkalign_t *)(wap)) + (sizeof (wap) / sizeof(stkalign_t)), \
funcp, arg},
/**
* @brief End of user threads table.
*/
#define THD_TABLE_END \
{THD_IDLE_BASE, THD_IDLE_END, "idle", NULL, NULL} \
{CH_CFG_MAX_THREADS, "idle", THD_IDLE_BASE, THD_IDLE_END, NULL, NULL} \
};
/** @} */
@ -1304,7 +1365,7 @@ struct nil_system {
*
* @init
*/
#define chSemObjectInit(sp, n) ((sp)->cnt = (n))
#define chSemObjectInit(sp, n) ((sp)->cnt = n)
/**
* @brief Performs a wait operation on a semaphore.
@ -1509,7 +1570,7 @@ struct nil_system {
extern stkalign_t __main_thread_stack_base__, __main_thread_stack_end__;
#endif
extern nil_system_t nil;
extern const thread_config_t nil_thd_configs[CH_CFG_NUM_THREADS + 1];
extern const thread_config_t nil_thd_configs[];
#endif
#ifdef __cplusplus
@ -1529,6 +1590,12 @@ extern "C" {
void chSchDoReschedule(void);
void chSchRescheduleS(void);
msg_t chSchGoSleepTimeoutS(tstate_t newstate, sysinterval_t timeout);
thread_t *chThdCreateI(const thread_config_t *tcp);
thread_t *chThdCreate(const thread_config_t *tcp);
void chThdExit(msg_t msg);
#if CH_CFG_USE_WAITEXIT == TRUE
msg_t chThdWait(thread_t *tp);
#endif
msg_t chThdSuspendTimeoutS(thread_reference_t *trp, sysinterval_t timeout);
void chThdResumeI(thread_reference_t *trp, msg_t msg);
void chThdResume(thread_reference_t *trp, msg_t msg);
@ -1550,6 +1617,7 @@ extern "C" {
void chEvtSignal(thread_t *tp, eventmask_t mask);
void chEvtSignalI(thread_t *tp, eventmask_t mask);
eventmask_t chEvtWaitAnyTimeout(eventmask_t mask, sysinterval_t timeout);
eventmask_t chEvtWaitAllTimeout(eventmask_t mask, sysinterval_t timeout);
#endif
#if CH_DBG_SYSTEM_STATE_CHECK == TRUE
void _dbg_check_disable(void);

View File

@ -55,7 +55,6 @@ nil_system_t nil;
*
* @param[in] state thread state
* @param[in] p object pointer
* @return Pointer to the thread.
*/
static thread_t *nil_find_thread(tstate_t state, void * p) {
thread_t *tp = nil.threads;
@ -67,7 +66,7 @@ static thread_t *nil_find_thread(tstate_t state, void * p) {
}
tp++;
chDbgAssert(tp < &nil.threads[CH_CFG_NUM_THREADS],
chDbgAssert(tp < &nil.threads[CH_CFG_MAX_THREADS],
"pointer out of range");
}
}
@ -80,14 +79,15 @@ static thread_t *nil_find_thread(tstate_t state, void * p) {
* @param[in] cnt number of threads to be readied as a negative number,
* non negative numbers are ignored
* @param[in] msg the wakeup message
* @return Always zero.
*
* @iclass
*/
static cnt_t nil_ready_all(void * p, cnt_t cnt, msg_t msg) {
thread_t *tp = nil.threads;;
while (cnt < (cnt_t)0) {
chDbgAssert(tp < &nil.threads[CH_CFG_NUM_THREADS],
chDbgAssert(tp < &nil.threads[CH_CFG_MAX_THREADS],
"pointer out of range");
/* Is this thread waiting on this queue?*/
@ -271,47 +271,10 @@ void chDbgCheckClassS(void) {
* @special
*/
void chSysInit(void) {
thread_t *tp;
const thread_config_t *tcp;
#if CH_DBG_SYSTEM_STATE_CHECK == TRUE
nil.isr_cnt = (cnt_t)0;
nil.lock_cnt = (cnt_t)0;
#endif
/* System initialization hook.*/
CH_CFG_SYSTEM_INIT_HOOK();
/* Iterates through the list of defined threads.*/
tp = &nil.threads[0];
tcp = nil_thd_configs;
while (tp < &nil.threads[CH_CFG_NUM_THREADS]) {
#if CH_DBG_ENABLE_STACK_CHECK
tp->wabase = (stkalign_t *)tcp->wbase;
#endif
/* Port dependent thread initialization.*/
PORT_SETUP_CONTEXT(tp, tcp->wbase, tcp->wend, tcp->funcp, tcp->arg);
/* Initialization hook.*/
CH_CFG_THREAD_EXT_INIT_HOOK(tp);
tp++;
tcp++;
}
#if CH_DBG_ENABLE_STACK_CHECK
/* The idle thread is a special case because its stack is set up by the
runtime environment.*/
tp->wabase = THD_IDLE_BASE;
#endif
/* Interrupts partially enabled. It is equivalent to entering the
kernel critical zone.*/
chSysSuspend();
#if CH_DBG_SYSTEM_STATE_CHECK == TRUE
nil.lock_cnt = (cnt_t)1;
#endif
/* Architecture layer initialization.*/
port_init();
/* Memory core initialization, if enabled.*/
#if CH_CFG_USE_MEMCORE == TRUE
@ -328,14 +291,37 @@ void chSysInit(void) {
_factory_init();
#endif
/* Port layer initialization last because it depend on some of the
initializations performed before.*/
port_init();
/* System initialization hook.*/
CH_CFG_SYSTEM_INIT_HOOK();
/* Runs the highest priority thread, the current one becomes the idle
thread.*/
nil.current = nil.next = nil.threads;
port_switch(nil.current, tp);
/* Making idle the current thread, this may change after rescheduling.*/
nil.next = nil.current = &nil.threads[CH_CFG_MAX_THREADS];
nil.current->state = NIL_STATE_READY;
#if CH_DBG_ENABLE_STACK_CHECK == TRUE
/* The idle thread is a special case because its stack is set up by the
runtime environment.*/
nil.threads[CH_CFG_MAX_THREADS].wabase = THD_IDLE_BASE;
#endif
/* Interrupts partially enabled. It is equivalent to entering the
kernel critical zone.*/
chSysSuspend();
#if CH_DBG_SYSTEM_STATE_CHECK == TRUE
nil.lock_cnt = (cnt_t)1;
#endif
#if CH_CFG_AUTOSTART_THREADS == TRUE
/* Iterates through the list of threads to be auto-started.*/
tcp = nil_thd_configs;
do {
chThdCreateI(tcp);
tcp++;
} while (tcp->funcp != NULL);
#endif
/* Starting the dance.*/
chSchRescheduleS();
chSysUnlock();
}
@ -397,7 +383,7 @@ void chSysTimerHandlerI(void) {
if (NIL_THD_IS_WTQUEUE(tp)) {
tp->u1.semp->cnt++;
}
else if (NIL_THD_IS_SUSP(tp)) {
else if (NIL_THD_IS_SUSPENDED(tp)) {
*tp->u1.trp = NULL;
}
/*lint -restore*/
@ -409,7 +395,7 @@ void chSysTimerHandlerI(void) {
chSysUnlockFromISR();
tp++;
chSysLockFromISR();
} while (tp < &nil.threads[CH_CFG_NUM_THREADS]);
} while (tp < &nil.threads[CH_CFG_MAX_THREADS]);
#else
thread_t *tp = &nil.threads[0];
sysinterval_t next = (sysinterval_t)0;
@ -437,7 +423,7 @@ void chSysTimerHandlerI(void) {
tp->u1.tqp->cnt++;
}
else {
if (NIL_THD_IS_SUSP(tp)) {
if (NIL_THD_IS_SUSPENDED(tp)) {
*tp->u1.trp = NULL;
}
}
@ -455,7 +441,7 @@ void chSysTimerHandlerI(void) {
chSysUnlockFromISR();
tp++;
chSysLockFromISR();
} while (tp < &nil.threads[CH_CFG_NUM_THREADS]);
} while (tp < &nil.threads[CH_CFG_MAX_THREADS]);
nil.lasttime = nil.nexttime;
if (next > (sysinterval_t)0) {
@ -601,7 +587,7 @@ void chSysPolledDelayX(rtcnt_t cycles) {
thread_t *chSchReadyI(thread_t *tp, msg_t msg) {
chDbgCheckClassI();
chDbgCheck((tp >= nil.threads) && (tp < &nil.threads[CH_CFG_NUM_THREADS]));
chDbgCheck((tp >= nil.threads) && (tp < &nil.threads[CH_CFG_MAX_THREADS]));
chDbgAssert(!NIL_THD_IS_READY(tp), "already ready");
chDbgAssert(nil.next <= nil.current, "priority ordering");
@ -643,7 +629,7 @@ void chSchDoReschedule(void) {
thread_t *otp = nil.current;
nil.current = nil.next;
if (otp == &nil.threads[CH_CFG_NUM_THREADS]) {
if (otp == &nil.threads[CH_CFG_MAX_THREADS]) {
CH_CFG_IDLE_LEAVE_HOOK();
}
port_switch(nil.next, otp);
@ -685,7 +671,7 @@ msg_t chSchGoSleepTimeoutS(tstate_t newstate, sysinterval_t timeout) {
chDbgCheckClassS();
chDbgAssert(otp != &nil.threads[CH_CFG_NUM_THREADS],
chDbgAssert(otp != &nil.threads[CH_CFG_MAX_THREADS],
"idle cannot sleep");
/* Storing the wait object for the current thread.*/
@ -733,7 +719,7 @@ msg_t chSchGoSleepTimeoutS(tstate_t newstate, sysinterval_t timeout) {
/* Is this thread ready to execute?*/
if (NIL_THD_IS_READY(ntp)) {
nil.current = nil.next = ntp;
if (ntp == &nil.threads[CH_CFG_NUM_THREADS]) {
if (ntp == &nil.threads[CH_CFG_MAX_THREADS]) {
CH_CFG_IDLE_ENTER_HOOK();
}
port_switch(ntp, otp);
@ -742,11 +728,142 @@ msg_t chSchGoSleepTimeoutS(tstate_t newstate, sysinterval_t timeout) {
/* Points to the next thread in lowering priority order.*/
ntp++;
chDbgAssert(ntp <= &nil.threads[CH_CFG_NUM_THREADS],
chDbgAssert(ntp <= &nil.threads[CH_CFG_MAX_THREADS],
"pointer out of range");
}
}
/**
* @brief Creates a new thread into a static memory area.
* @details The new thread is initialized and make ready to execute.
* @note A thread can terminate by calling @p chThdExit() or by simply
* returning from its main function.
*
* @param[out] tcp pointer to the thread configuration structure
* @return The pointer to the @p thread_t structure allocated for
* the thread.
*
* @iclass
*/
thread_t *chThdCreateI(const thread_config_t *tcp) {
thread_t *tp;
chDbgCheck(tcp->prio < CH_CFG_MAX_THREADS);
chDbgCheckClassI();
/* Pointer to the thread slot to be used.*/
tp = &nil.threads[tcp->prio];
chDbgAssert(NIL_THD_IS_WTSTART(tp) || NIL_THD_IS_FINAL(tp),
"priority slot taken");
#if (CH_DBG_ENABLE_STACK_CHECK == TRUE) || defined(__DOXYGEN__)
tp->wabase = (stkalign_t *)tcp->wbase;
#endif
/* Port dependent thread initialization.*/
PORT_SETUP_CONTEXT(tp, tcp->wbase, tcp->wend, tcp->funcp, tcp->arg);
/* Initialization hook.*/
CH_CFG_THREAD_EXT_INIT_HOOK(tp);
/* Readying up thread.*/
return chSchReadyI(tp, MSG_OK);
}
/**
* @brief Creates a new thread into a static memory area.
* @details The new thread is initialized and make ready to execute.
* @note A thread can terminate by calling @p chThdExit() or by simply
* returning from its main function.
*
* @param[out] tcp pointer to the thread configuration structure
* @return The pointer to the @p thread_t structure allocated for
* the thread.
*
* @api
*/
thread_t *chThdCreate(const thread_config_t *tcp) {
thread_t *tp;
chSysLock();
tp = chThdCreateI(tcp);
chSchRescheduleS();
chSysUnlock();
return tp;
}
/**
* @brief Terminates the current thread.
* @details The thread goes in the @p CH_STATE_FINAL state holding the
* specified exit status code, other threads can retrieve the
* exit status code by invoking the function @p chThdWait().
* @post Exiting a non-static thread that does not have references
* (detached) causes the thread to remain in the registry.
* It can only be removed by performing a registry scan operation.
* @post Eventual code after this function will never be executed,
* this function never returns. The compiler has no way to
* know this so do not assume that the compiler would remove
* the dead code.
*
* @param[in] msg thread exit code
*
* @api
*/
void chThdExit(msg_t msg) {
chSysLock();
/* Exit handler hook.*/
CH_CFG_THREAD_EXIT_HOOK(tp);
#if CH_CFG_USE_WAITEXIT == TRUE
{
/* Waking up any waiting thread.*/
thread_t *tp = nil.threads;
while (tp < &nil.threads[CH_CFG_MAX_THREADS]) {
/* Is this thread waiting for current thread termination?*/
if ((tp->state == NIL_STATE_WTEXIT) && (tp->u1.tp == nil.current)) {
(void) chSchReadyI(tp, msg);
}
tp++;
}
}
#endif
/* Going into final state with exit message stored.*/
chSchGoSleepTimeoutS(NIL_STATE_FINAL, msg);
/* The thread never returns here.*/
chDbgAssert(false, "zombies apocalypse");
}
/**
* @brief Blocks the execution of the invoking thread until the specified
* thread terminates then the exit code is returned.
*
* @param[in] tp pointer to the thread
* @return The exit code from the terminated thread.
*
* @api
*/
msg_t chThdWait(thread_t *tp) {
msg_t msg;
chSysLock();
if (NIL_THD_IS_FINAL(tp)) {
msg = tp->u1.msg;
}
else {
nil.current->u1.tp = tp;
msg = chSchGoSleepTimeoutS(NIL_STATE_WTEXIT, TIME_INFINITE);
}
chSysUnlock();
return msg;
}
/**
* @brief Sends the current thread sleeping and sets a reference variable.
* @note This function must reschedule, it can only be called from thread
@ -755,8 +872,8 @@ msg_t chSchGoSleepTimeoutS(tstate_t newstate, sysinterval_t timeout) {
* @param[in] trp a pointer to a thread reference object
* @param[in] timeout the number of ticks before the operation timeouts,
* the following special values are allowed:
* - @a TIME_INFINITE no timeout.
* - @a TIME_IMMEDIATE immediate timeout.
* - @a TIME_INFINITE no timeout.
* .
* @return The wake up message.
*
@ -772,7 +889,7 @@ msg_t chThdSuspendTimeoutS(thread_reference_t *trp, sysinterval_t timeout) {
*trp = nil.current;
nil.current->u1.trp = trp;
return chSchGoSleepTimeoutS(NIL_STATE_SUSP, timeout);
return chSchGoSleepTimeoutS(NIL_STATE_SUSPENDED, timeout);
}
/**
@ -790,7 +907,7 @@ void chThdResumeI(thread_reference_t *trp, msg_t msg) {
if (*trp != NULL) {
thread_reference_t tr = *trp;
chDbgAssert(NIL_THD_IS_SUSP(tr), "not suspended");
chDbgAssert(NIL_THD_IS_SUSPENDED(tr), "not suspended");
*trp = NULL;
(void) chSchReadyI(tr, msg);
@ -852,8 +969,8 @@ void chThdSleepUntil(systime_t abstime) {
* @param[in] tqp pointer to the threads queue object
* @param[in] timeout the timeout in system ticks, the special values are
* handled as follow:
* - @a TIME_INFINITE no timeout.
* - @a TIME_IMMEDIATE immediate timeout.
* - @a TIME_INFINITE no timeout.
* .
* @return The message from @p osalQueueWakeupOneI() or
* @p osalQueueWakeupAllI() functions.
@ -943,8 +1060,8 @@ void chThdDequeueAllI(threads_queue_t *tqp, msg_t msg) {
* @param[in] sp pointer to a @p semaphore_t structure
* @param[in] timeout the number of ticks before the operation timeouts,
* the following special values are allowed:
* - @a TIME_INFINITE no timeout.
* - @a TIME_IMMEDIATE immediate timeout.
* - @a TIME_INFINITE no timeout.
* .
* @return A message specifying how the invoking thread has been
* released from the semaphore.
@ -972,8 +1089,8 @@ msg_t chSemWaitTimeout(semaphore_t *sp, sysinterval_t timeout) {
* @param[in] sp pointer to a @p semaphore_t structure
* @param[in] timeout the number of ticks before the operation timeouts,
* the following special values are allowed:
* - @a TIME_INFINITE no timeout.
* - @a TIME_IMMEDIATE immediate timeout.
* - @a TIME_INFINITE no timeout.
* .
* @return A message specifying how the invoking thread has been
* released from the semaphore.
@ -1130,8 +1247,10 @@ void chEvtSignalI(thread_t *tp, eventmask_t mask) {
chDbgCheck(tp != NULL);
tp->epmask |= mask;
if (NIL_THD_IS_WTOREVT(tp) &&
((tp->epmask & tp->u1.ewmask) != (eventmask_t)0)) {
if ((NIL_THD_IS_WTOREVT(tp) &&
((tp->epmask & tp->u1.ewmask) != (eventmask_t)0)) ||
(NIL_THD_IS_WTANDEVT(tp) &&
((tp->epmask & tp->u1.ewmask) == tp->u1.ewmask))) {
(void) chSchReadyI(tp, MSG_OK);
}
}
@ -1146,8 +1265,8 @@ void chEvtSignalI(thread_t *tp, eventmask_t mask) {
* for, @p ALL_EVENTS enables all the events
* @param[in] timeout the number of ticks before the operation timeouts,
* the following special values are allowed:
* - @a TIME_INFINITE no timeout.
* - @a TIME_IMMEDIATE immediate timeout.
* - @a TIME_INFINITE no timeout.
* .
* @return The mask of the served and cleared events.
* @retval 0 if the operation has timed out.
@ -1178,6 +1297,46 @@ eventmask_t chEvtWaitAnyTimeout(eventmask_t mask, sysinterval_t timeout) {
return m;
}
/**
* @brief Waits for all the specified events.
* @details The function waits for all the events specified in @p mask to
* become pending then the events are cleared and returned.
*
* @param[in] mask mask of the event flags that the function should wait
* for, @p ALL_EVENTS enables all the events
* @param[in] timeout the number of ticks before the operation timeouts,
* the following special values are allowed:
* - @a TIME_IMMEDIATE immediate timeout.
* - @a TIME_INFINITE no timeout.
* .
* @return The mask of the served and cleared events.
* @retval 0 if the operation has timed out.
*
* @api
*/
eventmask_t chEvtWaitAllTimeout(eventmask_t mask, sysinterval_t timeout) {
thread_t *ctp = nil.current;
chSysLock();
if ((ctp->epmask & mask) != mask) {
if (TIME_IMMEDIATE == timeout) {
chSysUnlock();
return (eventmask_t)0;
}
ctp->u1.ewmask = mask;
if (chSchGoSleepTimeoutS(NIL_STATE_WTANDEVT, timeout) < MSG_OK) {
chSysUnlock();
return (eventmask_t)0;
}
}
ctp->epmask &= ~mask;
chSysUnlock();
return mask;
}
#endif /* CH_CFG_USE_EVENTS == TRUE */
/** @} */

View File

@ -29,7 +29,7 @@
#define CHCONF_H
#define _CHIBIOS_NIL_CONF_
#define _CHIBIOS_NIL_CONF_VER_3_2_
#define _CHIBIOS_NIL_CONF_VER_4_0_
/*===========================================================================*/
/**
@ -39,11 +39,20 @@
/*===========================================================================*/
/**
* @brief Number of user threads in the application.
* @brief Maximum number of user threads in the application.
* @note This number is not inclusive of the idle thread which is
* Implicitly handled.
* implicitly handled.
* @note Set this value to be exactly equal to the number of threads you
* will use or you would be wasting RAM and cycles.
* @note This values also defines the number of available priorities
* (0..CH_CFG_MAX_THREADS-1).
*/
#define CH_CFG_NUM_THREADS 3
#define CH_CFG_MAX_THREADS 4
/**
* @brief Auto starts threads when @p chSysInit() is invoked.
*/
#define CH_CFG_AUTOSTART_THREADS TRUE
/** @} */
@ -87,6 +96,15 @@
*/
/*===========================================================================*/
/**
* @brief Threads synchronization APIs.
* @details If enabled then the @p chThdWait() function is included in
* the kernel.
*
* @note The default is @p TRUE.
*/
#define CH_CFG_USE_WAITEXIT TRUE
/**
* @brief Semaphores APIs.
* @details If enabled then the Semaphores APIs are included in the kernel.
@ -292,10 +310,8 @@
/**
* @brief System initialization hook.
*/
#if !defined(CH_CFG_SYSTEM_INIT_HOOK) || defined(__DOXYGEN__)
#define CH_CFG_SYSTEM_INIT_HOOK() { \
}
#endif
/**
* @brief Threads descriptor structure extension.
@ -311,6 +327,12 @@
/* Add custom threads initialization code here.*/ \
}
/**
* @brief Threads finalization hook.
* @details User finalization code added to the @p chThdExit() API.
*/
#define CH_CFG_THREAD_EXIT_HOOK(tp) {}
/**
* @brief Idle thread enter hook.
* @note This hook is invoked within a critical zone, no OS functions
@ -332,10 +354,8 @@
/**
* @brief System halt hook.
*/
#if !defined(CH_CFG_SYSTEM_HALT_HOOK) || defined(__DOXYGEN__)
#define CH_CFG_SYSTEM_HALT_HOOK(reason) { \
}
#endif
/** @} */

View File

@ -74,271 +74,4 @@
*****************************************************************************
*** Next ***
- NEW: Added a sanity check on GCC version for ARMv6-M, a version below 6
must be used.
- NEW: Removed deprecated EXT driver.
- NEW: Added a new function chMtxGetOwnerI() to RT mutexes subsystem.
- NEW: STM32L433 added to STM32L4xx HAL.
- CHG: chFifoObjectInit() renamed to chFifoObjectInitAligned(). Added a new
chFifoObjectInit() without the alignment parameter.
- NEW: Stricter alignment checks in memory pools.
- NEW: Added chvsnprintf().
- NEW: Event enable check API added to PAL driver.
- NEW: Now it is possible to define separate directories for each
configuration file.
- NEW: Added option to enable bypass on SDIOv1 driver allowing to use a
50MHz clock.
- NEW: Added TIM15, TIM16 and TIM17 support on GPT, ICU and PWM drivers,
limited to STM32F3, L4 and L4+ platforms.
- NEW: STM32H7xx and STM32L4+ ports reworked to support dynamic DMA
allocation. Updated all drivers to use the new DMA API.
- NEW: Both DMAv1 and DMAv2 have been reworked to support DMAMUX, DMAv3 has
been removed. In addition, both drivers are now able to support dynamic
channel allocation.
- NEW: The callback of drivers with circular buffers (ADC, DAC, I2S, SPI) has
been simplified, no parameters. A driver function xxxIsBufferComplete()
has been added to determine if it is the half buffer callback or the
final callback.
- NEW: ADC driver state machine change, now the state ADC_COMPLETE is set
before calling the 2nd callback even in circular mode. This has been
done for consistency with other drivers with circular buffers.
- NEW: Low level drivers simplification. There is a new template of LLD, now
driver and configuration types are defined in the HLD, LLD just exports
macros with the fields to be added to the structures.
So far the drivers updated are: ADC, DAC, I2S, RTC, SPI, TRNG, WSPI.
- NEW: Added UART7/8 support to STM32 UART USARTv1 driver.
- NEW: Added persistent storage interface to the STM32 RTCv2 driver.
- NEW: STM32 RTCv2 driver now supports callbacks on events.
- NEW: Added an EXTI helper driver for STM32.
- NEW: Added demo for STM32L4R9I-Discovery board.
- NEW: Support for new serial NOR device MX25LM51245G. Other Macronix devices
should work but not tested.
- NEW: Serial NOR flash infrastructure reworked and made simpler.
- NEW_ Modified the RTC driver to implement the persistent storage interface
instead of files interface.
- NEW: Added a new "persistent storage" base class to HAL.
- NEW: Added support for TIM21 and TIM22 in STM32 GPT driver.
- NEW: Reinforced checks in TIM-related drivers.
- NEW: Added support for STM32L072 and STM32L073.
- NEW: Added chThdResume() function to NIL.
- NEW: Removed QSPI driver model, entirely replaced by WSPI.
- NEW: Added demos regarding WSPI, serial nor driver and MFS.
- NEW: Modified the serial nor driver to work with WSPI instead of QSPI,
improved it in several way, simplicity mainly.
- NEW: Added an STM32 QUADSPIv1 implementation for WSPI.
- NEW: Added a new WSPI driver model to HAL, it is a redesign of the
existing QSPI for generic "Wide SPI" interfaces. It now supports up
to eight data lines so "quad" was no more appropriate.
- NEW: Added a new SIO driver model to HAL, it is a low level abstraction of
an UART.
- NEW: Added separate "load key" functions for each algorithm in the CRY
driver. Each "engine" is supposed to have its own transient key.
- NEW: Removed TRNG functionality from CRY driver, it is a separate thing now.
- NEW: Independent TRNG driver model added to HAL. Implemented a RNGv1 driver
for STM32, added test application.
- NEW: Added a new "pipes" subsystem to the OS library.
- NEW: Added mcuconf.h generators for STM32L432xx, STM32L476xx, STM32L496xx,
STM32L4Rxxx, STM32F72x/73x, STM32F746/756, STM32F76x/77x, STM32F413xx
and STM32F303xx devices.
- NEW: Added demo for STM32L496ZG-Nucleo144 and STM32L4R5ZI-Nucleo144 boards.
- NEW: Modified USARTv2 to support HW FIFOs where present.
- NEW: STM32 DMAv1, ADCv3, DACv1, I2Cv2, SPIv2 and USARTv2 are now
DMAMUX-aware.
- NEW: Introduced support for STM32L4+ devices.
- NEW: TRNG API now takes a new "size" parameter, the API can now generate
random numbers of variable size. The crypto driver now does not store
a copy of the transient key inside, the low level can do that if
required.
- NEW: Added analog watchdog functionality to STM32 ADCv2 driver.
- NEW: Added a termination check to the shell.
- NEW: Updated CMSIS to version 5.4.0.
- NEW: Now chconf.h files have preprocessor checks around each definition,
this allows to override settings from makefiles.
- NEW: Added new functions to I/O queues: qSetLink()(backported to 18.2.2).
- NEW: Added new functions to objects fifos: chFifoReturnObjectS()(backported
to 18.2.2),
chFifoSendObjectAheadI(), chFifoSendObjectAheadS() and
chFifoSendObjectAhead()(backported to 18.2.2).
- NEW: Added new functions to guarded pools: chGuardedPoolFreeS() and
chGuardedPoolAddS().
- NEW: Added initializer sections for flash0...flash7 memory areas in
GCC Cortex-M linker scripts.
- NEW: Added support for oversampling in STM32 ADCv3 driver.
- NEW: Restructured the STM32F4xx HAL support, added support for STM32F413,
added ability to handle the TIMPRE bit, separated the clock tree in
two distinct implementation to reduce the proliferation of compiler
time conditionals, added more checks to the input parameters.
- NEW: Added optional support for character match callback in the UART
high level driver.
- NEW: Change, chMtxGetNextMutexS() renamed to chMtxGetNextMutexX().
- NEW: RT C++ wrapper reworked, now it is mostly inline code, added some new
wrappers and methods. Added wrappers for more API functions. BaseThreads
are no more descendants of ThreadReference.
- NEW: Updated STM32L4xx headers to version 1.11.0.
- NEW: Added HAL support for STM32L443.
- NEW: Added support for LDM303AGR 6 axis Accelerometer\Magnetometer MEMS.
- NEW: Added support for LSM6DSL 6 axis Accelerometer\Gyroscope MEMS.
- NEW: Added support for LPS22HB 2 axis Barometer\Thermometer MEMS.
- NEW: Separated OSLIB from RT and NIL, now it is a separate "product" with
its own version, configuration file and licensing. The library will
grow to include more functionalities.
RT and NIL will contain only the core functionalities, everything else
is shared library code.
- EX. Global version number moved to 1.1.0.
- EX: Updated HTS221 to 1.1.1 (backported to 18.2.2).
- EX: Updated L3GD20 to 1.1.1 (backported to 18.2.2).
- EX: Updated LIS3DSH to 1.1.1 (backported to 18.2.2).
- EX: Updated LIS3MDL to 1.1.1 (backported to 18.2.2).
- EX: Updated LPS25H to 1.1.1 (backported to 18.2.2).
- EX: Updated LSM303DLHC to 1.1.1 (backported to 18.2.2).
- EX: Updated LSM6DS0 to 1.1.1 (backported to 18.2.2).
- EX: Updated HTS221 to 1.1.0 (backported to 18.2.1).
- EX: Updated L3GD20 to 1.1.0 (backported to 18.2.1).
- EX: Updated LIS3DSH to 1.1.0 (backported to 18.2.1).
- EX: Updated LIS3MDL to 1.1.0 (backported to 18.2.1).
- EX: Updated LIS302DL to 1.1.0 (backported to 18.2.1).
- EX: Updated LPS25H to 1.1.0 (backported to 18.2.1).
- EX: Updated LSM303DLHC to 1.1.0 (backported to 18.2.1).
- HAL: Fixed STM32 ST driver problem in free running mode (bug #1003)
(backported to 18.2.3 and 17.6.5).
- HAL: Fixed invalid checks in STM32H7 HAL (bug #1000)
(backported to 18.2.2).
- OTH: Fixed problem in STM32H743 GCC linker file (bug #998)
(backported to 18.2.2).
- HAL: Fixed extra parenthesis in STM32F4 registry (bug #997)
(backported to 18.2.2 and 17.6.5).
- HAL: Fixed timing problem in STM32 OTGv1 driver (bug #996)
(backported to 18.2.2 and 17.6.5).
- HAL: Fixed restrictive check in MMC-SPI driver (bug #995)
(backported to 18.2.2 and 17.6.5).
- HAL: Fixed misplaced check in STM32 ST driver (bug #994)
(backported to 18.2.2 and 17.6.5).
- OTH: Fixed ARM CMx vectors table without thumb bit set for unused vectors
(bug #993)(backported to 18.2.2).
- HAL: Fixed STM32F7xx I2SPLL not fully initialized (bug #992)
(backported to 18.2.2 and 17.6.5).
- BLD: Fixed PRE_MAKE_ALL_RULE_HOOK is not executed before creating object
file when using multible jobs (bug #991).
- HAL: Fixed ethernet registry error for STM32F469/479 (bug #990)
(backported to 18.2.2 and 17.6.5).
- RT: Fixed bug in chEvtBroadcastFlagsI (bug #989)
(backported to 18.2.2 and 17.6.5).
- HAL: Fixed OS-Less Cortex-M HAL functionality broken (bug #987)
(backported to 18.2.2).
- HAL: Fixed broken functionality of MFS module (bug #986)
(backported to 18.2.2).
- NIL: Fixed scheduler misbehaving in rare cases (bug #983)
(backported to 18.2.2 and 17.6.5).
- NIL: Fixed function chThdSuspendTimeoutS() ignoring TIME_IMMEDIATE (bug #982)
(backported to 18.2.2 and 17.6.5).
- HAL: Fixed mTM32L071/72 entries in registry (bug #981)
(backported to 18.2.2 and 17.6.5).
- HAL: Fixed TIM3 missing from STM32L0xx RCC macros (bug #980)
(backported to 18.2.2 and 17.6.5).
- HAL: Fixed invalid STM32 ADCv3 clock selection for L4 and L4+ (bug #979)
(backported to 18.2.2 and 17.6.5).
- HAL: Fixed wrong number of endpoints fot STM32F412/413 (bug #978)
(backported to 18.2.2 and 17.6.5).
- RT: Fixed chEvtGetAndClearFlags(...) does not mask events (bug #977)
(backported to 18.2.2 and 17.6.5).
- HAL: Fixed HAL channels chnControl() macro broken (bug #976)
(backported to 18.2.2).
- OTH: Fixed wrong timeout handling in CMSIS OS layer (bug #975)
(backported to 18.2.2 and 17.6.5).
- HAL: Fixed invalid checks in STM32F37x HAL related to SDADC (bug #974)
(backported to 18.2.2 and 17.6.5).
- HAL: Fixed mii_find_phy excludes PHY address 31 (bug #971)
(backported to 18.2.2 and 17.6.5).
- HAL: Fixed option STM32_LSCOSEL not written in STM32L4 HAL (bug #970)
(backported to 18.2.2 and 17.6.5).
- HAL: Fixed invalid DFSDM1SEL option in STM32L4 HAL (bug #969)(backported
to 18.2.2 and 17.6.5).
- HAL: Fixed incorrect checks on STM32_SAI2SEL option in STM32L4 HAL
(bug #968)(backported to 18.2.2 and 17.6.5).
- HAL: Fixed incorrect handling of PDIV dividers in STM32L4 HAL (bug #967)
(backported to 18.2.2).
- HAL: Fixed documentation error in spiStop() (bug #966)(backported
to 18.2.2 and 17.6.5).
- HAL: Fixed missing parenthesis in STM32L073 registry entry (bug #965)
(backported to 18.2.2 and 17.6.5).
- HAL: Fixed problem with STM32 RTCv1 and GCC7 compiler (bug #964)(backported
to 18.2.2 and 17.6.5).
- HAL: Fixed invalid timeout calculation in hal_buffers (bug #963)(backported
to 18.2.2 and 17.6.5).
- RT: Fixed invalid parameter in CH_CFG_SYSTEM_INIT_HOOK hook macro
(bug #962)(backported to 18.2.2).
- OTH: Fixed demos failing to compile (bug #961)(backported to 18.2.2).
- HAL: Fixed issue in hal_queues (bug #960)(backported to 18.2.2).
- HAL: Fixed incorrect state change in I2S driver (bug #959)(backported
to 18.2.2 and 17.6.5).
- HAL: Fixed incorrect TCIE handling in STM32 serial drivers (bug #958)
(backported to 18.2.2 and 17.6.5).
- HAL: Fixed invalid period calculation in STM32 GPT driver (bug #957)
(backported to 18.2.2 and 17.6.5).
- HAL: Fixed missing USART7/8 definitions in STM32F0 HAL (bug #956)(backported
to 18.2.2).
- LIB: Fixed heap allocation issue (bug #955)(backported to 18.2.2 and 17.6.5).
- HAL: Fixed win32 simulator HAL broken because a typo (bug #954)(backported
to 18.2.2).
- HAL: Fixed race condition in STM32 ADCv3 driver (bug #953)(backported to
18.2.2 and 17.6.5).
- HAL: Fixed wrong registry entries for STM32F030x4 (bug #952)(backported
to 18.2.2).
- HAL: Fixed invalid divider settings in Serial and UART STM32 drivers
when USART_CR1_OVER8 is specified (bug #951)(backported to 18.2.2
and 17.6.5).
- NIL: Fixed missing extern declaration in IAR Cortex-M port (bug #950)
(backported to 18.2.2 and 17.6.5).
- HAL: Fixed ASCR register invalid handling in STM32 GPIOv3 driver (bug #949)
(backported to 18.2.2 and 17.6.5).
- HAL: Fixed missing definition in UART driver (bug #948)(backported
to 18.2.2).
- OTH: Fixed wrong macro check in GCC Cortex-M startup files (bug #947)
(backported to 18.2.2 and 17.6.5).
- HAL: Fixed binary instead of logic operator in STM32F4 HAL (bug #946)
(backported to 18.2.2 and 17.6.5).
- HAL: Fixed Mikroe clicker 2 misaligned board file (bug #945)
(backported to 18.2.2 and 17.6.5).
- EX: Fixed ChibiOS/EX documentation misalignments (bug #943).
- HAL: Fixed invalid settings in STM32F769I-Discovery board files (bug #942)
(backported to 18.2.1 and 17.6.5).
- OTH: Fixed short branch to _unhandled_exception in vectors.S (bug #941)
(backported to 18.2.1).
- HAL: Fixed IOBus PAL functions missing the const qualifier (bug #940)
(backported to 18.2.1 and 17.6.5).
- HAL: Fixed STM32 USBv1 driver does not reset data toggling bits on endpoint
initialization (bug #939)(backported to 18.2.1 and 17.6.5).
- HAL: Fixed incorrect behavior of USB driver on SET CONFIGURATION (bug #938)
(backported to 18.2.1 and 17.6.5).
- HAL: Fixed macro expansion problem in SPI high level driver (bug #937)
(backported to 18.2.1).
- HAL: Fixed missing CAN2 macros from STM32L4xx stm32_rcc.h file (bug #936)
(backported to 18.2.1).
- OTH: Fixed inclusion order problem in STM32L4 cmparams.h file (bug #935)
(backported to 18.2.1 and 17.6.5).
- HAL: Fixed problem clearing UIF timer flag in STM32 PWM driver (bug #934)
(backported to 18.2.1 and 17.6.5).
- HAL: Fixed USB Serial driver problem with zero-size OUT transactions
(bug #933)(backported to 18.2.1 and 17.6.5).
- HAL: Fixed race condition in STM32 QSPI driver (bug #932)(backported to
18.2.1 and 17.6.5).
- HAL: Fixed function mfsReadRecord() causes memory corruption because a
buffer overflow (bug #931)(backported to 18.2.1).
- HAL: Fixed silence GCC 7.3.0 warning (bug #930)(backported to 18.2.1
and 17.6.5).
- HAL: Fixed invalid SAI1 clock selection on STM32F7xx (bug #929)(backported
to 18.2.1 and 17.6.4).
- HAL: Fixed invalid clock checks for SDMMC1 and SDMMC2 on STM32F7xx
(bug #928)(backported to 18.2.1).
- HAL: Fixed useless writes in read-only CFGR_SWS field on all STM32Fxx
(bug #927)(backported to 18.2.1 and 17.6.4).
- HAL: Fixed typo in hal_pal.h (bug #926)(backported to 18.2.1).
- HAL: Fixed I2C address not accepted (bug #923)(backported to 18.2.1
and 17.6.4).
- HAL: Fixed problem with HSI48 on STM32L4xx (bug #922)(backported to 18.2.1).
- HAL: Fixed invalid implementation of palWaitPadTimeoutS() and
palWaitLineTimeoutS() APIs (bug #921)(backported to 18.2.1).
- HAL: Fixed wrong DMA settings for STM32F76x I2C3 and I2C4 (bug #920)
(backported to 18.2.1 and 17.6.4).
- HAL: Fixed wrong flash waiting state for STM32F7xx (bug #918)
(backported to 18.2.1 and 17.6.4).
- NIL: Integrated NIL 4.0.

View File

@ -245,21 +245,27 @@ test_println("");]]></value>
<value />
</tags>
<code>
<value><![CDATA[test_print("--- CH_CFG_NUM_THREADS: ");
test_printn(CH_CFG_NUM_THREADS);
test_println("");
test_print("--- CH_CFG_ST_RESOLUTION: ");
test_printn(CH_CFG_ST_RESOLUTION);
<value><![CDATA[test_print("--- CH_CFG_MAX_THREADS: ");
test_printn(CH_CFG_MAX_THREADS);
test_println("");
test_print("--- CH_CFG_AUTOSTART_THREADS: ");
test_printn(CH_CFG_AUTOSTART_THREADS);
test_println("");
test_print("--- CH_CFG_ST_RESOLUTION: ");
test_printn(CH_CFG_ST_RESOLUTION);
test_println("");
test_print("--- CH_CFG_ST_FREQUENCY: ");
test_printn(CH_CFG_ST_FREQUENCY);
test_println("");
test_print("--- CH_CFG_ST_TIMEDELTA: ");
test_printn(CH_CFG_ST_TIMEDELTA);
test_println("");
test_print("--- CH_CFG_USE_SEMAPHORES: ");
test_printn(CH_CFG_USE_SEMAPHORES);
test_println("");
test_print("--- CH_CFG_USE_WAITEXIT: ");
test_printn(CH_CFG_USE_WAITEXIT);
test_println("");
test_print("--- CH_CFG_USE_SEMAPHORES: ");
test_printn(CH_CFG_USE_SEMAPHORES);
test_println("");
test_print("--- CH_CFG_USE_MUTEXES: ");
test_printn(CH_CFG_USE_MUTEXES);
test_println("");
@ -305,6 +311,9 @@ test_println("");
test_print("--- CH_CFG_FACTORY_OBJ_FIFOS: ");
test_printn(CH_CFG_FACTORY_OBJ_FIFOS);
test_println("");
test_print("--- CH_CFG_USE_PIPES: ");
test_printn(CH_CFG_USE_PIPES);
test_println("");
test_print("--- CH_DBG_STATISTICS: ");
test_printn(CH_DBG_STATISTICS);
test_println("");

View File

@ -160,8 +160,11 @@ static void nil_test_001_003_execute(void) {
/* [1.3.1] Prints the configuration options settings.*/
test_set_step(1);
{
test_print("--- CH_CFG_NUM_THREADS: ");
test_printn(CH_CFG_NUM_THREADS);
test_print("--- CH_CFG_MAX_THREADS: ");
test_printn(CH_CFG_MAX_THREADS);
test_println("");
test_print("--- CH_CFG_AUTOSTART_THREADS: ");
test_printn(CH_CFG_AUTOSTART_THREADS);
test_println("");
test_print("--- CH_CFG_ST_RESOLUTION: ");
test_printn(CH_CFG_ST_RESOLUTION);
@ -172,6 +175,9 @@ static void nil_test_001_003_execute(void) {
test_print("--- CH_CFG_ST_TIMEDELTA: ");
test_printn(CH_CFG_ST_TIMEDELTA);
test_println("");
test_print("--- CH_CFG_USE_WAITEXIT: ");
test_printn(CH_CFG_USE_WAITEXIT);
test_println("");
test_print("--- CH_CFG_USE_SEMAPHORES: ");
test_printn(CH_CFG_USE_SEMAPHORES);
test_println("");
@ -220,6 +226,9 @@ static void nil_test_001_003_execute(void) {
test_print("--- CH_CFG_FACTORY_OBJ_FIFOS: ");
test_printn(CH_CFG_FACTORY_OBJ_FIFOS);
test_println("");
test_print("--- CH_CFG_USE_PIPES: ");
test_printn(CH_CFG_USE_PIPES);
test_println("");
test_print("--- CH_DBG_STATISTICS: ");
test_printn(CH_DBG_STATISTICS);
test_println("");

View File

@ -29,7 +29,7 @@
#define CHCONF_H
#define _CHIBIOS_NIL_CONF_
#define _CHIBIOS_NIL_CONF_VER_3_2_
#define _CHIBIOS_NIL_CONF_VER_4_0_
/*===========================================================================*/
/**
@ -39,11 +39,20 @@
/*===========================================================================*/
/**
* @brief Number of user threads in the application.
* @brief Maximum number of user threads in the application.
* @note This number is not inclusive of the idle thread which is
* Implicitly handled.
* implicitly handled.
* @note Set this value to be exactly equal to the number of threads you
* will use or you would be wasting RAM and cycles.
* @note This values also defines the number of available priorities
* (0..CH_CFG_MAX_THREADS-1).
*/
#define CH_CFG_NUM_THREADS 1
#define CH_CFG_MAX_THREADS 4
/**
* @brief Auto starts threads when @p chSysInit() is invoked.
*/
#define CH_CFG_AUTOSTART_THREADS TRUE
/** @} */
@ -87,6 +96,15 @@
*/
/*===========================================================================*/
/**
* @brief Threads synchronization APIs.
* @details If enabled then the @p chThdWait() function is included in
* the kernel.
*
* @note The default is @p TRUE.
*/
#define CH_CFG_USE_WAITEXIT TRUE
/**
* @brief Semaphores APIs.
* @details If enabled then the Semaphores APIs are included in the kernel.
@ -292,10 +310,8 @@
/**
* @brief System initialization hook.
*/
#if !defined(CH_CFG_SYSTEM_INIT_HOOK) || defined(__DOXYGEN__)
#define CH_CFG_SYSTEM_INIT_HOOK() { \
}
#endif
/**
* @brief Threads descriptor structure extension.
@ -311,6 +327,12 @@
/* Add custom threads initialization code here.*/ \
}
/**
* @brief Threads finalization hook.
* @details User finalization code added to the @p chThdExit() API.
*/
#define CH_CFG_THREAD_EXIT_HOOK(tp) {}
/**
* @brief Idle thread enter hook.
* @note This hook is invoked within a critical zone, no OS functions
@ -332,10 +354,8 @@
/**
* @brief System halt hook.
*/
#if !defined(CH_CFG_SYSTEM_HALT_HOOK) || defined(__DOXYGEN__)
#define CH_CFG_SYSTEM_HALT_HOOK(reason) { \
}
#endif
/** @} */

View File

@ -30,11 +30,10 @@ static THD_FUNCTION(Thread1, arg) {
}
/*
* Threads static table, one entry per thread. The number of entries must
* match NIL_CFG_NUM_THREADS.
* Threads creation table, one entry per thread.
*/
THD_TABLE_BEGIN
THD_TABLE_ENTRY(waThread1, "sleeper", Thread1, NULL)
THD_TABLE_THREAD(0, "sleeper", waThread1, Thread1, NULL)
THD_TABLE_END
/*

View File

@ -40,7 +40,7 @@
#define CHCONF_H
#define _CHIBIOS_NIL_CONF_
#define _CHIBIOS_NIL_CONF_VER_3_2_
#define _CHIBIOS_NIL_CONF_VER_4_0_
/*===========================================================================*/
/**
@ -50,11 +50,20 @@
/*===========================================================================*/
/**
* @brief Number of user threads in the application.
* @brief Maximum number of user threads in the application.
* @note This number is not inclusive of the idle thread which is
* Implicitly handled.
* implicitly handled.
* @note Set this value to be exactly equal to the number of threads you
* will use or you would be wasting RAM and cycles.
* @note This values also defines the number of available priorities
* (0..CH_CFG_MAX_THREADS-1).
*/
#define CH_CFG_NUM_THREADS ${doc.CH_CFG_NUM_THREADS!"1"}
#define CH_CFG_MAX_THREADS ${doc.CH_CFG_MAX_THREADS!"4"}
/**
* @brief Auto starts threads when @p chSysInit() is invoked.
*/
#define CH_CFG_AUTOSTART_THREADS ${doc.CH_CFG_AUTOSTART_THREADS!"TRUE"}
/** @} */
@ -98,6 +107,15 @@
*/
/*===========================================================================*/
/**
* @brief Threads synchronization APIs.
* @details If enabled then the @p chThdWait() function is included in
* the kernel.
*
* @note The default is @p TRUE.
*/
#define CH_CFG_USE_WAITEXIT ${doc.CH_CFG_USE_WAITEXIT!"TRUE"}
/**
* @brief Semaphores APIs.
* @details If enabled then the Semaphores APIs are included in the kernel.
@ -303,10 +321,8 @@
/**
* @brief System initialization hook.
*/
#if !defined(CH_CFG_SYSTEM_INIT_HOOK) || defined(__DOXYGEN__)
#define CH_CFG_SYSTEM_INIT_HOOK() { \
}
#endif
/**
* @brief Threads descriptor structure extension.
@ -322,6 +338,12 @@
/* Add custom threads initialization code here.*/ \
}
/**
* @brief Threads finalization hook.
* @details User finalization code added to the @p chThdExit() API.
*/
#define CH_CFG_THREAD_EXIT_HOOK(tp) {}
/**
* @brief Idle thread enter hook.
* @note This hook is invoked within a critical zone, no OS functions
@ -343,10 +365,8 @@
/**
* @brief System halt hook.
*/
#if !defined(CH_CFG_SYSTEM_HALT_HOOK) || defined(__DOXYGEN__)
#define CH_CFG_SYSTEM_HALT_HOOK(reason) { \
}
#endif
/** @} */