哈嘍大家好,這是該系列博文的第一篇~ 篇~
<<【系列博文索引】快速通道 >>
上一篇我們知道了如何安裝電腦USB驅動,方便後續的調試和燒錄。這一篇我們就來打通串口的調試吧,當然通過MDE裏面的pydbg調試也是可以的。
一、前言
猶記得,在使用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);
歐拉——編譯測試一下吧。。。