W801平臺BLE調試問題

發布於 2023-02-14 11:41:10

在用W801平臺Demo板調試BLE的時候,遇到了FreeRToS系統相關的問題,涉及了NimBLE開源庫,使用的SDK版本是W80X_SDK_v1.00.10。
項目開發需求是增加藍牙物理開關按鍵,我自己增加的BLE按鍵控制邏輯代碼如下:
(這裡初始化BLE默認開啟,實際用指令測試或者延時測試API調用是沒問題的,但是用按鍵中斷測試會存在問題,調試日志如下,還請幫忙查找原因!)

static void ble_gpio_isr_callback(void *context)
{
    u8 ret = 0;

    ret = tls_get_gpio_irq_status(BLE_BUTTON_GPIO);

    if (ret)
    {
        printf("ble button interrupt happen!\n");
        tls_clr_gpio_irq_status(BLE_BUTTON_GPIO);
        ble_button_check();
    }

    return;
}

void ble_button_init(void)
{
    tls_gpio_cfg(BLE_BUTTON_GPIO, WM_GPIO_DIR_INPUT, WM_GPIO_ATTR_PULLHIGH);
    tls_gpio_isr_register(BLE_BUTTON_GPIO, ble_gpio_isr_callback, NULL);
    tls_gpio_irq_enable(BLE_BUTTON_GPIO, WM_GPIO_IRQ_TRIG_LOW_LEVEL);

    ble_init();

    return;
}

void ble_init(void)
{
    u8 ret = 0;
            
    ret = tls_gpio_read(BLE_BUTTON_GPIO);
    printf("ble button check status value =%d\n",ret);

    if (ret)
    {
        demo_bt_enable();
        tls_os_time_delay(1000);
        demo_ble_server_on();
    }

    return;
}

void ble_button_check(void)
{
    u8 ret = 0;
            
    ret = tls_gpio_read(BLE_BUTTON_GPIO);
    printf("button check status value =%d\n",ret);

    if (ret)
    {
        demo_bt_enable();
        tls_os_time_delay(1000);
        demo_ble_server_on();
    }
    else
    {
        demo_bt_destroy();
    }

    return;
}

FD3D60D7-7B7C-4245-8DB7-4352B21230D0.png
C6BD5F57-E642-447a-BAD1-98F2893E5DCD.png

查看更多

關注者
0
被浏覽
2.2k
1 個回答
isme
isme 認證專家 2023-02-14
冰鎮大西瓜

不能在中斷裡面使能藍牙操作,做複雜且耗時的事情,正確邏輯是中斷只是發信號量,在任務裡面接收信號量執行相應耗時操作。

撰寫答案

請登錄後再發布答案,點擊登錄

發布
問題

分享
好友

手機
浏覽

掃碼手機浏覽