]> granicus.if.org Git - esp-idf/commitdiff
component/bt : fix bug of task schedule delayed.
authorTian Hao <tianhao@espressif.com>
Wed, 7 Jun 2017 06:58:17 +0000 (14:58 +0800)
committerTian Hao <tianhao@espressif.com>
Wed, 7 Jun 2017 06:58:17 +0000 (14:58 +0800)
1. BLE RX test mode require quick task reaction, so allow higher priority task schedule from ISR.
2. Maybe other scenario also require this.

components/bt/bt.c
components/bt/lib

index 34b29b9c0cf8c4d9cd79ad4fcefa6bd0b0ac393d..bf933af08ff1067519390a9d54be939a6f0c3f5f 100644 (file)
@@ -75,6 +75,7 @@ struct osi_funcs_t {
     void (*_interrupt_disable)(void);
     void (*_interrupt_restore)(void);
     void (*_task_yield)(void);
+    void (*_task_yield_from_isr)(void);
     void *(*_semphr_create)(uint32_t max, uint32_t init);
     int32_t (*_semphr_give_from_isr)(void *semphr, void *hptw);
     int32_t (*_semphr_take)(void *semphr, uint32_t block_time_ms);
@@ -104,6 +105,11 @@ static void IRAM_ATTR interrupt_restore(void)
     portEXIT_CRITICAL(&global_int_mux);
 }
 
+static void IRAM_ATTR task_yield_from_isr(void)
+{
+    portYIELD_FROM_ISR();
+}
+
 static void *IRAM_ATTR semphr_create_wrapper(uint32_t max, uint32_t init)
 {
     return (void *)xSemaphoreCreateCounting(max, init);
@@ -155,6 +161,7 @@ static struct osi_funcs_t osi_funcs = {
     ._interrupt_disable = interrupt_disable,
     ._interrupt_restore = interrupt_restore,
     ._task_yield = vPortYield,
+    ._task_yield_from_isr = task_yield_from_isr,
     ._semphr_create = semphr_create_wrapper,
     ._semphr_give_from_isr = semphr_give_from_isr_wrapper,
     ._semphr_take = semphr_take_wrapper,
index 8f6c2c5481d30342be8f69067a68ca7344d7b0c3..e1f7dbc3bd717e142ca6c717b82a7a813c1e36f4 160000 (submodule)
@@ -1 +1 @@
-Subproject commit 8f6c2c5481d30342be8f69067a68ca7344d7b0c3
+Subproject commit e1f7dbc3bd717e142ca6c717b82a7a813c1e36f4