久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

嵌入式開發(fā)筆記——調(diào)試組件SEGGER_RTT

 python_lover 2022-05-18 發(fā)布于北京

一,、前言

在嵌入式開發(fā)過程中,,經(jīng)常會通過打印輸出一些調(diào)試信息來調(diào)試參數(shù)、查找問題等,,通常我的做法都是使用芯片的串口硬件設(shè)備配合串口助手軟件來進(jìn)行調(diào)試,。但是這次項(xiàng)目的PCB硬件設(shè)計(jì)并未預(yù)留串口調(diào)試接口,所以想使用串口調(diào)試就不方便了。經(jīng)過查找資料發(fā)現(xiàn)Segger 提供了一種非常方便的調(diào)試方式——自家的J-Link硬件配合J-Link RTT Viewer軟件進(jìn)行信息輸入輸出調(diào)試,。

二、組件添加

要使用該調(diào)試組件,,需要添加Segger提供的SEGGER_RTT組件代碼,,該代碼位于J-Link軟件安裝目錄下,而且在用戶手冊中提供了詳細(xì)的說明,。

組件源碼位置:

用戶手冊位置:

在手冊的16章節(jié)對RTT組件進(jìn)行了說明:

將組件源碼復(fù)制到工程目錄下,,工程中添加相關(guān)文件及包含路徑:

最后在需要使用打印調(diào)試信息的文件中包含#include "SEGGER_RTT.h"頭文件就可以使用該組件了。

三,、組件應(yīng)用

關(guān)于組件提供的各API函數(shù)在手冊中都有相應(yīng)的說明。舉例應(yīng)用如下:

輸出測試:

int a = 3;
SEGGER_RTT_TerminalOut(0,RTT_CTRL_BG_BLACK""RTT_CTRL_TEXT_BRIGHT_GREEN"SEGGER_RTT_TerminalOut 0\r\n");
SEGGER_RTT_TerminalOut(1,RTT_CTRL_BG_BLUE""RTT_CTRL_TEXT_BRIGHT_YELLOW"SEGGER_RTT_TerminalOut 1\r\n");
SEGGER_RTT_SetTerminal(2);
SEGGER_RTT_printf(0,RTT_CTRL_BG_WHITE""RTT_CTRL_TEXT_BRIGHT_BLACK"SEGGER_RTT_printf 2\r\n");
SEGGER_RTT_SetTerminal(3);
SEGGER_RTT_printf(0,"SEGGER_RTT_printf %d\r\n", a);

打開J-Link RTT Viewer軟件

RTT Viewer打印結(jié)果如下:

輸入測試:

int a;

while(1)
{
    if ((a = SEGGER_RTT_WaitKey()) > 0) 
    {
        SEGGER_RTT_SetTerminal(0);
        SEGGER_RTT_printf(0, "SEGGER_RTT_GetKey = %c\r\n", a);
    }
}

RTT Viewer打印結(jié)果如下:

四,、擴(kuò)展應(yīng)用

經(jīng)過上面對SEGGER_RTT的使用,發(fā)現(xiàn)其確實(shí)非常的方便,,大多數(shù)調(diào)試都能夠替代串口調(diào)試實(shí)現(xiàn)了,,但是SEGGER_RTT_printf()函數(shù)無法打印浮點(diǎn)數(shù)。手冊中對該函數(shù)列出了支持的轉(zhuǎn)換說明符如下:

Conversion specifier Meaning
c Print the argument as one char
d Print the argument as a signed integer
u Print the argument as an unsigned integer
x Print the argument as an hexadecimal integer
s Print the string pointed to by the argument
p Print the argument as an 8-digit hexadecimal integer. (Argument shall be a pointer to void.)

其中并沒有浮點(diǎn)數(shù)f選項(xiàng),。但是可以使用SEGGER_RTT輸出函數(shù)自己修改一個(gè)printf函數(shù),,這樣就可以使用完整的printf函數(shù)了。

添加自己修改的printf函數(shù)如下:

/*********************************************************************
*
*       rtt_printf()
*
*  Function description
*    print a formatted string using RTT and standard library formatting.
**********************************************************************/
int rtt_printf(const char *fmt,...) 
{
  int     n;
  char    aBuffer[256]; //根據(jù)應(yīng)用需求調(diào)整大小
  va_list args;

  va_start (args, fmt);
  n = vsnprintf(aBuffer, sizeof(aBuffer), fmt, args);
  if (n > (int)sizeof(aBuffer)) {
    SEGGER_RTT_Write(0, aBuffer, sizeof(aBuffer));
  } else if (n > 0) {
    SEGGER_RTT_Write(0, aBuffer, n);
  }
  va_end(args);
  return n;
}

接下來測試浮點(diǎn)數(shù)打?。?/p>

double fa = 0.1f;
double fb = 2.0f;

while(1)
{
    fa += 0.0001f;
    fb -= 0.0002f;
    rtt_printf("floating test:\tfa = %f, fb = %f\r\n", fa, fb);
    delay(0x0fffffff);
} 

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn),。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多