Преглед изворни кода

Merge branch 'bugfix/timer_spinlock_iram' into 'master'

timer: add IRAM_ATTR to spinlock give/take API

Closes IDFGH-5038

See merge request espressif/esp-idf!13107
Michael (XIAO Xufeng) пре 4 година
родитељ
комит
2f298aa02a
2 измењених фајлова са 8 додато и 4 уклоњено
  1. 6 2
      components/driver/include/driver/timer.h
  2. 2 2
      components/driver/timer.c

+ 6 - 2
components/driver/include/driver/timer.h

@@ -432,6 +432,8 @@ void timer_group_clr_intr_sta_in_isr(timer_group_t group_num, timer_intr_t intr_
 bool timer_group_get_auto_reload_in_isr(timer_group_t group_num, timer_idx_t timer_num);
 
 /** @brief Take timer spinlock to enter critical protect
+ *
+ *  @note Deprecated, the recommended way is to use ISR callbacks instead, see timer_group_example_main
  *
  * @param group_num Timer group number, 0 for TIMERG0 or 1 for TIMERG1
  *
@@ -439,9 +441,11 @@ bool timer_group_get_auto_reload_in_isr(timer_group_t group_num, timer_idx_t tim
  *     - ESP_OK Success
  *     - ESP_ERR_INVALID_ARG Parameter error
  */
-esp_err_t timer_spinlock_take(timer_group_t group_num);
+esp_err_t timer_spinlock_take(timer_group_t group_num) __attribute__ ((deprecated));
 
 /** @brief Give timer spinlock to exit critical protect
+ *
+ *  @note Deprecated, the recommended way is to use ISR callbacks instead, see timer_group_example_main
  *
  * @param group_num Timer group number, 0 for TIMERG0 or 1 for TIMERG1
  *
@@ -449,7 +453,7 @@ esp_err_t timer_spinlock_take(timer_group_t group_num);
  *     - ESP_OK Success
  *     - ESP_ERR_INVALID_ARG Parameter error
  */
-esp_err_t timer_spinlock_give(timer_group_t group_num);
+esp_err_t timer_spinlock_give(timer_group_t group_num) __attribute__ ((deprecated));
 
 #ifdef __cplusplus
 }

+ 2 - 2
components/driver/timer.c

@@ -474,14 +474,14 @@ bool IRAM_ATTR timer_group_get_auto_reload_in_isr(timer_group_t group_num, timer
     return timer_hal_get_auto_reload(&(p_timer_obj[group_num][timer_num]->hal));
 }
 
-esp_err_t timer_spinlock_take(timer_group_t group_num)
+esp_err_t IRAM_ATTR timer_spinlock_take(timer_group_t group_num)
 {
     TIMER_CHECK(group_num < TIMER_GROUP_MAX, TIMER_GROUP_NUM_ERROR, ESP_ERR_INVALID_ARG);
     TIMER_ENTER_CRITICAL(&timer_spinlock[group_num]);
     return ESP_OK;
 }
 
-esp_err_t timer_spinlock_give(timer_group_t group_num)
+esp_err_t IRAM_ATTR timer_spinlock_give(timer_group_t group_num)
 {
     TIMER_CHECK(group_num < TIMER_GROUP_MAX, TIMER_GROUP_NUM_ERROR, ESP_ERR_INVALID_ARG);
     TIMER_EXIT_CRITICAL(&timer_spinlock[group_num]);