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
被浏览
1.5k
1 个回答
isme
isme 认证专家 2023-02-14
冰镇大西瓜

不能在中断里面使能蓝牙操作,做复杂且耗时的事情,正确逻辑是中断只是发信号量,在任务里面接收信号量执行相应耗时操作。

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览