找回密码
 立即注册

使用微信账号登录

只需一步,快速开始

QCC512x/302x笔记 - 实现串口输出调试log

2020-7-8 23:13| 发布者: csdn| 查看: 4630| 评论: 3|来自: CSDN

摘要: 一、前言 犹记得,在使用CSR/QCC3000系列研发产品的时候,通过配置IDE的属性,可实现在线调试,方便又实用。但

一、前言

犹记得,在使用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
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

路过

雷人

握手

鲜花

鸡蛋

相关阅读

发表评论

最新评论

引用 bibidentuhanoi 2022-9-11 00:17
我不能得到这个与qcc3031编译
引用 perpetuity 2021-12-24 18:00
没编译成功
引用 天中雨水 2021-12-24 14:46
牛批 plus

查看全部评论(3)

小黑屋|手机版|我爱蓝牙网 - 52Bluetooth

GMT+8, 2024-3-28 21:45 , Processed in 0.154768 second(s), 32 queries , Gzip On, MemCached On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

返回顶部