请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:LAUNCHXL-CC2650 Thread 中讨论的其他器件:CC2650
我目前正在从事一个项目、 在该项目中、我将使用具有低功耗蓝牙的 CC2650 Launchpad 来实现手机与 MSP430之间的通信。 我们在获取 CC2650从手机接收的数据、然后通过 UART 将相同数据发送到 MSP430时遇到问题。 我们可以通过 CC2650一次性将数据从手机发送到 MSP430、但当手机向 CC2650发送新数据时、该数据永远不会更新。
我们使用 ProjectZero 示例启动了该项目,并添加了 uartecho_CC2650_LAUNCHXLL_TI...中的代码 以获取 UART 功能。 我们在 project_zero.c 文件中确定了一个点、我们认为需要对 UART 进行读取和写入操作、但在获得初始数据后无法发送新数据的代码。 附件是代码的屏幕截图。 我们使用来自 projectzero 构造的 ProjectZero_taskFxn()调用来使用示例中给出的 for (;)循环(下面是第一个代码片段)。 第二个映像使用 project_zero.c 中的 USER_processApplicationMessage (psMg)调用 这最终会导致调用 USER_DataService_ValueChangeHandler()的第三个映像 ,在该映像中,我们实现了 UART_echo 示例的修改版本,并标记了修改后的代码 UART_MCU()。 然后、该函数调用下面标记为 UART_MCU()的第二个代码片段、并尝试使用 UART 从 MSP430进行写入和读取。 通过当前设置、我们可以连续读取(由于 while 环路)并将新数据从手机写入 MSP430一次。 但是、我们必须首先写入才能从 MSP430读取任何数据、因为我们已经在 project_zero.c 中的某个位置实现了 UART 调用、程序将等待来自电话的传入消息。 我们知道这不是正确的逻辑实现功能的方法、但是、我们无法在其他地方放置或 UART 实现时成功构建。 您对我们可以将 UART 实现置于何处有何建议、以便我们能够从 MSP430和移动应用中连续读取和写入?
P.S. 我们没有在 UART 中使用 task_construct,因为我们没有看到它的实施有任何变化,但是,我们认为这也可能是一个问题,并且可以很容易地将它重新实施。
静态空 ProjectZero_taskFxn (UARg a0、UARg A1) { //初始化应用 ProjectZero_init (); //UART_read (); //静态 uint8_t received_string[DS_string_LEN]={0}; //UART_Start (received_string); //应用程序主循环 ( ;{;} //等待与调用线程关联的信号量。 //请注意、当发出信号时、与线程关联的信号量会发出信号 //消息在线程的消息接收队列中排队,或在何时排队 // iCall_signal ()函数被调用到信号量上。 iCall_errno errno = iCall_Wait (ICALL_TIMEOUT_FOREVAL); //uart_read(); 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); } } }
extern void UART_MCU (uint8_t * received_string)
{
字符输入[3]={0};
//char 输出[3]={0};
//int num_Bytes =0;
//int inc = 0;
int len_read =(sizeof (input)/sizeof (char));
int num_Bytes = 0;
//int len =(sizeof (received_string)/sizeof (uint8_t));
UART_Handle UART;
UART_Params uartParams;
//创建数据处理关闭的 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.readEcho = UART_ECHO_OFF;
uartParams.baudrate = 9600;
UART = UART_OPEN (Board_UART0、uartParams);
uint8_t * write_string;
while (1)
{
write_string = received_string;
如果(UART == NULL)
{
;//System_abort ("打开 UART 时出错");
}
memset (input、0、sizeof (input));
_DELAY_CYCLES (1000000);
if (num_Bytes= UART_read (UART、INPUT、len_read))
{
if (num_Bytes =UART_ERROR)
{
printf ("从 MSP430\n"\n 读取错误");
}
其他
{
//数据服务中可提供数据的特征的初始化。
dataservice_SetParameter (DS_STRING_ID、sizeof (input)、input);
}
}
if (num_Bytes= UART_WRITE (UART、write_string、3))
{
if (num_Bytes =UART_ERROR)
{
printf ("写入 MSP430时出错");
}
//DataService_SetParameter (DS_STREE_ID、DS_STREE_LEN、initVal);
}
memset (input、0、sizeof (input));
}
}