Improve documentation of Stack Checking

This commit is contained in:
2020-09-07 23:52:12 +02:00
parent a877ef5f28
commit 2f6590416d
8 changed files with 98 additions and 2 deletions

View File

@@ -72,6 +72,9 @@ enum analog_value_monitor {
#define WATCHDOG_PRESCALER 8
/**
* @brief Minimum number of bytes that have to be free on the stack. If this is not the case, an error is detected
*/
#define SAFETY_MIN_STACK_FREE 0x100
#define PID_CONTROLLER_ERR_CAREMASK (ERR_FLAG_STACK | ERR_FLAG_AMON_UC_TEMP | ERR_FLAG_AMON_VREF | \

View File

@@ -25,8 +25,16 @@
#define STACK_CHECK_MIN_HEAP_GAP 16UL
/**
* @brief Get usage of the stack
* @return Usage of the stack in bytes
*/
int32_t stack_check_get_usage();
/**
* @brief Get free stack space
* @return free stack space in bytes. If negative, a stack overflow occured
*/
int32_t stack_check_get_free();
static inline int stack_check_collision()
@@ -50,8 +58,32 @@ static inline uint32_t read_stack_pointer()
return stack_pointer;
}
/**
* @brief Init the stack corruption detection area.
*
* This function initializes the memory area between heap and stack with random values generated by the
* STM's random number generator. A 32 bit CRC generated by the CRC unit of the STM is appended for verification of the
* area.
*
*
* @return 0 if successful, else an error has occured in generating a random number. This should never happen
* @note This function turns on the CRC unit but does not disable it afterwards. Therefore, the CRC unit does not have
* to be explicitly initialized before calling @ref stack_check_corruption_detect_area.
*/
int stack_check_init_corruption_detect_area(void);
/**
* @brief Check the CRC of the stack corruption detection area
*
* This function checks the stack corruption detection area, which must be initialized by
* @ref stack_check_init_corruption_detect_area beforehand.
*
* The CRC unit must be enabled for this function to work properly.
* After calling @stack_check_init_corruption_detect_area, this is the case.
*
* @return 0 if no error is detected, all other values are an error.
* @note Make sure CRC unit is enabled.
*/
int stack_check_corruption_detect_area(void);
#endif /* __STACK_CHECK_H__ */