使用J-Link RTT打印Keil下标准C某些宏定义
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
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 :将要格式化输出数据。
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);
}
5、【1】编译源程序,修改序错误,知道没有错误和警告为止。
【2】将程序下载到目标开发板中验证。
【3】打开J-Link RTT Viewer V6.50b软件,选择好目标设备类型已经接口和传输速率。
我用的单片机是HR8P506,因为上面没有这个型号,我就选择相应的M0内核的单片机即可。
6、【1】查看输出信息,说明我们已成功。