This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

CC2340R5: 循环执行Sleep和broadcast,执行数次循环后无法继续,原因未知

Part Number: CC2340R5

CCS版本:20.2.0.12__1.8.0

芯片:CC2340R52E0RGER

例程:basic_ble_LP_EM_CC2340R5_freertos_ticlang

修改配置:

1. 删除menu相关代码

2. 增加1个任务处理休眠和发起广播

相关代码如下

广播发起代码:

bStatus_t adv_restart(char *pData)
{
    char echoPrompt[100];
    size_t bytesWritten = 0;

    broadcasterInitAdvSet1.advData[20] = pData[0];
    broadcasterInitAdvSet1.advData[21] = pData[1];
    broadcasterInitAdvSet1.advData[22] = pData[2];
    broadcasterInitAdvSet1.advData[23] = pData[3];
    BLEAppUtil_initAdvSet(&broadcasterAdvHandle_1, &broadcasterInitAdvSet1);

    return BLEAppUtil_advStart(broadcasterAdvHandle_1, &broadcasterStartAdvSet1);
}

广播结束发送休眠消息

void Broadcaster_AdvEventHandler(uint32 event, BLEAppUtil_msgHdr_t *pMsgData)
{
    switch(event)
    {
        case BLEAPPUTIL_ADV_START_AFTER_ENABLE:
        {
            // MenuModule_printf(APP_MENU_ADV_EVENT, 0, "Adv status: Started - handle: "
            //                   MENU_MODULE_COLOR_YELLOW "%d" MENU_MODULE_COLOR_RESET,
            //                   ((BLEAppUtil_AdvEventData_t *)pMsgData)->pBuf->advHandle);
            break;
        }

        case BLEAPPUTIL_ADV_END_AFTER_DISABLE:
        {
            // MenuModule_printf(APP_MENU_ADV_EVENT, 0, "Adv status: Ended - handle: "
            //                   MENU_MODULE_COLOR_YELLOW "%d" MENU_MODULE_COLOR_RESET,
            //                   ((BLEAppUtil_AdvEventData_t *)pMsgData)->pBuf->advHandle);
            break;
        }

        case BLEAPPUTIL_ADV_SET_TERMINATED:
        {
            // send msg to sleep
            BLEAppUtil_advStop(broadcasterAdvHandle_1);
            ble_adv_stop_cb();
            break;
        }

        default:
        {
            break;
        }
    }
}

主函数与消息接收

void ble_adv_ctrl( char* pData)
{
    adv_data = adv_data + 1;
    adv_restart((char*)&adv_data);
}

void ble_adv_stop_cb (void)
{
    // usr_ble_cb_data = 3;
    xmsg[2].ucMessageID = 3;
    xQueueSend( usrQueue, ( void * ) (&(xmsg[2])), 50000 );
}

void *usr_Task(void *arg)

{

....

   xmsg[0].ucMessageID = 1;
    sleep(3); // sleep
    xQueueSend( usrQueue, ( void * ) (&(xmsg[0])), ( TickType_t ) 50000 );
    for (;;)
    {
        if( xQueueReceive( usrQueue, &( xMsgTmp ), ( TickType_t ) 50000 ) == pdPASS )
        {
            cnt = cnt + 1;
            sprintf(echoPrompt, "cnt %d\r\n", cnt);
            UART2_write(uart, echoPrompt, strlen(echoPrompt), &bytesWritten);
            sleep(10); // sleep
            BLEAppUtil_invokeFunctionNoData(&ble_adv_ctrl);
            // xQueueSend( usrQueue, ( void * ) (&(xmsg[0])), ( TickType_t ) 0 );
        }
   }
}