我在BLEPeripheral工程中使用IIC模块读取一个传感器的值,为了保证读取间隔的准确性,我在SimpleBLEPeripheral_init中新建了一个线程A,新的线程A中使用一个定时器,定时器时间到时,会调用一个函数发送事件到的信号量,在线程A中一直等待这个信号,一旦接收到,就去读传感器数据,然后通过SetParameter函数将数据发送出来。
现在的问题是,在不使能通知的情况下,上述流程可以正常执行,一旦在采集之前通过Central设备使能Peripheral的通知,那么再执行上述过程就会导致蓝牙断开。同时,如果采集之后不调用SetParameter函数,则即使使能通知,也不会断开蓝牙。
部分相关代码:
void pressure_clock_fxn(UArg arg) { Semaphore_post(aps.sem_handle); LED_Control(&handle, 0, LED_TOGGLE); return; } void SimpleBLEPeripheral_APSTaskFxn(UArg a0, UArg a1) { int16_t pressure; float temperature; char s[40]; uint8_t value_to_copy[SIMPLEPROFILE_CHAR6_LEN] = {0xff}; Semaphore_Params sem_param; aps.queue_handle = Util_constructQueue(&aps.queue); Semaphore_Params_init(&sem_param); sem_param.mode = Semaphore_Mode_BINARY; aps.sem_handle = Semaphore_create(1, &sem_param, NULL); Util_constructClock(&aps.clock, pressure_clock_fxn, 500, 500, 0, 0); for(;;) { if ( aps.to_be_deleting ) { break; } // 不处于已连接状态 if (ble_state != 3) { if ( aps.clock.__f4 ) { Util_stopClock(&aps.clock); }LED_Control(&handle, 0, LED_TOGGLE); Task_sleep(10); } else { if ( !aps.clock.__f4 ) { Util_startClock(&aps.clock); } APS_GetPressureData(&pressure, &temperature); memcpy(value_to_copy, &pressure, 2); SimpleProfile_SetParameter(SIMPLEPROFILE_CHAR6, 2, value_to_copy); sprintf(s, "P:%d,T:%.2f\n", pressure, temperature); uart_writeTransport((uint8*)s, strlen(s)); //Task_sleep(10); Semaphore_pend(aps.sem_handle, BIOS_WAIT_FOREVER); } } // 删除定时器 Queue_destruct(&aps.queue); Semaphore_delete(&aps.sem_handle); Clock_destruct(&aps.clock); aps.to_be_deleting = false; return; } void SimpleBLEPeripheral_createAPSTask(void) {Task_Params taskParams;APS_Init();// Configure taskTask_Params_init(&taskParams);taskParams.stack = aps.task_stack;taskParams.stackSize = APS_TASK_STACK;taskParams.priority = 3;Task_construct(&aps.task, SimpleBLEPeripheral_APSTaskFxn, &taskParams, NULL); } void SimpleBLEPeripheral_deleteAPSTask(void) {aps.to_be_deleting = true;//while(aps.to_be_deleting);Task_sleep(1);APS_Uninit();Task_destruct(&aps.task); }
主设备可以通过发送KS来开始数据采集与发送,发送TZ来终止数据采集与发送。
请诸位帮忙分析一下原因,不胜感激。
Viki Shi:
新建任务请按照如下文档的说明: processors.wiki.ti.com/…/Adding_BLE_Enabled_RTOS_Task