FreeRTOS:Jlink RTT移植

2023-05-08  本文已影响0人  xEndLess

1. 源码

在Jlink的安装目录C:\Program Files (x86)\SEGGER\JLink\Samples\RTT下找到压缩包SEGGER_RTT_V770,解压。

  * `RTT/`
    * `SEGGER_RTT.c`               - Main module for RTT.
    * `SEGGER_RTT.h`               - Main header for RTT.
    * `SEGGER_RTT_ASM_ARMv7M.S`    - Assembly-optimized implementation of RTT functions for ARMv7M processors.
    * `SEGGER_RTT_Printf.c`        - Simple implementation of printf (`SEGGER_RTT_Printf()`) to write formatted strings via RTT.
  * `Syscalls/`
    * `SEGGER_RTT_Syscalls_*.c`    - Low-level syscalls to retarget `printf()` to RTT with different toolchains.
  * `Config/`
    * `SEGGER_RTT_Conf.h`          - RTT configuration file.
  * `Examples/`
    * `Main_RTT_InputEchoApp.c`    - Example application which echoes input on Channel 0.
    * `Main_RTT_MenuApp.c`         - Example application to demonstrate RTT bi-directional functionality.
    * `Main_RTT_PrintfTest.c`      - Example application to test RTT's simple printf implementation.
    * `Main_RTT_SpeedTestApp.c`    - Example application to measure RTT performance. (Requires embOS)

2.源码放入工程

将整个源码包复制到工程目录下Middlewares下。

3. 加入makefile

C_SOURCES =  \
...
Middlewares/SEGGER_RTT_V770/RTT/SEGGER_RTT.c \
Middlewares/SEGGER_RTT_V770/RTT/SEGGER_RTT_printf.c \
Middlewares/SEGGER_RTT_V770/Syscalls/SEGGER_RTT_Syscalls_GCC.c \

C_INCLUDES =  \
...
-IMiddlewares/SEGGER_RTT_V770/RTT \
-IMiddlewares/SEGGER_RTT_V770/Config

4. 初始化

main.h中调用

int main(void)
{
    ...
    SEGGER_RTT_Init();
    ...
}

5. 实战

文件Middlewares\SEGGER_RTT_V770\Syscalls\SEGGER_RTT_Syscalls_GCC.c中有对printf重定向。实际项目中调用printf即可打印信息。但是测试中发现printf打印完3条输出信息后,就不在输出了。在_write_r中断点也不能进入。很是奇怪。问题先记录,以后再解决。
调用如下函数没有出现上述问题。

int SEGGER_RTT_printf(unsigned BufferIndex, const char *sFormat, ...)
上一篇下一篇

猜你喜欢

热点阅读