みなさん、こんにちは。このシリーズの最初の記事です〜記事〜
<< [シリーズブログインデックス]ファストトラック>>
前回の記事では、コンピューターのUSBドライバーをインストールして、その後のデバッグと書き込みを容易にする方法を学びました。この記事では、シリアルポートのデバッグについて説明します(もちろん、MDEのpydbgを使用したデバッグも可能です)。デバッグに加えて、シリアルポートはシリアル周辺機器との通信にも使用できます。
I.はじめに
CSR / QCC3000シリーズを使用して製品を開発する場合、IDEの属性を構成することでオンラインデバッグを実現できることを今でも覚えています。これは便利で実用的です。ただし、QCC512x / 302xシリーズでは、このメソッドは使用されていませんが、fw_live_logが使用されています。実際のテストでは、特にログが多い場合、新しいメソッドが安定していないことがわかりました。
2.柔軟な使用
QCC3020 / 512xシリーズがCSRシリーズからアップグレードされており、コードが比較的高いことを考えると、以前に実装されたUART通信を移植できますか?答えはイエスでなければなりません。
3.実践は真の知識につながる
制約のない想像力の想像力、練習する方が良いです-それをするだけです:
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.構成ツールを使用して2つのIOポートをシリアルポートとして設定します。たとえば、PIO60とPIO61を選択し、同時にPIOマッピングの割り当てを確認します。
4. Subsys7_config3.htfを変更し、IOポートの競合がある場合は、#を使用してIICの構成をコメントアウトします。
第四に、ポイントはここにあります
1.main.cファイルのコード行を変更します
コメントアウトして、次のように変更します。
//printVmLogsInTestSystem()接口中
//AhiPrintVmLogs(print_buffer);
UartSendData((uint8 *)print_buffer, strlen(print_buffer));
2.メイン関数でAppUartInit(&theSink.task)を呼び出します。
オイラー-コンパイルしてテストします。。。