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/CC2640:支持 BLE 的 RTOS 任务

Guru**** 2562960 points
Other Parts Discussed in Thread: CC2640

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/586401/rtos-cc2640-ble-enabled-rtos-task

器件型号:CC2640

工具/软件:TI-RTOS

CC2640 4x4定制板、ble_sdk_2_02_01_18、CCS 6.2、XDS200调试器

已将 UART 任务添加到应用中、以使用中的 UART 驱动程序进行替换

读取回调 模式。 这是硬故障总线错误的解决方案。 UART_TASK

优先级为2、SBP 任务优先级为1。 当前、当 UART 任务完成时、

它向 SBP 任务发布信标。

UART 任务使用 osal_SNV 读取和写入 API。 我理解这需要

UART 任务是 启用 BLE 的 RTOS 任务。

在阅读本 wiki 时、我将提出以下问题。 如果有、请通知我

我的上述假设不正确。

1.本 wiki 中描述的 RTOS 任务(通知任务)与相同

应用中的 UART_TASK、对吧?

2.我将此 wiki 第2页的代码添加到 UART 任务的 MAIN_LOOP?

3.何时发布 notify_task (UART_task) select 事件? 我不是

在 UART 任务中有一个 Hwi 事件。 我知道何时需要读取或

从 UART_TASK 写入 SNV。

最后、我将这些预定义符号设置如下:

OSAL_MAX_NUM_PROXY 任务=3 (SBP 任务、GAPRoleTask、UART 任务)。

iCall_MAX_NUM_TASKs=4 (堆栈任务、SBP 任务、UART 任务和 GAP 角色任务)。

谢谢、

Priya

谢谢、

Priya

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

    如果您的任务未使用任何中断、则必须轮询(可能类似于 Task_sleep()并检查 UART 外设的状态寄存器) UART (不完全是节能)。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

     Tom、

    我尝试将 UART 驱动程序设置为读回调模式并使用 swi 生成

    Notify_task_select_evt。

    BLE 广播、但 UART 永远不会被读取。 是否有办法实现该解决方案

    可行吗?

    静态空 NotificationTask_init (空)

     //

     //在调用 iCall_registerApp 之前可能会发生 N0栈 API 调用

     //

     //将当前线程注册为 iCall 调度应用程序

     //以便应用程序可以发送和接收消息。

     iCall_registerApp (自实体、SEM);

       UART_initialize();

    /*********

    188 *@fn   NotificationTask_taskFxn

    189 *

    190 *@ 通知任务的简短应用程序任务入口点。

    191 *

    192 *@param a0、A1 -未使用。

    193 *

    194 *@返回 无。

    195 */

    静态空 NotificationTask_taskFxn (UARg a0、UARg A1)

    //初始化应用程序

    NotificationTask_init();

    //应用程序主循环

    对于(;)

    uint8_t 字节;

      //等待与调用线程关联的信号量。

      //请注意、当发出信号时、与线程关联的信号量会发出信号

      //消息在线程的消息接收队列中排队,或在何时排队

      // iCall_signal ()函数被调用到信号量上。

      iCall_errno errno = iCall_Wait (ICALL_TIMEOUT_FOREVAL);

    if (uartTx = 0){

    if (UART_READ (UART、&byte、1)== UART_ERROR){

          system_printf ("UART_read() timeout");

      }

      if (事件和 notify_task_select_evt)

      {

        receiveUartMsg (字节);

      //设置通知数据

      uint16 len = sizeof (uint32);

    attHandleValueNoti_t 通知;

    bStatus_t status;

    NOTI.Handle = 0x1E;

    oti.len = len;

    //尝试分配有效载荷

    NOTI.pValue =(uint8 *) GATT_BM_alloc (0、ATT_Handle_value_Noti、GATT_MAX_MTU、&len);

    if (NOti.pValue!= NULL)//if allocated

     //位置索引

     NOTI.pValue[0]=(dataToNotify >> 24)& 0xFF;

     NOTI.pValue[1]=(dataToNotify >> 16)和0xFF;

     NOTI.pValue[2]=(dataToNotify >> 8)& 0xFF;

     NOTI.pValue[3]= dataToNotify & 0xFF;

     状态= GATT_Notification (0、&Noti、0);  //尝试发送

     如果(status != Success)//如果未发送通知

     {

    GATT_BM_FREE ((gattMsg_t *)&NOTI、ATT_Handle_Value_NOTI);

     }

    其他

     //bleNoResources

     asm (" NOP");

    //清除事件

      ~&=μ s notify_task_select_evt;

      }

     }

    静态空 UART_initialize (空)

      UART_Params uartParams;

      UART_INIT();

      /*创建一个数据处理关闭的 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.writeMode = UART_MODE_BLOCKING;

      uartParams.readCallback = UARTCallback;

      uartParams.baudrate = 9600;

      UART = UART_OPEN (Board_UART、uartParams);

      if (UART == NULL){

        System_abort ("打开 UART 时出错");

      }

      uartTx = 0;

    静态空 UARTCallback (UART_Handle UART、void *字节、size_t size)

      events |= notify_task_select_evt;

      Semaphore_post (SEM);

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如何确认应用程序是否已通过 iCall_errno errno = iCall_Wait (ICALL_TIMEOUT_FOREVAL);
    在通知任务内?

    sem2errNo = iCall_registerApp (&self Entity2、&sem2);呼叫成功。

    检查 UART 外设状态寄存器的语法是什么?

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

    UART 任务最终启用 BLE。 UART 任务已更改为连续读取

    读取回调。 实际上、4.2.5 iCall Thread 上有一些非常清晰的信息

    SDG 的同步。 ICall 正在接受在 swi 上发布的信号量。

    谢谢、

    Priya