time_measure.c 728 B

1234567891011121314151617181920212223242526272829303132
  1. #include "bsp/bsp.h"
  2. #include "bsp/delay.h"
  3. #include "os/os_task.h"
  4. #include "libs/time_measure.h"
  5. #define COUNT_2_US(c) (c/120)
  6. u32 time_delta_us(u32 count, u32 *p_update) {
  7. u32 now = task_ticks_abs();
  8. u32 delta = now - count;
  9. if (now < count) { //wrap
  10. delta = 0xFFFFFFFF - count + now + 1;
  11. }
  12. if (p_update) {
  13. *p_update = now;
  14. }
  15. return COUNT_2_US(delta);
  16. }
  17. void time_measure_start(measure_time_t *m){
  18. m->intval_time = time_delta_us(m->intval_count, &m->intval_count);
  19. m->exec_count = task_ticks_abs();
  20. }
  21. void time_measure_end(measure_time_t *m) {
  22. m->exec_time = time_delta_us(m->exec_count, NULL);
  23. if (m->exec_time > m->exec_max_time) {
  24. m->exec_time_error ++;
  25. m->exec_max_error_time = m->exec_time;
  26. }
  27. }