基于stm32的RT-Thread操作系统+J-link V9虚拟串口调试操作

     最近做项目要用到多任务处理,所以开始着手了解RT-Thread这款国产开源操作系统。在官网上有基于原子系列开发板的移植教程,大多数人根据操作就能移植成功,为了方便后续大家学习,这里放上官网文档链接


   RT-Thread新手入门  :http://www.rt-thread.org/document/site/docs/tutorials/quickstart/

   RT-Thread编程手册  :http://www.rt-thread.org/document/site/zh/1chapters/02-chapter_thread/

  

    熟悉这款操作系统的应该都知道,调试时还有很多教程上,会经常使用rt_kprintf()函数来进行各个进程的跟踪调试,

但是需要单独将串口连接至电脑上,用串口助手进行跟踪查看。但是大多数人烧录烧录仿真程序运行还是会选择j-link仿真器的,优点很多:可断点调试、跟踪变量、逐步运行等。这样就需要在板子上连接两套操作线,一套用于调试代码,一套用于查看进程,比较繁琐。而J-link V9是自带一路虚拟串口的,所以这里可以添加和修改部分代码来实现二合一的功能。


编译器:MDK5.12

仿真器:J-link V9

目标板:stm32f407vet6


确认硬件连接无误和驱动安装完毕后,


首先新建一个.C文件,添加到工程里面,并加入以下代码:



#include 

#define ITM_Port8(n)    (*((volatile unsigned char *)(0xE0000000+4*n)))
#define ITM_Port16(n)   (*((volatile unsigned short*)(0xE0000000+4*n)))
#define ITM_Port32(n)   (*((volatile unsigned long *)(0xE0000000+4*n)))
#define DEMCR           (*((volatile unsigned long *)(0xE000EDFC)))       
#define TRCENA          0x01000000
 
struct __FILE { int handle; };
FILE __stdout;
FILE __stdin;
 
int fputc(int ch, FILE *f)
{
    if (DEMCR & TRCENA)
    {
        while (ITM_Port32(0) == 0);
        ITM_Port8(0) = ch;
    }
    return ch;
}
/*重映射rt_kprintf */
void rt_hw_console_output(const char *str)
{    
    rt_enter_critical();
    printf(str);
    rt_exit_critical();
}



然后,打开MDK 软件的options  for target - Debug选项框

基于stm32的RT-Thread操作系统+J-link V9虚拟串口调试操作_第1张图片


    进入Trace选项卡,然后按图中设置,其中core根据实际工作时钟频率填写,之后点击OK确认。



    接下来在需要添加输出的位置添加rt_kprintf()代码,


    然后编程程序无误后,进入调试窗口,点击view - serial windows - Debug(printf) Viwer,调出debug查看窗口,

基于stm32的RT-Thread操作系统+J-link V9虚拟串口调试操作_第2张图片


运行程序后,就会在右下角的Debug(printf) Viwer窗口中,输出打印的信息,

基于stm32的RT-Thread操作系统+J-link V9虚拟串口调试操作_第3张图片

这样就方便了系统的调试跟踪代码和进程两不误。

你可能感兴趣的:(嵌入式)