QCC512x/302x笔记(3)-- 只改一行代码,实现串口输出调试log

哈喽大家好,这是该系列博文的第一篇~ 篇~

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

上一篇我们知道了如何安装电脑USB驱动,方便后续的调试和烧录。这一篇我们就来打通串口的调试吧,(当然通过MDE里面的pydbg调试也是可以的)串口除了可以用于调试,也可以用于串口外设的通信

一、前言

犹记得,在使用CSR/QCC3000系列研发产品的时候,通过配置IDE的属性,可实现在线调试,方便又实用。但是到了QCC512x/302x系列,这种方式并没有被沿用,而是采用了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);

欧拉——编译测试一下吧。。。

猜你喜欢

转载自blog.csdn.net/zhanghuaishu0/article/details/107050565
今日推荐