使用J-Link RTT打印Keil下标准C某些宏定义

2025-10-10 21:33:31

1、【1】安装好J-Link驱动,例安装V6.50b版本。

【2】打开集成开发环境IDE Keil uVision5,建立好相应的项目工程。这里是建立东软载波HR8P506的工程为例子讲解。

【3】将J-Link RTT Client源码移植到已建立好的工程中。

将源文件下四个文件添加到工程中,并添加头文件。

SEGGER_RTT.c

SEGGER_RTT.h

SEGGER_RTT_Conf.c

SEGGER_RTT_Conf.h

使用J-Link RTT打印Keil下标准C某些宏定义

使用J-Link RTT打印Keil下标准C某些宏定义

使用J-Link RTT打印Keil下标准C某些宏定义

使用J-Link RTT打印Keil下标准C某些宏定义

使用J-Link RTT打印Keil下标准C某些宏定义

使用J-Link RTT打印Keil下标准C某些宏定义

使用J-Link RTT打印Keil下标准C某些宏定义

2、【1】标准C下某些宏定义说明。

__UVISION_VERSION :Keil uVision版本号,以整型形式展示。

__STDC_VERSION__   :若当前编译器符合C89, 则该宏被定义为199409L;若当前编译器符合C99, 则该宏被定义为199901L。

__STDC_HOSTED__   :若当前系统是"本地系统(hosted)", 则该宏被定义为1。本地系统表示当前系统拥有完整的标准C库。

__STDC__                 :若当前编译器符合ISO标准, 则该宏被定义为1。

__DATE__                 :源程序最新的编译日期,以"Mmm dd yyyy"格式字符串形式展示。

__TIME__                 :源程序最新的编译时间, 以"hh:mm:ss"格式字符串形式展示。

__FILE__                  :当前源文件的文件名,字符串形式展示。

__LINE__                 :当前本行语句所在的行号,以整型形式展示。

【2】输出常用类型在该编译器下所对应的字节数。

long long int :长长整型

short int        :短整型

long int         :长整型

double          :双精度浮点数

float              :单精度浮点数

char              :字符型

int                : 整型

3、【1】初始化SEGGER_RTT_Init()函数,该函数在SEGGER_RTT.c文件下,初始化后次可以使用。

void SEGGER_RTT_Init (void) 

{

  _Init();

}

【2】想使用SEGGER RTT打印输出时可使用SEGGER_RTT_printf()函数,还函数在SEGGER_RTT_Conf.c文件下。

int SEGGER_RTT_printf(unsigned BufferIndex, const char * sFormat, ...) 

{

  va_list ParamList;

  va_start(ParamList, sFormat);

  return SEGGER_RTT_vprintf(BufferIndex, sFormat, &ParamList);

}

参数说明 :

BufferIndex :选择输出通道,默认选择0。

sFormat     :将要格式化输出数据。

使用J-Link RTT打印Keil下标准C某些宏定义

使用J-Link RTT打印Keil下标准C某些宏定义

4、【1】编写Keil标准C下某些宏定义函数和常用类型在该编译器下所对应的字节数函数。

static void vKeil_Macro_Information(void)

{

SEGGER_RTT_printf(0, "******************* Keil Macro Information ******************************\r\n");

SEGGER_RTT_printf(0, "uVersion     : V%d\r\n", __UVISION_VERSION);

SEGGER_RTT_printf(0, "Date1        : %s\r\n", __DATE__);

SEGGER_RTT_printf(0, "Time         : %s\r\n", __TIME__);

SEGGER_RTT_printf(0, "File         : %s\r\n", __FILE__);

SEGGER_RTT_printf(0, "Line         : %d\r\n", __LINE__);

SEGGER_RTT_printf(0, "Build Time   : %s  %s\r\n", __DATE__, __TIME__);

SEGGER_RTT_printf(0, "ISO Standard : %d\r\n", __STDC__);

SEGGER_RTT_printf(0, "C99 Compiler : %d\r\n", __STDC_VERSION__);

SEGGER_RTT_printf(0, "Hosted Sys   : %d\r\n", __STDC_HOSTED__);

SEGGER_RTT_printf(0, "******************* Data Type Byte **********************************\r\n");

SEGGER_RTT_printf(0, "long long int : %02d\r\n", sizeof(long long int));

SEGGER_RTT_printf(0, "short int     : %02d\r\n", sizeof(short int));

SEGGER_RTT_printf(0, "long int      : %02d\r\n", sizeof(long int));

SEGGER_RTT_printf(0, "double        : %02d\r\n", sizeof(double));

SEGGER_RTT_printf(0, "float         : %02d\r\n", sizeof(float));

SEGGER_RTT_printf(0, "char          : %02d\r\n", sizeof(char));

SEGGER_RTT_printf(0, "int           : %02d\r\n", sizeof(int));

【2】编写主函数

int main(void)

{

System_initialization(); 

SEGGER_RTT_Init();

vKeil_Macro_Information();

while(1);

}

使用J-Link RTT打印Keil下标准C某些宏定义

使用J-Link RTT打印Keil下标准C某些宏定义

5、【1】编译源程序,修改序错误,知道没有错误和警告为止。

【2】将程序下载到目标开发板中验证。

【3】打开J-Link RTT Viewer V6.50b软件,选择好目标设备类型已经接口和传输速率。

我用的单片机是HR8P506,因为上面没有这个型号,我就选择相应的M0内核的单片机即可。

使用J-Link RTT打印Keil下标准C某些宏定义

使用J-Link RTT打印Keil下标准C某些宏定义

使用J-Link RTT打印Keil下标准C某些宏定义

使用J-Link RTT打印Keil下标准C某些宏定义

使用J-Link RTT打印Keil下标准C某些宏定义

使用J-Link RTT打印Keil下标准C某些宏定义

使用J-Link RTT打印Keil下标准C某些宏定义

6、【1】查看输出信息,说明我们已成功。

使用J-Link RTT打印Keil下标准C某些宏定义

使用J-Link RTT打印Keil下标准C某些宏定义

使用J-Link RTT打印Keil下标准C某些宏定义

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢