多语言展示
当前在线:475今日阅读:2今日分享:31

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

在单片机开发过程中,除了使用Debug在线调试以外,大部分攻城狮都是通过打印输出信息进行调试,一般都是使用单片机自带的硬件串口或者模拟串口输出信息调试,若你核心单片机恰好使用J-Link烧录器,那么可以使用J-Link默认自带的RTT来代替串口来输出交互信息。 J-Link RTT(Real Time Terminal)是SEGGER公司推出在嵌入式应用中与用户进行交互的实时终端。 J-Link RTT可实现用RTT代替串口printf输出调试程序信息。
工具/原料
1

J-Link RTT Client源码

2

J-Link仿真器/下载器

3

支持J-Link目标开发板

4

J-Link驱动V4.90以上

方法/步骤
1

【1】安装好J-Link驱动,例安装V6.50b版本。 【2】打开集成开发环境IDE Keil uVision5,建立好相应的项目工程。这里是建立东软载波HR8P506的工程为例子讲解。 【3】将J-Link RTT Client源码移植到已建立好的工程中。 将源文件下四个文件添加到工程中,并添加头文件。SEGGER_RTT.cSEGGER_RTT.hSEGGER_RTT_Conf.cSEGGER_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】查看输出信息,说明我们已成功。

注意事项
1

本人原创经验,仅供参考,若有不足之处请留言指正,若觉得写得好或凑合的话,请点击本页面左下角投票,谢谢了\(^o^)/

2

若有任何意见与帮助,请关注后私信留言,非喜勿喷

3

需要相关帮助请投票后关注私信

推荐信息