Thread 中讨论的其他器件:SYSBIOS
工具/软件:TI-RTOS
大家好、
我使用了 ble5_simple_broadcaster _cc2640r2lp_app 示例项目。我创建了另外两个控制 UART 和 ADC 的任务。
UART 和 ADC 的任务优先级为1
SimpleBLEBroadcaster 的任务优先级为1
现在、我有3个具有相同优先级的任务。
我尝试使用 Task_yield ()来共享这三个任务的 CPU。
UART 的任务函数
静态空 SimpleUART_taskFxn (XDC_UARg arg0、XDC_UARg arg1){ const char text[]="试用版文本"; UART_Handle uartHandler; UART_Params uartParams; UART_INIT(); UART_PARAMS_INIT (uartParams); uartParams.writeDataMode = UART_DATA_BINARY; uartParams.readDataMode = UART_DATA_BINARY; uartParams.readReturnMode = UART_return_full; uartParams.readEcho = UART_ECHO_OFF; uartParams.baudrate = 115200; uartHandler = UART_OPEN (Board_UART0、uartParams); while (1){ UART_WRITE (uartHandler、text、sizeof (text)); Task_yield (); } }
ADC 的任务函数
静态空 threadFxn0 (XDC_UARg arg0、XDC_UARg arg1) { ADC_Handle adcHandler; ADC_Params adcParams; ADC_Params_init (&adcParams); adcHandler = ADC_open (Board_DIO23_analog、&adcParams); if (adcHandler == NULL){ while (1); } while (1){ ADC_convert (adcHandler、&adcValue); Task_yield (); } adc_close (adcHandler); }
SimpleBLEBroadcaster 的任务函数
静态空 SimpleBLEBroadcaster _taskFxn (UArg a0、UArg A1) { //初始化应用 SimpleBLEBroadcaster _init (); // 应用程序主循环用于(;) { //获取自启动以来的节拍数 uint32_t tickStart = Clock_getTicks(); uint32_t 事件; 事件= Event_pend (syncEvent、Event_ID_none、SBB_All_Events、 iCall_TIMEOUT_FOREVER); IF (事件) { iCall_EntityID dest; iCall_ServiceEnum src; iCall_HciExtEvt *pMsg =空; if (iCall_fetchServiceMsg (&src、&dest、 (void **)&pMsg)=ICALL_errno_Success) { IF (((src =ICALL_SERVICE_CLASS_BLE)&&(dest =self Entity)) { //处理任务间消息 SimpleBLEBroadcaster _processStackMsg ((iCall_HDR *) pMsg); } if (pMsg) { iCall_freeMsg (pMsg); } } //如果 RTOS 队列不为空,则处理应用程序消息。 IF (事件和 SBB_queue_EVT) { while (!Queue_empty (appMsgQueue)) { sbbEvt_t *pMsg =(sbbEvt_t *) Util_dequeueMsg (appMsgQueue); if (pMsg) { //处理消息。 SimpleBLEBroadcaster _processAppMsg (pMsg); //从消息中释放空间。 iCall_free (pMsg); } } } Task_yield (); }
我将代码上传到 launchpad 并打开 UART 终端以查看"试用版文本"。 然而,没有任何东西。
我可能以错误的方式使用了 Task_yield ()函数。
请帮助我找出我的问题
谢谢你
祝你度过美好的一天



