Make reading the global ms tick atomic in order to prevent glitches

This commit is contained in:
Mario Hüttel 2020-06-01 20:45:27 +02:00
parent 1751db31c5
commit f956968cb4
2 changed files with 8 additions and 2 deletions

View File

@ -45,7 +45,7 @@ extern volatile uint32_t wait_tick_ms;
* @brief Systemclock in milliseconds. * @brief Systemclock in milliseconds.
* *
* This value must not be reset during the whole runtime. * This value must not be reset during the whole runtime.
* * @warning In order to use this, you must assure that the read access is atomic.
*/ */
extern volatile uint64_t global_tick_ms; extern volatile uint64_t global_tick_ms;

View File

@ -43,7 +43,13 @@ void systick_wait_ms(uint32_t ms)
uint64_t systick_get_global_tick() uint64_t systick_get_global_tick()
{ {
return global_tick_ms; uint64_t temp;
__disable_irq();
temp = global_tick_ms;
__enable_irq();
return temp;
} }
bool __attribute__((optimize("O3"))) systick_ticks_have_passed(uint64_t start_timestamp, uint64_t ticks) bool __attribute__((optimize("O3"))) systick_ticks_have_passed(uint64_t start_timestamp, uint64_t ticks)