瑞萨RA6M4开发板使用示例<RT-Thread的版本为v4.1.0及以上>
一、创建工程,选择SEGGER_RTT软件包
2、添加jlinkRtt初始化函数[ 路径:/rt-thread/src/kservice.c ]
在rt_console_set_device
前调用rt_hw_jlink_rtt_init
初始化函数
3、控制台对接上jlinkRtt
rtconfg.h
// 修改RT_CONSOLE_DEVICE_NAME为空
shell.c [ 路径:D:\rt-thread\components\finsh\shell.c]
/* 1、首先添加以下头文件 */
#include "SEGGER_RTT.h"
#include "SEGGER_RTT_Conf.h"
/* 2、修改finsh_getchar */
int finsh_getchar(void)
{
#ifdef RT_USING_DEVICE
char ch = 0;
#ifdef RT_USING_POSIX_STDIO
if(read(STDIN_FILENO, &ch, 1) > 0)
{
return ch;
}
else
{
return -1; /* EOF */
}
#else
rt_device_t device;
RT_ASSERT(shell != RT_NULL);
device = shell->device;
if (device == RT_NULL)
{
extern char rt_hw_console_getchar(void);
return rt_hw_console_getchar();
}
while (rt_device_read(device, -1, &ch, 1) != 1)
{
rt_sem_take(&shell->rx_sem, RT_WAITING_FOREVER);
if (shell->device != device)
{
device = shell->device;
if (device == RT_NULL)
{
return -1;
}
}
}
return ch;
#endif /* RT_USING_POSIX_STDIO */
#else
extern char rt_hw_console_getchar(void);
return rt_hw_console_getchar();
#endif /* RT_USING_DEVICE */
}
kservice.c [ 路径:\rt-thread\src\kservice.c ]
// 另外我们还需要完成对控制台字符读取的对接,修改rt_hw_console_output
RT_WEAK void rt_hw_console_output(const char *str)
{
/* empty console output */
rt_size_t i = 0, size = 0;
size = rt_strlen(str);
for (i = 0; i < size; i++)
{
if (*(str + i) == '\n')
{
break;
}
}
SEGGER_RTT_printf(0,"%s",str);
}
RTM_EXPORT(rt_hw_console_output);
4、实验效果
首先确保已经下载好J-Link RTT Viewer
,直接去官网下载最新版本即可
然后编译和下载工程,注意下载方式为J-Link
双击打开rtthread.map[ 路径: /Debug/rtthread.map ]文件,查看_SEGGER_RTT
变量地址(全局搜索即可,找到.bss._SEGGER_RTT)
打开J-Link RTT Viewer
此时就可以正常使用segger_rtt了