QCC512x/302x筆記(3)-- 只改一行代碼,實現串口輸出調試log

哈嘍大家好,這是該系列博文的第一篇~ 篇~

<<【系列博文索引】快速通道 >>

上一篇我們知道了如何安裝電腦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);

歐拉——編譯測試一下吧。。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章