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.

关于范例simple_peripheral_oad_offchip中添加新任务导致蓝牙连接超时

首先是在simple_peripheral_oad_offchip 的主任务中添加了新的功能函数实现,不知道是不是系统内存不够还是其他的原因,编译没问题下载到电路板上发现蓝牙连接超时的情况。   于是我在项目中添加了新任务,结果还是一样。

注:参照了该链接:processors.wiki.ti.com/.../Adding_BLE_Enabled_RTOS_Task

配置了app和stack的预定义 ICALL_MAX_NUM_TASKS=4 ICALL_MAX_NUM_ENTITIES=7 OSAL_MAX_NUM_PROXY_TASKS=3

创建任务代码:

void IRD_ReadScan_createTask(void){
    Task_Params taskParams;

    // Configure task
    Task_Params_init(&taskParams);
    taskParams.stack = IRDTaskStack;
    taskParams.stackSize = IRD_TASK_STACK_SIZE;
    taskParams.priority = IRD_TASK_PRIORITY;

    Task_construct(&IRD_Task, IRD_ReadScan_taskFxn, &taskParams, NULL);
}

static void IRD_ReadScan_taskFxn(UArg a0, UArg a1){

    // Register the current thread as an ICall dispatcher application
    // so that the application can send and receive messages.
    ICall_registerApp(&IRD_Entity, &IRD_Event);

    //...do someting

}

求各路大神解答!!!

  • 我也遇到了这个情况,在Simple_Peripheral例程中添加了Uart_Task。串口能够正常进行读写,程序没有跑死

    但是使用苹果LightBlue进行蓝牙连接提示Timeout  interrogating  the peripheral,对串口任务创建进行注释之后连接正常。

    在IAR进行Debug时Gap_role回调函数中设置全局变量用Live Watch进行观察,发现设备进入Connected状态之后大约十几秒,然后重新回到Advertising状态。

    其中Uart_Task的priority设置为2,Simple_Peripheral_Task的priority为1,两个任务的stackSize都为644。

    再次声明:程序没有跑死,只有蓝牙连接超时。

    请TI的专业工程师解答一下原因

  • 请您修改一下优先级设置,Uart_Task的priority设置为2,就表明串口的优先级是高于Simple_Peripheral_Task的。
    另外建议您有问题重新发帖。
  • 您好,谢谢回复。我尝试着修改任务的不同优先级,但是依然不起作用。

    无论Uart_Task和Simple_Peripheral_Task的任务优先级谁高,或者是一样高,还是遇到了连接超时的情况。

    但是两个Task都能够正常运行(Uart_Task正常回复数据、Simple_Peripheral_Task正常实现IO高低电平切换闪灯),问题依然出在蓝牙连接方面。

    苹果的LightBlue一般是先Connecting,然后interrogating。问题是当我采用这两个Task的时候,在Connecting阶段就会卡住然后连接超时。

    请帮忙分析一下原因

  • 你好,我的问题已经找到了原因并且解决了。

    1.我创建的Uart_Task中,在串口接收回调函数中引用了一个外部全局变量,这个全局变量是在simple_peripheral.c中定义并且在simple_peripheral.h中外部声明。该全局变量将导致蓝牙连接超时。

    2.当创建Uart_Task时,如果将IAR工程属性中的c/c++ compiler - Optimizations中的的优先级设置为None以达到Debug模式下观察变量的目的,此时必须增大Simple_peripheral_Task的任务栈大小,即SBP_TASK_STACK_SIZE。

    3.另外一个比较意外的是,当创建Uart_Task时,初始化ADC口将导致蓝牙连接不可用(原因未知,希望TI员工帮忙解答),我的ADC初始化DIO24管脚。

    但是由于串口是不得不用的一个功能,于是我在Simple_peripheral_Task任务中,对Uart进行初始化和回调,而不是新建一个Task,这能很好的避免以上问题。