More time conversion macros added to HAL OSAL.
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@13609 27425a3e-05d8-49a3-a47f-9c15f0e5edd8
This commit is contained in:
parent
e84794c8e7
commit
6e23be0b64
|
@ -186,6 +186,13 @@ typedef uint32_t systime_t;
|
|||
*/
|
||||
typedef uint32_t sysinterval_t;
|
||||
|
||||
/**
|
||||
* @brief Type of time conversion variable.
|
||||
* @note This type must have double width than other time types, it is
|
||||
* only used internally for conversions.
|
||||
*/
|
||||
typedef uint64_t time_conv_t;
|
||||
|
||||
/**
|
||||
* @brief Type of realtime counter.
|
||||
*/
|
||||
|
@ -361,9 +368,12 @@ typedef struct {
|
|||
* @{
|
||||
*/
|
||||
/**
|
||||
* @brief Seconds to system ticks.
|
||||
* @brief Seconds to time interval.
|
||||
* @details Converts from seconds to system ticks number.
|
||||
* @note The result is rounded upward to the next tick boundary.
|
||||
* @note Use of this macro for large values is not secure because
|
||||
* integer overflows, make sure your value can be correctly
|
||||
* converted.
|
||||
*
|
||||
* @param[in] secs number of seconds
|
||||
* @return The number of ticks.
|
||||
|
@ -371,12 +381,15 @@ typedef struct {
|
|||
* @api
|
||||
*/
|
||||
#define OSAL_S2I(secs) \
|
||||
((sysinterval_t)((uint32_t)(secs) * (uint32_t)OSAL_ST_FREQUENCY))
|
||||
((sysinterval_t)((time_conv_t)(secs) * (time_conv_t)OSAL_ST_FREQUENCY))
|
||||
|
||||
/**
|
||||
* @brief Milliseconds to system ticks.
|
||||
* @brief Milliseconds to time interval.
|
||||
* @details Converts from milliseconds to system ticks number.
|
||||
* @note The result is rounded upward to the next tick boundary.
|
||||
* @note Use of this macro for large values is not secure because
|
||||
* integer overflows, make sure your value can be correctly
|
||||
* converted.
|
||||
*
|
||||
* @param[in] msecs number of milliseconds
|
||||
* @return The number of ticks.
|
||||
|
@ -384,13 +397,17 @@ typedef struct {
|
|||
* @api
|
||||
*/
|
||||
#define OSAL_MS2I(msecs) \
|
||||
((sysinterval_t)((((((uint32_t)(msecs)) * \
|
||||
((uint32_t)OSAL_ST_FREQUENCY)) - 1UL) / 1000UL) + 1UL))
|
||||
((sysinterval_t)((((time_conv_t)(msecs) * \
|
||||
(time_conv_t)OSAL_ST_FREQUENCY) + \
|
||||
(time_conv_t)999) / (time_conv_t)1000))
|
||||
|
||||
/**
|
||||
* @brief Microseconds to system ticks.
|
||||
* @brief Microseconds to time interval.
|
||||
* @details Converts from microseconds to system ticks number.
|
||||
* @note The result is rounded upward to the next tick boundary.
|
||||
* @note Use of this macro for large values is not secure because
|
||||
* integer overflows, make sure your value can be correctly
|
||||
* converted.
|
||||
*
|
||||
* @param[in] usecs number of microseconds
|
||||
* @return The number of ticks.
|
||||
|
@ -398,8 +415,63 @@ typedef struct {
|
|||
* @api
|
||||
*/
|
||||
#define OSAL_US2I(usecs) \
|
||||
((sysinterval_t)((((((uint32_t)(usecs)) * \
|
||||
((uint32_t)OSAL_ST_FREQUENCY)) - 1UL) / 1000000UL) + 1UL))
|
||||
((sysinterval_t)((((time_conv_t)(usecs) * \
|
||||
(time_conv_t)OSAL_ST_FREQUENCY) + \
|
||||
(time_conv_t)999999) / (time_conv_t)1000000))
|
||||
|
||||
/**
|
||||
* @brief Time interval to seconds.
|
||||
* @details Converts from system ticks number to seconds.
|
||||
* @note The result is rounded up to the next second boundary.
|
||||
* @note Use of this macro for large values is not secure because
|
||||
* integer overflows, make sure your value can be correctly
|
||||
* converted.
|
||||
*
|
||||
* @param[in] interval interval in ticks
|
||||
* @return The number of seconds.
|
||||
*
|
||||
* @api
|
||||
*/
|
||||
#define OSAL_I2S(interval) \
|
||||
(time_secs_t)(((time_conv_t)(interval) + \
|
||||
(time_conv_t)OSAL_ST_FREQUENCY - \
|
||||
(time_conv_t)1) / (time_conv_t)OSAL_ST_FREQUENCY)
|
||||
|
||||
/**
|
||||
* @brief Time interval to milliseconds.
|
||||
* @details Converts from system ticks number to milliseconds.
|
||||
* @note The result is rounded up to the next millisecond boundary.
|
||||
* @note Use of this macro for large values is not secure because
|
||||
* integer overflows, make sure your value can be correctly
|
||||
* converted.
|
||||
*
|
||||
* @param[in] interval interval in ticks
|
||||
* @return The number of milliseconds.
|
||||
*
|
||||
* @api
|
||||
*/
|
||||
#define OSAL_I2MS(interval) \
|
||||
(time_msecs_t)((((time_conv_t)(interval) * (time_conv_t)1000) + \
|
||||
(time_conv_t)OSAL_ST_FREQUENCY - (time_conv_t)1) / \
|
||||
(time_conv_t)OSAL_ST_FREQUENCY)
|
||||
|
||||
/**
|
||||
* @brief Time interval to microseconds.
|
||||
* @details Converts from system ticks number to microseconds.
|
||||
* @note The result is rounded up to the next microsecond boundary.
|
||||
* @note Use of this macro for large values is not secure because
|
||||
* integer overflows, make sure your value can be correctly
|
||||
* converted.
|
||||
*
|
||||
* @param[in] interval interval in ticks
|
||||
* @return The number of microseconds.
|
||||
*
|
||||
* @api
|
||||
*/
|
||||
#define OSAL_I2US(interval) \
|
||||
(time_msecs_t)((((time_conv_t)(interval) * (time_conv_t)1000000) + \
|
||||
(time_conv_t)OSAL_ST_FREQUENCY - (time_conv_t)1) / \
|
||||
(time_conv_t)OSAL_ST_FREQUENCY)
|
||||
/** @} */
|
||||
|
||||
/**
|
||||
|
|
|
@ -155,6 +155,15 @@ typedef uint32_t systime_t;
|
|||
typedef uint32_t sysinterval_t;
|
||||
#endif
|
||||
|
||||
#if 0
|
||||
/**
|
||||
* @brief Type of time conversion variable.
|
||||
* @note This type must have double width than other time types, it is
|
||||
* only used internally for conversions.
|
||||
*/
|
||||
typedef uint64_t time_conv_t;
|
||||
#endif
|
||||
|
||||
#if 0
|
||||
/**
|
||||
* @brief Type of realtime counter.
|
||||
|
@ -318,9 +327,12 @@ typedef struct {
|
|||
* @{
|
||||
*/
|
||||
/**
|
||||
* @brief Seconds to system ticks.
|
||||
* @brief Seconds to time interval.
|
||||
* @details Converts from seconds to system ticks number.
|
||||
* @note The result is rounded upward to the next tick boundary.
|
||||
* @note Use of this macro for large values is not secure because
|
||||
* integer overflows, make sure your value can be correctly
|
||||
* converted.
|
||||
*
|
||||
* @param[in] secs number of seconds
|
||||
* @return The number of ticks.
|
||||
|
@ -330,9 +342,12 @@ typedef struct {
|
|||
#define OSAL_S2I(secs) TIME_S2I(secs)
|
||||
|
||||
/**
|
||||
* @brief Milliseconds to system ticks.
|
||||
* @brief Milliseconds to time interval.
|
||||
* @details Converts from milliseconds to system ticks number.
|
||||
* @note The result is rounded upward to the next tick boundary.
|
||||
* @note Use of this macro for large values is not secure because
|
||||
* integer overflows, make sure your value can be correctly
|
||||
* converted.
|
||||
*
|
||||
* @param[in] msecs number of milliseconds
|
||||
* @return The number of ticks.
|
||||
|
@ -342,9 +357,12 @@ typedef struct {
|
|||
#define OSAL_MS2I(msecs) TIME_MS2I(msecs)
|
||||
|
||||
/**
|
||||
* @brief Microseconds to system ticks.
|
||||
* @brief Microseconds to time interval.
|
||||
* @details Converts from microseconds to system ticks number.
|
||||
* @note The result is rounded upward to the next tick boundary.
|
||||
* @note Use of this macro for large values is not secure because
|
||||
* integer overflows, make sure your value can be correctly
|
||||
* converted.
|
||||
*
|
||||
* @param[in] usecs number of microseconds
|
||||
* @return The number of ticks.
|
||||
|
@ -352,6 +370,51 @@ typedef struct {
|
|||
* @api
|
||||
*/
|
||||
#define OSAL_US2I(usecs) TIME_US2I(usecs)
|
||||
|
||||
/**
|
||||
* @brief Time interval to seconds.
|
||||
* @details Converts from system ticks number to seconds.
|
||||
* @note The result is rounded up to the next second boundary.
|
||||
* @note Use of this macro for large values is not secure because
|
||||
* integer overflows, make sure your value can be correctly
|
||||
* converted.
|
||||
*
|
||||
* @param[in] interval interval in ticks
|
||||
* @return The number of seconds.
|
||||
*
|
||||
* @api
|
||||
*/
|
||||
#define OSAL_I2S(interval) TIME_I2S(interval)
|
||||
|
||||
/**
|
||||
* @brief Time interval to milliseconds.
|
||||
* @details Converts from system ticks number to milliseconds.
|
||||
* @note The result is rounded up to the next millisecond boundary.
|
||||
* @note Use of this macro for large values is not secure because
|
||||
* integer overflows, make sure your value can be correctly
|
||||
* converted.
|
||||
*
|
||||
* @param[in] interval interval in ticks
|
||||
* @return The number of milliseconds.
|
||||
*
|
||||
* @api
|
||||
*/
|
||||
#define OSAL_I2MS(interval) TIME_I2MS(interval)
|
||||
|
||||
/**
|
||||
* @brief Time interval to microseconds.
|
||||
* @details Converts from system ticks number to microseconds.
|
||||
* @note The result is rounded up to the next microsecond boundary.
|
||||
* @note Use of this macro for large values is not secure because
|
||||
* integer overflows, make sure your value can be correctly
|
||||
* converted.
|
||||
*
|
||||
* @param[in] interval interval in ticks
|
||||
* @return The number of microseconds.
|
||||
*
|
||||
* @api
|
||||
*/
|
||||
#define OSAL_I2US(interval) TIME_I2US(interval)
|
||||
/** @} */
|
||||
|
||||
/**
|
||||
|
|
|
@ -168,6 +168,13 @@ typedef uint32_t systime_t;
|
|||
*/
|
||||
typedef uint32_t sysinterval_t;
|
||||
|
||||
/**
|
||||
* @brief Type of time conversion variable.
|
||||
* @note This type must have double width than other time types, it is
|
||||
* only used internally for conversions.
|
||||
*/
|
||||
typedef uint64_t time_conv_t;
|
||||
|
||||
/**
|
||||
* @brief Type of realtime counter.
|
||||
*/
|
||||
|
@ -333,9 +340,12 @@ typedef struct {
|
|||
* @{
|
||||
*/
|
||||
/**
|
||||
* @brief Seconds to system ticks.
|
||||
* @brief Seconds to time interval.
|
||||
* @details Converts from seconds to system ticks number.
|
||||
* @note The result is rounded upward to the next tick boundary.
|
||||
* @note Use of this macro for large values is not secure because
|
||||
* integer overflows, make sure your value can be correctly
|
||||
* converted.
|
||||
*
|
||||
* @param[in] secs number of seconds
|
||||
* @return The number of ticks.
|
||||
|
@ -343,12 +353,15 @@ typedef struct {
|
|||
* @api
|
||||
*/
|
||||
#define OSAL_S2I(secs) \
|
||||
((sysinterval_t)((uint32_t)(secs) * (uint32_t)OSAL_ST_FREQUENCY))
|
||||
((sysinterval_t)((time_conv_t)(secs) * (time_conv_t)OSAL_ST_FREQUENCY))
|
||||
|
||||
/**
|
||||
* @brief Milliseconds to system ticks.
|
||||
* @brief Milliseconds to time interval.
|
||||
* @details Converts from milliseconds to system ticks number.
|
||||
* @note The result is rounded upward to the next tick boundary.
|
||||
* @note Use of this macro for large values is not secure because
|
||||
* integer overflows, make sure your value can be correctly
|
||||
* converted.
|
||||
*
|
||||
* @param[in] msecs number of milliseconds
|
||||
* @return The number of ticks.
|
||||
|
@ -356,13 +369,17 @@ typedef struct {
|
|||
* @api
|
||||
*/
|
||||
#define OSAL_MS2I(msecs) \
|
||||
((sysinterval_t)((((((uint32_t)(msecs)) * \
|
||||
((uint32_t)OSAL_ST_FREQUENCY)) - 1UL) / 1000UL) + 1UL))
|
||||
((sysinterval_t)((((time_conv_t)(msecs) * \
|
||||
(time_conv_t)OSAL_ST_FREQUENCY) + \
|
||||
(time_conv_t)999) / (time_conv_t)1000))
|
||||
|
||||
/**
|
||||
* @brief Microseconds to system ticks.
|
||||
* @brief Microseconds to time interval.
|
||||
* @details Converts from microseconds to system ticks number.
|
||||
* @note The result is rounded upward to the next tick boundary.
|
||||
* @note Use of this macro for large values is not secure because
|
||||
* integer overflows, make sure your value can be correctly
|
||||
* converted.
|
||||
*
|
||||
* @param[in] usecs number of microseconds
|
||||
* @return The number of ticks.
|
||||
|
@ -370,8 +387,63 @@ typedef struct {
|
|||
* @api
|
||||
*/
|
||||
#define OSAL_US2I(usecs) \
|
||||
((sysinterval_t)((((((uint32_t)(usecs)) * \
|
||||
((uint32_t)OSAL_ST_FREQUENCY)) - 1UL) / 1000000UL) + 1UL))
|
||||
((sysinterval_t)((((time_conv_t)(usecs) * \
|
||||
(time_conv_t)OSAL_ST_FREQUENCY) + \
|
||||
(time_conv_t)999999) / (time_conv_t)1000000))
|
||||
|
||||
/**
|
||||
* @brief Time interval to seconds.
|
||||
* @details Converts from system ticks number to seconds.
|
||||
* @note The result is rounded up to the next second boundary.
|
||||
* @note Use of this macro for large values is not secure because
|
||||
* integer overflows, make sure your value can be correctly
|
||||
* converted.
|
||||
*
|
||||
* @param[in] interval interval in ticks
|
||||
* @return The number of seconds.
|
||||
*
|
||||
* @api
|
||||
*/
|
||||
#define OSAL_I2S(interval) \
|
||||
(time_secs_t)(((time_conv_t)(interval) + \
|
||||
(time_conv_t)OSAL_ST_FREQUENCY - \
|
||||
(time_conv_t)1) / (time_conv_t)OSAL_ST_FREQUENCY)
|
||||
|
||||
/**
|
||||
* @brief Time interval to milliseconds.
|
||||
* @details Converts from system ticks number to milliseconds.
|
||||
* @note The result is rounded up to the next millisecond boundary.
|
||||
* @note Use of this macro for large values is not secure because
|
||||
* integer overflows, make sure your value can be correctly
|
||||
* converted.
|
||||
*
|
||||
* @param[in] interval interval in ticks
|
||||
* @return The number of milliseconds.
|
||||
*
|
||||
* @api
|
||||
*/
|
||||
#define OSAL_I2MS(interval) \
|
||||
(time_msecs_t)((((time_conv_t)(interval) * (time_conv_t)1000) + \
|
||||
(time_conv_t)OSAL_ST_FREQUENCY - (time_conv_t)1) / \
|
||||
(time_conv_t)OSAL_ST_FREQUENCY)
|
||||
|
||||
/**
|
||||
* @brief Time interval to microseconds.
|
||||
* @details Converts from system ticks number to microseconds.
|
||||
* @note The result is rounded up to the next microsecond boundary.
|
||||
* @note Use of this macro for large values is not secure because
|
||||
* integer overflows, make sure your value can be correctly
|
||||
* converted.
|
||||
*
|
||||
* @param[in] interval interval in ticks
|
||||
* @return The number of microseconds.
|
||||
*
|
||||
* @api
|
||||
*/
|
||||
#define OSAL_I2US(interval) \
|
||||
(time_msecs_t)((((time_conv_t)(interval) * (time_conv_t)1000000) + \
|
||||
(time_conv_t)OSAL_ST_FREQUENCY - (time_conv_t)1) / \
|
||||
(time_conv_t)OSAL_ST_FREQUENCY)
|
||||
/** @} */
|
||||
|
||||
/**
|
||||
|
|
|
@ -266,9 +266,9 @@ typedef uint32_t time_conv_t;
|
|||
* @api
|
||||
*/
|
||||
#define TIME_I2US(interval) \
|
||||
(time_msecs_t)((((time_conv_t)(interval) * (time_conv_t)1000000) + \
|
||||
(time_conv_t)CH_CFG_ST_FREQUENCY - (time_conv_t)1) / \
|
||||
(time_conv_t)CH_CFG_ST_FREQUENCY)
|
||||
(time_msecs_t)((((time_conv_t)(interval) * (time_conv_t)1000000) + \
|
||||
(time_conv_t)CH_CFG_ST_FREQUENCY - (time_conv_t)1) / \
|
||||
(time_conv_t)CH_CFG_ST_FREQUENCY)
|
||||
/** @} */
|
||||
|
||||
/*===========================================================================*/
|
||||
|
|
|
@ -74,6 +74,7 @@
|
|||
*****************************************************************************
|
||||
|
||||
*** Next ***
|
||||
- NEW: More time conversion macros added to HAL OSAL.
|
||||
- NEW: Updated debug tools to be independent from the toolchain position:
|
||||
they now rely on the environment variable CHIBISTUDIO.
|
||||
- NEW: Mail Queues test implementation in CMSIS RTOS wrapper.
|
||||
|
|
Loading…
Reference in New Issue