一、前言
犹记得,在使用CSR/QCC3000系列研发产品的时候,通过配置IDE的属性,可实现在线调试,方便又实用。但是到了QCC3020/512x系列,这种方式并没有被沿用,而是采用了fw_live_log,实际测试发现新的方式不太稳定,特别log比较多的时候。
二、灵活运用
考虑到QCC3020/512x系列是由CSR系列升级而来,代码沿用度比较高,那能不能将之前实现过的UART通信移植过来用呢?答案应该是可以的。
三、实践出真知
天马行空的想象,不如动手实践——说干就干:
1、新建app_uart.h,如下
#ifndef __APP_UART_H__
#define __APP_UART_H__
#include <message.h>
typedef struct
{
TaskData task;
Task client;
Sink uart_sink;
unsigned uart_src_need_drop:1;
uint8* pUartSrcStart;
uint8* pUartSrcEnd;
uint16 send_packet_length;
}UARTStreamTaskData;
extern UARTStreamTaskData theUARTTask;
Sink UartInit(Task task);
bool UartSendData(uint8 *data, uint16 size);
void app_uart_handler(Task t, MessageId id, Message msg);
void my_UartInit(Task client);
#endif
2、新建app_uart.c,如下
#include <message.h>
#include <pio.h>
#include "sink_events.h"
#include "sink_config.h"
#include "sink_configmanager.h"
#include "sink_a2dp.h"
#include "app_uart.h"
#include "sink_debug.h"
UARTStreamTaskData theUARTTask;
static Sink sUartSink = 0;
void app_uart_handler(Task t, MessageId id, Message payload)
{
UNUSED(t);
UNUSED(payload);
switch(id)
{
case MESSAGE_MORE_DATA:
{
}
break;
default:
break;
}
}
Sink UartInit(Task task)
{
sUartSink = StreamUartSink();
if(!sUartSink)
return 0;
/* Configure sink not to send MESSAGE_MORE_SPACE */
PanicFalse(SinkConfigure(sUartSink, VM_SINK_MESSAGES, VM_MESSAGES_NONE));
StreamConfigure(VM_STREAM_UART_CONFIG, VM_STREAM_UART_LATENCY);
StreamUartConfigure(VM_UART_RATE_115K2, VM_UART_STOP_ONE, VM_UART_PARITY_NONE);
//MessageSinkTask(StreamUartSink(), task);
MessageStreamTaskFromSink(StreamUartSink(),task);
return sUartSink;
}
bool UartSendData(uint8 *data, uint16 size)
{
if(!sUartSink)
{
return FALSE;
}
if (!data || size == 0)
{
return FALSE;
}
if(SinkClaim(sUartSink, size) != 0xFFFF)
{
memmove(SinkMap(sUartSink), data, size);
(void) PanicZero(SinkFlush(sUartSink, size));
return TRUE;
}
return FALSE;
}
void AppUartInit(Task client)
{
theUARTTask.task.handler = app_uart_handler;
theUARTTask.client = client;
theUARTTask.uart_sink = UartInit(&theUARTTask.task);
printVmLogsInTestSystem("uartinit\r\n");
}
3、使用配置工具设置两个IO口为串口,比如我选的是PIO60和PIO61,同时勾选PIO Mapping Assignments
4、修改Subsys7_config3.htf,使用#注释掉IIC的配置,如果有IO口冲突。
四、重点来了
1、修改main.c文件中的一行代码
注释掉改为下面这样:
//printVmLogsInTestSystem()接口中
//AhiPrintVmLogs(print_buffer);
UartSendData((uint8 *)print_buffer, strlen(print_buffer));
2、在main函数中调用AppUartInit(&theSink.task);
欧拉——编译测试一下吧。。。 来源:https://blog.csdn.net/zhanghuaishu0/article/details/107050565 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
|