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);
欧拉——编译测试一下吧。。。
QCC512x/302x笔记(3)-- 只改一行代码,实现串口输出调试log相关推荐
- 谁说.NET没有GC调优,只改一行代码就让程序不再占用内存
经常看到有群友调侃"为什么搞Java的总在学习JVM调优?那是因为Java烂!我们.NET就不需要搞这些!"真的是这样吗?今天我就用一个案例来分析一下. 昨天,一位学生问了我一个问 ...
- 【Python】Modin,只需一行代码加速你的Pandas
本文翻译自:Shrivarsheni的博客 Modin是一个Python第三方库,可以通过并行来处理大数据集.它的语法和pandas非常相似,因其出色的性能,能弥补Pandas在处理大数据上的缺陷. ...
- 【CVPR2020 Oral】只需一行代码就可提升迁移性能
关注上方"深度学习技术前沿",选择"星标公众号", 精选文章,第一时间送达! 作者:Hassassin 知乎链接:https://zhuanlan.zhihu. ...
- 实现一个在JNI中调用Java对象的工具类,从此只需一行代码
前言 我们知道在jni中执行一个java函数需要调用几行代码才行,如 jclass objClass = (*env).GetObjectClass(obj); jmethodID methodID ...
- python实现英文新闻摘要自动提取_利用Python实现摘要自动提取,完美瘦身只需一行代码...
原标题:利用Python实现摘要自动提取,完美瘦身只需一行代码 今天给大家推荐一个也可以用于关键字提取的算法TextRank,但主要实现的功能是快速从长篇新闻中抽取精准摘要. 前言介绍 TextRan ...
- 用Python制作动态二维码,真的只需要一行代码!
来源 | Python3X(ID:python3xxx) 在最大的同性交友社区GitHub上发现了一个比较有意思的项目,无论你是什么操作系统,只需要一行代码就可以很方便的生成二维码.包括普通二维码.艺 ...
- 只需一行代码实现增删查改,微软已经让我们很简单。谈AccessDataSource的使用。...
这是一个很简单的内容.日常我们总腻烦做增删查改这样的重复性的劳动,如果你的项目不是太大,如果你的团队很小,或许就是你一个人,那么就完全可以参考以下这样简单的方式.微软已经给我们做了.我们只要写一行代码 ...
- [JavaScript]只需一行代码,轻松搞定快捷留言-V2升级版
前天熬了大半宿发了一篇[一行代码轻松搞定快捷留言功能],同时发布了V1.0beta版的快捷留言功能和源代码,之所以是beta版,就是当时感觉虽然基本功能有了,但是还不够完善,特性也不一定合理,今天不知 ...
- 模型秒变API只需一行代码,支持TensorFlow等框架
点击我爱计算机视觉标星,更快获取CVML新技术 本文转自机器之心 参与:一鸣.杜伟 还在为机器学习模型打包成 API 发愁?这个工具能让你一行代码直接打包. 专注于机器学习应用的人们知道,从训练好的模 ...
- vscode代码提示只显示一行_模型秒变API只需一行代码,支持TensorFlow等框架
选自GitHub 机器之心编译参与:一鸣.杜伟 还在为机器学习模型打包成 API 发愁?这个工具能让你一行代码直接打包. 专注于机器学习应用的人们知道,从训练好的模型到实际的工业生产工具还有一定的距离 ...
最新文章
- centos7安装配置pgAgent
- L2-002. 链表去重
- Python_note3 基本数据类型+time库使用
- python对笔记本电脑的要求-Python的用法笔记本
- C/C++语言之 日期 时间
- html 设置视频尺寸,如何使用CSS控制视频的宽高?
- 云服务器有什么好 能让云大佬们竞争如此激烈
- websocket的压力测试和异步并发啥关系?
- 设计模式学习笔记五——Prototype模式
- python中的 生产者和消费者
- 二级java编写用户界面例题,单选题11—20:2012年计算机二级VB用户界面设计练习题及答案-计算机二级-233网校...
- python用时间戳给文件命名-在Python中每小时将时间戳记写入文件
- linux关闭的时候出现异常: java.net.ConnectException: 拒绝连接 (Connection refused)
- 【语音评价】基于matlab语音质量客观评价(PESQ)【含Matlab源码 1717期】
- 汤姆·克鲁斯 - 电影全集
- 【仿真】Carla介绍与使用 [1] (附代码手把手讲解)
- iOS - Push 通知推送
- 几分钟来了解下什么是嵌入式开发?
- 阿里云视频点播一站式解决解决方案怎么样?
- 数据库查询简单练习(五)