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

    技术2022-07-10  107

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

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

    上一篇我们知道了如何安装电脑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);

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

    Processed: 0.036, SQL: 9