Thread 中讨论的其他器件:CC2650
工具/软件:TI-RTOS
您好!
除了蓝牙功能之外、我还需要 CC2650上的 ADC 支持(目前正在使用 launchpad)。 我相信 Project Zero 正在工作、我认为我理解该计划的一般流程、但我仍然有疑问。
我将从 Project Zero 发布主要任务以供参考:
静态空 ProjectZero_taskFxn (UArg a0、UArg A1) { //初始化应用 ProjectZero_init (); // 应用程序主循环(;) { //等待与调用线程关联的信号量。 //请注意、当发出信号时、与线程关联的信号量会发出信号 //消息在线程的消息接收队列中排队,或在何时排队 // iCall_signal ()函数被调用到信号量上。 iCall_errno errno = iCall_Wait (ICALL_TIMEOUT_FOREVAL); if (errno =ICALL_errno_Success) { iCall_EntityID dest; iCall_ServiceEnum src; iCall_HciExtEvt *pMsg =空; //检查我们是否由于堆栈消息而获得信号 if (iCall_fetchServiceMsg (&src、&dest、 (void **)&pMsg)=ICALL_errno_Success) { uint8 safeToDealloc = true; IF (((src =ICALL_SERVICE_CLASS_BLE)&&(dest =self Entity)) { iCall_Stack_Event *pEvt =(iCall_Stack_Event *) pMsg; //检查接收到的事件标志(事件签名0xFFFF) if (pEvt->signature == 0xFFFF) { //完成连接事件时接收到的事件 if (pEvt->EVENT_FLAG & PRZ_CONN_EVT_END_EVT) { //尝试重新发送待处理的 ATT 响应(如果有) ProjectZero_sendAttRsp(); } } 否则//它是来自堆栈的消息,而不是事件。 { //处理任务间消息 safeToDealloc = ProjectZero_processStackMsg ((iCall_HDR *) pMsg); } } if (pMsg && safeToDealloc) { iCall_freeMsg (pMsg); } } //处理从另一个任务或另一个上下文发送的消息。 while (!Queue_empty (hApplicationMsgQ)) { app_msg_t *pMsg = Queue_dequeue (hApplicationMsgQ); //处理可能从我们自己发送的应用层消息。 USER_processApplicationMessage (pMsg); //释放收到的消息。 iCall_free (pMsg); } } }
关于 Queue_empty 和去队列的最后一位使我相信附加辅助任务的正确方法是创建任务并将其结果排队到 hApplicationMsgQ 队列中、以便在 user_processApplicationMessage (pMsg)中进行处理;
我的问题是:
1. 这是正确/推荐的方法吗? (使用已建立的应用程序队列)
2. 我是否需要休眠主任务以便次级运行? (我是否需要设定优先级以及它们在哪里?)
3、次要任务或多或少是一个定时任务(ADC 每~ 100ms 采样一次)。 我将如何使该任务在某个时间间隔内休眠或触发?
4. Log_info 在哪里 呼叫定向至? 它们似乎会导致 XDC、这使我认为它们已连接到调试器。 这些消息是否会传递到电路板运行的 CCS 实例?
谢谢!