英飞凌
直播中

陈飞

8年用户 1249经验值
私信 关注

使用psoc62+CYW43012扫描信标时,wiced_bt_ble_scan返回WICED_BT_NO_RESOURCES如何解决?

当我使用 psoc62 + CYW43012 扫描信标时。 在某些情况下,wiced_bt_ble_scan 会返回 WICED_BT_NO_RESOURCES(8102)。 那么如何才能解决这个问题呢?
代码如下:
ble_err_t hal_ble_Scan_start()
{
wiced_result_t result = WICED_BT_SUCCESS;
uint32_t largest_free_size = 0;
if(hal_ble_scan_state_cnt)
return ble_OK;
//if(wiced_bt_ble_get_current_scan_state() != BTM_BLE_SCAN_TYPE_NONE)
// return ble_OK;
result = wiced_bt_ble_scan( BTM_BLE_SCAN_TYPE_HIGH_DUTY, WICED_TRUE, hello_sensor_scan_result_cback );
uint8_t cur_heap_usage = cybt_platform_task_get_tx_heap_utilization( largest_free_size);
if(ble_tx_heap_usage   result != WICED_BT_PENDING   result != WICED_BT_BUSY)
{
printf( "ERROR SCAN FAILED: %d, heap use %%d; max free size:%dn", result ,cur_heap_usage,largest_free_size);
if(!app_ble_scan_err)
app_ble_scan_err = 1;
}
else
app_ble_scan_err = 0;
if(!hal_ble_scan_state_cnt)
hal_ble_scan_state_cnt = 1;
printf("wiced_bt_ble_scan: %Xn", result );
return ble_OK;
}


                                                                                                                                                                                                                                    

回帖(1)

张磊

2024-7-3 16:55:56
WICED_BT_NO_RESOURCES(8102)错误表示在尝试启动蓝牙扫描时,系统没有足够的资源来完成这个操作。要解决这个问题,您可以尝试以下几种方法:

1. 检查资源分配:确保您的系统为蓝牙扫描分配了足够的资源。这可能包括内存、处理能力等。您可以在初始化蓝牙模块时调整资源分配。

2. 优化代码:检查您的代码,确保没有内存泄漏或其他资源浪费的问题。优化代码可以提高资源利用率,从而避免 WICED_BT_NO_RESOURCES 错误。

3. 降低扫描频率:如果可能的话,尝试降低扫描频率。这可以减少系统资源的消耗,从而降低出现 WICED_BT_NO_RESOURCES 错误的可能性。

4. 检查其他蓝牙操作:确保在扫描过程中没有其他蓝牙操作正在执行,这可能会导致资源不足。如果有其他蓝牙操作,您可以考虑将它们与扫描操作分开执行,或者调整它们的优先级。

5. 重启蓝牙模块:在某些情况下,重启蓝牙模块可能会解决资源不足的问题。您可以尝试在出现错误时重启蓝牙模块。

6. 更新固件或软件:检查是否有适用于您的设备的固件或软件更新。这些更新可能包含修复资源不足问题的错误修复。

以下是您的代码示例,我已经对其进行了一些修改,以帮助您解决 WICED_BT_NO_RESOURCES 错误:

```c
ble_err_t hal_ble_Scan_start() {
    wiced_result_t result = WICED_BT_SUCCESS;
    uint32_t largest_free_size = 0;

    if (hal_ble_scan_state_cnt) {
        return ble_OK;
    }

    // 检查当前扫描状态,如果已经在扫描,则直接返回
    if (wiced_bt_ble_get_current_scan_state() != BTM_BLE_SCAN_TYPE_NONE) {
        return ble_OK;
    }

    // 尝试降低扫描频率或优化资源分配
    // ...

    result = wiced_bt_ble_scan(BTM_BLE_SCAN_TYPE_HIGH_DUTY, WICED_TRUE, hello_sensor_sc);

    if (result == WICED_BT_NO_RESOURCES) {
        // 处理资源不足的情况,例如重启蓝牙模块或降低扫描频率
        // ...
    }

    return result;
}
```

希望这些建议能帮助您解决 WICED_BT_NO_RESOURCES 错误。如果问题仍然存在,请考虑联系设备制造商或寻求专业的技术支持。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分