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.

[参考译文] RTOS/LAUNCHXL-CC2650:向简单 BLE 外设添加读取 UART 任务不起作用

Guru**** 2551110 points
Other Parts Discussed in Thread: CC2650

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/578359/rtos-launchxl-cc2650-adding-reading-over-uart-task-to-simple-ble-peripheral-doesn-t-work

器件型号:LAUNCHXL-CC2650
Thread 中讨论的其他器件:CC2650

工具/软件:TI-RTOS

我有一个修改后的 SimpleBLEperipheral 项目工作版本、该版本在启用通知后通过 BLE 向对等器件发送数据。

我正在尝试添加另一个任务、即通过 UART 读取数据(来自另一个 cc2650、但现在我将通过 Putty 手动键入字符)。

这两个任务之间没有逻辑相关性、一个任务通过 BLE 进行通信、另一个任务仅从 UART 读取。

这两个任务中的每一个任务都能完美地单独运行、但当我创建其中的两个任务时、BLE 任务仅起作用。  

具体而言、执行会进入信标挂起(请参阅下文)、但永远不会调用 UART 读取回调函数。

首先、当我创建这两个任务时、它们都不会运行、当我增大 BLE 任务堆栈大小时、它就可以正常运行。 但是、这种"技巧"对 UART 任务不起作用。

有什么关于如何调试它的想法吗? 或者、这种行为的原因可能是什么?

以下是 UART 代码。

非常感谢!

void UART_taskFxn (UARg arg0、UARg arg1)
{
//初始化应用
程序 UART_task_init ();

UART_Params uartParams;
measuration_t* meaPtr;

/*创建一个数据处理关闭的 UART。 *
UART_PARAMS_INIT (uartParams);
uartParams.writeDataMode = UART_DATA_BINARY;
uartParams.readDataMode = UART_DATA_BINARY;
uartParams.readReturnMode = UART_return_full;
uartParams.readMode = UART_MODE_CALLACK;
uartParams.readCallback = uartReadCallback;
uartParams.readEcho = UART_ECHO_OFF;
uartParams.baudrate = 115200;

UART = UART_open (Board_UART0、&uartParams);
UART_read (UART、&rxMsg、measuration_LEN_bytes);

while (1)
{
semaphore_pend (semHandle、BIOS_wait_forever);
while (!Queue_empty (measureQueueHandle))
{
mePtr = Queue_dequeue (measureQueueHandle);
free (mePTr);
//需要在此处添加代码...
}
}



静态 void uartReadCallback (UART_Handle handle、void * buf、size_t count)
{
measurement_t * measurementPtr =(measurement_t *) malloc (sizeof (measurement_t)));
strncpy (measurementPtr -> data、buf、count);
Queue_enqueue (measureQueueHandle、&measurementPtr ->_elem);
Semaphore_post (semHandle);
PIN_setOutputValue (ledPinHandle、Board_LED1、!PIN_getOutputValue (Board_LED1));
UART_READ (UART、 &rxMsg、measure_LEN_bytes);
} 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Mega:

    您能否提供添加任务的确切方式?
    +您对 simple_peripheral 进行的任何其他修改?

    这样我们就可以尝试在我们的一边重现它

    这里有许多可能的故障点。 我知道它们单独工作正常、当组合时只有 BLE 工作-向我发出信号、表明它们未正确组合。 我最想说的是、您正在用尽 TI RTOS 堆或 Cstack 堆。

    software-dl.ti.com/.../platform.html

    如果您想阅读这些内容、

    此致、
    反叛分子
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你好,Rebel,

    非常感谢您的快速回答。

    我设法发现了这个问题- UART 任务"饿了"、没有得到 CPU 时间。
    这两个任务具有相同的优先级1。
    一旦 UART 任务在信号量上挂起、BLE 任务就开始运行。 尽管信标是从回调中发出的、但程序不会返回到 UART 任务来执行读取。

    通过将 UART 任务优先级设置为2、可以解决问题。

    Mor