RT-Thread新开发工具支持:e2studio手把手适配教程 | 技术集结

RT-Thread Studio与CubeMX联合编程(超级详细) RT-Thread Studio与CubeMX联合编程 本文章参考以下文章: https://blog.csdn.net/qq_40824852/article/details/122596043 https://zhuanlan.zhihu.com/p/395106066 https://blog.csdn.net/m0_37697335/article/details/108890584 一、简介 经过上次对RT-Thread Studio的初步尝试,发现RT-Thread Studio中存在官方支 阅读详情

Titan-RA8P1的芯片是Renensas的RA8P1系列芯片,瑞萨官方使用的IDE是e2studio。本文介绍如何在e2studio中创建工程并结合RT-Thread的源码,在e2studio实现RT-Thread工程的管理和调试。

目录

硬件外设

创建e2studio工程和配置基本外设

添加BSP模板并修改

1 硬件外设

使用RT-Thread实现控制Titan-RA8P1上的三色LED,并输出log都串口中断显示,查看开发板的原理图,串口和LED的控制引脚如图所示。

板载外部晶振用于提供系统时钟源。

2 创建e2studio工程和配置基本外设

根据Titan-RA8P1开发板的芯片的型号,创建基于芯片型号的工程,编译器选择GCC。

选择工程使用的RTOS类型为 No RTOS。

FSP Configurator中的Stacks菜单中添加串口模块

设置串口uart8模块的参数,指定其名称为g_uart8,中断回调函数名为usr_uart8_callback

保存配置只并生成代码。

3 添加BSP模板并修改

3.1 复制文件

复制bsp\renesas\libraries\bsp-template文件夹中的内容,到e2studio工程文件夹中。RTThread中使用KConfig工具对代码进行配置,生成rt_config.h头文件用于配置不同的软件组件。

复制bsp\renesas\中的libraries\HAL_Drivers中的文件夹到工程中。

3.2 修改Kconfig文件

由于存放Kconfig文件夹结构发生变化,需要修改复制到e2studio工程中的顶层目录中的Kconfig文件中的RTT_DIR变量,指定存放RT-Thread代码的位置。参考官方提供的Titan-RA8P1的工程配置,在其中添加芯片相关的项目,修改后的内容如下。

mainmenu "RT-Thread Configuration"BSP_DIR := .RTT_DIR := ../../rt-thread# you can change the RTT_ROOT default "../.." to your rtthread_root,# example : default "F:/git_repositories/rt-thread"PKGS_DIR := packagesENV_DIR := /source "$(RTT_DIR)/Kconfig"osource "$PKGS_DIR/Kconfig"rsource "libraries/Kconfig"source "$(BSP_DIR)/board/Kconfig"

修改board\Kconifg中的内容,在On-chip Peripheral Drivers菜单中添加片上的串口驱动,用于支持RT-Thread串口终端功能。同时根据libraries\Kconfig文件的存放位置修改文件中的rsource语句参数。主要的添加内容如下。

menu "Hardware Drivers Config"    config SOC_R7KA8P1KF        bool        select SOC_SERIES_R7KA8P1        select SOC_SERIES_R7KA8P1_CORE0        select RT_USING_COMPONENTS_INIT        select RT_USING_USER_MAIN        default y    menu "Onboard Peripheral Drivers"    endmenu    menu "On-chip Peripheral Drivers"        rsource "../libraries/HAL_Drivers/drivers/Kconfig"        menuconfig BSP_USING_UART            bool"Enable UART"            default y            select RT_USING_SERIAL            select RT_USING_SERIAL_V2            if BSP_USING_UART                menuconfig BSP_USING_UART8                    bool"Enable UART8"                    default n                    if BSP_USING_UART8                        config BSP_UART8_RX_BUFSIZE                            int"Set UART8 RX buffer size"                            range 6465535                            depends on RT_USING_SERIAL_V2                            default256                        config BSP_UART8_TX_BUFSIZE                            int"Set UART8 TX buffer size"                            range 065535                            depends on RT_USING_SERIAL_V2                            default0                    endif            endif    endmenu    menu "Board extended module Drivers"    endmenuendmenu

完成添加后,在e2studio工程中使用RT-Thread提供的env工具,在其中运行menuconfig指令,验证Kconfig文件修改是否成功,报错的话根据提示修改即可。进入menuconfig界面,修改RT-Thread Kernel中的shell使用的uart名称。

uart组件驱动使用Serial_V2

使能添加的uart8驱动

保存并退出。

3.3 修改源码

修改board\board.h中的内存大小以及起始位置如下。

#define RA_SRAM_SIZE    256/* The SRAM size of the chip needs to be modified */#define RA_SRAM_END     (0x22000000 + RA_SRAM_SIZE * 1024)

修改board\port\gpio_cfg.h文件中的内容如下,添加外部中端的引脚信息。

/* * Copyright (c) 2006-2025, RT-Thread Development Team * * SPDX-License-Identifier: Apache-2.0 * * Change Logs: * Date           Author            Notes * 2025-04-07     kurisaW           first version *//* Number of IRQ channels on the device */#define RA_IRQ_MAX  32/* PIN to IRQx table */#define PIN2IRQX_TABLE(pin)                 \{                                           \    switch (pin)                            \    {                                       \    case BSP_IO_PORT_01_PIN_05:             \    case BSP_IO_PORT_04_PIN_00:             \    case BSP_IO_PORT_08_PIN_06:             \    case BSP_IO_PORT_09_PIN_02:             \    case BSP_IO_PORT_11_PIN_06:             \    case BSP_IO_PORT_12_PIN_14:             \        return 0;                           \    case BSP_IO_PORT_01_PIN_01:             \    case BSP_IO_PORT_01_PIN_04:             \    case BSP_IO_PORT_05_PIN_08:             \    case BSP_IO_PORT_09_PIN_03:             \    case BSP_IO_PORT_11_PIN_07:             \    case BSP_IO_PORT_12_PIN_13:             \        return 1;                           \    case BSP_IO_PORT_01_PIN_00:             \    case BSP_IO_PORT_02_PIN_13:             \    case BSP_IO_PORT_05_PIN_09:             \    case BSP_IO_PORT_07_PIN_12:             \    case BSP_IO_PORT_09_PIN_04:             \    case BSP_IO_PORT_12_PIN_12:             \        return 2;                           \    case BSP_IO_PORT_02_PIN_08:             \    case BSP_IO_PORT_02_PIN_12:             \    case BSP_IO_PORT_05_PIN_10:             \    case BSP_IO_PORT_07_PIN_11:             \    case BSP_IO_PORT_09_PIN_13:             \    case BSP_IO_PORT_12_PIN_11:             \        return 3;                           \    case BSP_IO_PORT_02_PIN_01:             \    case BSP_IO_PORT_03_PIN_00:             \    case BSP_IO_PORT_04_PIN_11:             \    case BSP_IO_PORT_10_PIN_10:             \    case BSP_IO_PORT_12_PIN_10:             \        return 4;                           \    case BSP_IO_PORT_03_PIN_02:             \    case BSP_IO_PORT_04_PIN_10:             \    case BSP_IO_PORT_09_PIN_12:             \    case BSP_IO_PORT_10_PIN_09:             \    case BSP_IO_PORT_12_PIN_09:             \        return 5;                           \    case BSP_IO_PORT_03_PIN_01:             \    case BSP_IO_PORT_04_PIN_09:             \    case BSP_IO_PORT_05_PIN_03:             \    case BSP_IO_PORT_09_PIN_11:             \    case BSP_IO_PORT_10_PIN_08:             \        return 6;                           \    case BSP_IO_PORT_04_PIN_08:             \    case BSP_IO_PORT_05_PIN_04:             \    case BSP_IO_PORT_06_PIN_15:             \    case BSP_IO_PORT_07_PIN_06:             \    case BSP_IO_PORT_09_PIN_10:             \        return 7;                           \    case BSP_IO_PORT_03_PIN_05:             \    case BSP_IO_PORT_04_PIN_15:             \    case BSP_IO_PORT_05_PIN_05:             \    case BSP_IO_PORT_07_PIN_07:             \    case BSP_IO_PORT_09_PIN_05:             \    case BSP_IO_PORT_09_PIN_15:             \        return 8;                           \    case BSP_IO_PORT_03_PIN_04:             \    case BSP_IO_PORT_04_PIN_14:             \    case BSP_IO_PORT_05_PIN_06:             \    case BSP_IO_PORT_09_PIN_06:             \    case BSP_IO_PORT_09_PIN_14:             \    case BSP_IO_PORT_11_PIN_04:             \        return 9;                           \    case BSP_IO_PORT_05_PIN_07:             \    case BSP_IO_PORT_07_PIN_09:             \    case BSP_IO_PORT_09_PIN_07:             \    case BSP_IO_PORT_10_PIN_11:             \    case BSP_IO_PORT_11_PIN_00:             \        return 10;                          \    case BSP_IO_PORT_07_PIN_08:             \    case BSP_IO_PORT_08_PIN_00:             \    case BSP_IO_PORT_08_PIN_07:             \    case BSP_IO_PORT_09_PIN_08:             \    case BSP_IO_PORT_10_PIN_12:             \    case BSP_IO_PORT_11_PIN_02:             \        return 11;                          \    case BSP_IO_PORT_05_PIN_15:             \    case BSP_IO_PORT_07_PIN_15:             \    case BSP_IO_PORT_08_PIN_01:             \    case BSP_IO_PORT_10_PIN_13:             \    case BSP_IO_PORT_11_PIN_01:             \        return 12;                          \    case BSP_IO_PORT_00_PIN_15:             \    case BSP_IO_PORT_05_PIN_14:             \    case BSP_IO_PORT_07_PIN_14:             \    case BSP_IO_PORT_10_PIN_14:             \    case BSP_IO_PORT_11_PIN_03:             \        return 13;                          \    case BSP_IO_PORT_00_PIN_10:             \    case BSP_IO_PORT_00_PIN_13:             \    case BSP_IO_PORT_05_PIN_12:             \    case BSP_IO_PORT_07_PIN_13:             \    case BSP_IO_PORT_08_PIN_04:             \    case BSP_IO_PORT_10_PIN_15:             \        return 14;                          \    case BSP_IO_PORT_00_PIN_12:             \    case BSP_IO_PORT_05_PIN_11:             \    case BSP_IO_PORT_08_PIN_08:             \    case BSP_IO_PORT_08_PIN_13:             \    case BSP_IO_PORT_08_PIN_15:             \    case BSP_IO_PORT_11_PIN_05:             \        return 15;                          \    case BSP_IO_PORT_00_PIN_11:             \    case BSP_IO_PORT_01_PIN_03:             \    case BSP_IO_PORT_01_PIN_06:             \    case BSP_IO_PORT_06_PIN_10:             \    case BSP_IO_PORT_08_PIN_14:             \    case BSP_IO_PORT_10_PIN_07:             \        return 16;                          \    case BSP_IO_PORT_01_PIN_02:             \    case BSP_IO_PORT_06_PIN_11:             \    case BSP_IO_PORT_07_PIN_10:             \    case BSP_IO_PORT_10_PIN_06:             \    case BSP_IO_PORT_13_PIN_07:             \        return 17;                          \    case BSP_IO_PORT_04_PIN_13:             \    case BSP_IO_PORT_06_PIN_12:             \    case BSP_IO_PORT_08_PIN_02:             \    case BSP_IO_PORT_10_PIN_05:             \    case BSP_IO_PORT_13_PIN_06:             \        return 18;                          \    case BSP_IO_PORT_01_PIN_11:             \    case BSP_IO_PORT_06_PIN_13:             \    case BSP_IO_PORT_07_PIN_05:             \    case BSP_IO_PORT_08_PIN_03:             \    case BSP_IO_PORT_10_PIN_04:             \    case BSP_IO_PORT_13_PIN_05:             \        return 19;                          \    case BSP_IO_PORT_01_PIN_10:             \    case BSP_IO_PORT_02_PIN_15:             \    case BSP_IO_PORT_06_PIN_14:             \    case BSP_IO_PORT_08_PIN_09:             \    case BSP_IO_PORT_10_PIN_03:             \    case BSP_IO_PORT_13_PIN_04:             \        return 20;                          \    case BSP_IO_PORT_02_PIN_14:             \    case BSP_IO_PORT_08_PIN_10:             \    case BSP_IO_PORT_10_PIN_01:             \    case BSP_IO_PORT_12_PIN_07:             \    case BSP_IO_PORT_13_PIN_02:             \    case BSP_IO_PORT_13_PIN_03:             \        return 21;                          \    case BSP_IO_PORT_04_PIN_07:             \    case BSP_IO_PORT_06_PIN_08:             \    case BSP_IO_PORT_08_PIN_11:             \    case BSP_IO_PORT_10_PIN_00:             \    case BSP_IO_PORT_12_PIN_06:             \    case BSP_IO_PORT_13_PIN_01:             \        return 22;                          \    case BSP_IO_PORT_01_PIN_09:             \    case BSP_IO_PORT_02_PIN_11:             \    case BSP_IO_PORT_06_PIN_07:             \    case BSP_IO_PORT_08_PIN_12:             \    case BSP_IO_PORT_12_PIN_05:             \    case BSP_IO_PORT_13_PIN_00:             \        return 23;                          \    case BSP_IO_PORT_01_PIN_08:             \    case BSP_IO_PORT_02_PIN_10:             \    case BSP_IO_PORT_05_PIN_00:             \    case BSP_IO_PORT_06_PIN_06:             \    case BSP_IO_PORT_12_PIN_04:             \        return 24;                          \    case BSP_IO_PORT_02_PIN_07:             \    case BSP_IO_PORT_02_PIN_09:             \    case BSP_IO_PORT_05_PIN_01:             \    case BSP_IO_PORT_06_PIN_05:             \    case BSP_IO_PORT_12_PIN_03:             \        return 25;                          \    case BSP_IO_PORT_05_PIN_02:             \    case BSP_IO_PORT_06_PIN_04:             \    case BSP_IO_PORT_07_PIN_04:             \    case BSP_IO_PORT_12_PIN_02:             \        return 26;                          \    case BSP_IO_PORT_00_PIN_14:             \    case BSP_IO_PORT_01_PIN_12:             \    case BSP_IO_PORT_06_PIN_03:             \    case BSP_IO_PORT_12_PIN_01:             \        return 27;                          \    case BSP_IO_PORT_00_PIN_07:             \    case BSP_IO_PORT_01_PIN_13:             \    case BSP_IO_PORT_06_PIN_02:             \    case BSP_IO_PORT_12_PIN_00:             \        return 28;                          \    case BSP_IO_PORT_00_PIN_03:             \    case BSP_IO_PORT_06_PIN_01:             \    case BSP_IO_PORT_06_PIN_09:             \    case BSP_IO_PORT_12_PIN_08:             \        return 29;                          \    case BSP_IO_PORT_04_PIN_05:             \    case BSP_IO_PORT_06_PIN_00:             \    case BSP_IO_PORT_08_PIN_05:             \    case BSP_IO_PORT_12_PIN_15:             \        return 30;                          \    case BSP_IO_PORT_01_PIN_07:             \    case BSP_IO_PORT_04_PIN_06:             \    case BSP_IO_PORT_05_PIN_13:             \    case BSP_IO_PORT_10_PIN_02:             \        return 31;                          \    default  :                              \        return -1;                          \    }                                       \}

修改ra\fsp\src\bsp\cmsis\Device\RENESAS\Source\startup.c中的Reset_Handler函数如下

voidReset_Handler(void){    /* Initialize system using BSP. */    SystemInit();    /* Call user application. */#if defined(__GNUC__)    externintentry(void);    entry();#elif defined(__ICCARM__)    externvoid __low_level_init(void);    __low_level_init();#else    /* Jump to main. */    main();#endif    while (1)    {        /* Infinite Loop. */    }}

3.4 链接RT-Thread源码

RT-Thread源代码使用Scons工具用于管理代码编译,不过使用e2studio进行管理后,需要开发者自行将RT-Thread工程需要使用到的代码添加e2studio的工程代码管理中。使用新增文件夹的链接功能,添加RT-Thread源码仓库中的相关文件夹。使用到的文件夹如下:

  • components

  • include

  • libcpu

  • src

其中src文件夹与e2studio工程中的src文件夹重名,在链接该文件夹时,设置不同的名称即可,具体页面操作如下。

在工程属性的 Path and Symbols 中 include 菜单中添加RT-Thread源码的路径。Assembly选项卡中添加如下。

GNU C选项卡中添加以下路径。

RT-Thread源码适配很多场景,其中有很多代码是不使用的,通过Paths and Symbols的Source location中添加源码的管理。在其中添加上述提到的源码文件夹路径。

其中libcpu中的排除文件如图。

components目录中的finsh和libc中文件排除情况如下

components/drivers中的文件包含情况如下

3.4.1 参考RT-Thread示例工程确定源文件

RT-Thread中有大量的文件,如何确定需要排除哪些文件,可以通过参考官方提供的RT-Thread Studio中的示例工程,参考其中的配置信息

3.4.2 利用scons生成CMake文件确定需要使用的源文件

也可以通过修改Scons编译需要用到的文件,利用scons --target=cmake指令,生成CMakeLists.txt文件,获取构建的文本信息。从官方的示例程序中复制其中的SConstruct、SConscript中的内容,根据RT-Thread源码的存放位置,修改SConstruct中的RTT_ROOT路径信息。

if os.path.exists('rt-thread'):    RTT_ROOT = os.path.normpath(os.getcwd() + '/rt-thread')else:    RTT_ROOT = os.path.normpath(os.getcwd() + '../../../rt-thread')print(os.path.normpath(os.getcwd() + '../../../rt_thread'))

运行scons --target=cmake指令后,通过查看输出的CMakeLists.txt,其中给出不同模块中需要添加工程中文件信息,据此,可以修改e2studio中的源码exclude项目。

SET(RT_CPU_SOURCES    ../../rt-thread/libcpu/arm/common/atomic_arm.c    ../../rt-thread/libcpu/arm/common/div0.c    ../../rt-thread/libcpu/arm/common/showmem.c    ../../rt-thread/libcpu/arm/cortex-m85/context_gcc.S    ../../rt-thread/libcpu/arm/cortex-m85/cpuport.c)SET(RT_DEVICEDRIVERS_SOURCES    ../../rt-thread/components/drivers/core/device.c    ../../rt-thread/components/drivers/ipc/completion_comm.c    ../../rt-thread/components/drivers/ipc/completion_up.c    ../../rt-thread/components/drivers/ipc/condvar.c    ../../rt-thread/components/drivers/ipc/dataqueue.c    ../../rt-thread/components/drivers/ipc/pipe.c    ../../rt-thread/components/drivers/ipc/ringblk_buf.c    ../../rt-thread/components/drivers/ipc/ringbuffer.c    ../../rt-thread/components/drivers/ipc/waitqueue.c    ../../rt-thread/components/drivers/ipc/workqueue.c    ../../rt-thread/components/drivers/pin/dev_pin.c    ../../rt-thread/components/drivers/serial/dev_serial_v2.c)SET(RT_DRIVERS_SOURCES    libraries/HAL_Drivers/drivers/drv_gpio.c    libraries/HAL_Drivers/drivers/drv_usart_v2.c    libraries/HAL_Drivers/drv_common.c)SET(RT_FINSH_SOURCES    ../../rt-thread/components/finsh/shell.c    ../../rt-thread/components/finsh/msh.c    ../../rt-thread/components/finsh/msh_parse.c    ../../rt-thread/components/finsh/cmd.c)SET(RT_KERNEL_SOURCES    ../../rt-thread/src/clock.c    ../../rt-thread/src/components.c    ../../rt-thread/src/cpu_up.c    ../../rt-thread/src/defunct.c    ../../rt-thread/src/idle.c    ../../rt-thread/src/ipc.c    ../../rt-thread/src/irq.c    ../../rt-thread/src/kservice.c    ../../rt-thread/src/mem.c    ../../rt-thread/src/mempool.c    ../../rt-thread/src/object.c    ../../rt-thread/src/scheduler_comm.c    ../../rt-thread/src/scheduler_up.c    ../../rt-thread/src/thread.c    ../../rt-thread/src/timer.c)SET(RT_LIBC_SOURCES    ../../rt-thread/components/libc/compilers/common/cctype.c    ../../rt-thread/components/libc/compilers/common/cstdlib.c    ../../rt-thread/components/libc/compilers/common/cstring.c    ../../rt-thread/components/libc/compilers/common/ctime.c    ../../rt-thread/components/libc/compilers/common/cunistd.c    ../../rt-thread/components/libc/compilers/common/cwchar.c    ../../rt-thread/components/libc/compilers/newlib/syscalls.c    ../../rt-thread/src/klibc/kerrno.c    ../../rt-thread/src/klibc/kstdio.c    ../../rt-thread/src/klibc/kstring.c    ../../rt-thread/src/klibc/rt_vsnprintf_tiny.c    ../../rt-thread/src/klibc/rt_vsscanf.c)

e2studio工程的src文件夹中的hal_warmstart.c中的代码和RTThread提供的适配代码冲突,在源码控制中将其排除出构建即可。

3.5 修改编译器选项和链接脚本以及添加示例源码

在工程的属性的Settings菜单中修改编译器的选项如下,解决编译时汇编指令支持的问题。

修改编译器的优化参数,解决RT-Thread串口输出乱码的问题。

e2studio工程中script文件夹中的fsp.ld链接文件中引用两个生成的链接脚本,为Debug文件夹中的fsp_gen.ld和memory_gen.ld文件,复制其中的内容到fsp.ld文件中。

文件中定位到MCU Vector Table位置,添加以下内容

/* MCU vector table */    __flash_vectorsBase = .; _VECTORS = .;        KEEP(*(.fixed_vectors))        KEEP(*(.application_vectors))        __flash_vectors$$Limit = .;        /* section information for finsh shell */        . = ALIGN(4);        __fsymtab_start = .;        KEEP(*(FSymTab))        __fsymtab_end = .;        . = ALIGN(4);        __vsymtab_start = .;        KEEP(*(VSymTab))        __vsymtab_end = .;        /* section information for initial. */        . = ALIGN(4);        __rt_init_start = .;        KEEP(*(SORT(.rti_fn*)))        __rt_init_end = .;        . = ALIGN(4);        KEEP(*(FalPartTable))    }> FLASH

另外定位到SDRAM区域具体可以参考工程中代码查看,添加以下内容

.ram.flat_nsc :    {        __sau_ddsc_RAM_NSC = .;    }> RAM    /* This symbol represents the end of user allocated RAM. The RAM after this symbol can be used       at run time for things such as ThreadX memory pool allocations. */    __RAM_segment_used_end__ = ALIGN(__sau_ddsc_RAM_NSC , 4);

在hal_entry中添加以下代码,实现控制EK-RA8P1上LED灯并输出log的功能。

#include<rtthread.h>#include"hal_data.h"#include<rtdevice.h>#include<board.h>#define DBG_TAG     "led"#define DBG_LVL     DBG_LOG#include<rtdbg.h>/* 配置 LED 灯引脚 */#define LED_PIN_R   BSP_IO_PORT_00_PIN_12#define LED_PIN_B   BSP_IO_PORT_00_PIN_13#define LED_PIN_G   BSP_IO_PORT_06_PIN_13/* 定义 LED 亮灭电平 */#define LED_ON  (0)#define LED_OFF (1)/* 定义 8 组 LED 闪灯表,其顺序为 R B G */staticconstrt_uint8_t _blink_tab[][3] ={    {LED_OFF, LED_OFF, LED_OFF},    {LED_ON,  LED_OFF, LED_OFF},    {LED_OFF, LED_ON,  LED_OFF},    {LED_OFF, LED_OFF, LED_ON},    {LED_ON,  LED_OFF, LED_ON},    {LED_ON,  LED_ON,  LED_OFF},    {LED_OFF, LED_ON,  LED_ON},    {LED_ON,  LED_ON,  LED_ON},};voidhal_entry(void){    rt_kprintf("\nHello RT-Thread!\n");    rt_kprintf("==================================================\n");    rt_kprintf("This example project is an RGB flicker routine!\n");    rt_kprintf("==================================================\n");    unsignedint count = 0;    unsignedint group_num = sizeof(_blink_tab)/sizeof(_blink_tab[0]);    unsignedint group_current;    /* 设置 RGB 灯引脚为输出模式 */    rt_pin_mode(LED_PIN_R, PIN_MODE_OUTPUT);    rt_pin_mode(LED_PIN_G, PIN_MODE_OUTPUT);    rt_pin_mode(LED_PIN_B, PIN_MODE_OUTPUT);    rt_pin_write(LED_PIN_R, LED_OFF);    rt_pin_write(LED_PIN_G, LED_OFF);    rt_pin_write(LED_PIN_B, LED_OFF);    do    {        /* 获得组编号 */        group_current = count % group_num;        /* 控制 RGB 灯 */        rt_pin_write(LED_PIN_R, _blink_tab[group_current][0]);        rt_pin_write(LED_PIN_B, _blink_tab[group_current][1]);        rt_pin_write(LED_PIN_G, _blink_tab[group_current][2]);        /* 输出 LOG 信息 */        LOG_D("group: %d | red led [%-3.3s] | | blue led [%-3.3s] | | green led [%-3.3s]",            group_current,            _blink_tab[group_current][0] == LED_ON ? "ON" : "OFF",            _blink_tab[group_current][1] == LED_ON ? "ON" : "OFF",            _blink_tab[group_current][2] == LED_ON ? "ON" : "OFF");        count++;        /* 延时一段时间 */        rt_thread_mdelay(500);    }while(count > 0);}

【Titan-RA8P1】e2studio中使用pyocd调试(https://club.rt-thread.org/ask/article/ee532d8d659ae45b.html)

保存并编译工程,烧录到开发板运行,使用串口工具可以看到如下的log输出。

示例工程如下,需要配合RT-Thread仓库源码使用。

Titan_RA8P1_rtthread.zip

4 获取硬件

或复制链接购买:https://item.taobao.com/item.htm?ft=t&id=987791181903

添加小师弟微信↓,拉你进RT-Thread技术交流群,找到组织!

图片

图片

图片

想要在RT-Thread平台或社区投放内容?

或想参与相关直播活动及赛事?

RT-Thread已开放对接窗口,

请通过邮件与我们取得联系,期待合作!

合作邮箱: tongfangyi@rt-thread.com 

点击“阅读原文”

瑞萨Rx系列芯片开发,e2 studio安装、工程创建、smart configurator使用 瑞萨Rx系列芯片开发,e2 studio安装、工程创建、smart configurator。 阅读详情

相关推荐

40.e2studio的初次使用(烧范例)

一,初次使用的一些配置 首次使用,先点help-瑞萨工具链,看看工具都在不在。 列出来了就表示添加了。(前面的空白方格真是误导人) 安装基础软件包特殊应用软件包也加了其中三个,除了一个叫Guiliani的不知哪国语言的SDK。 偶然发现按浏览器的后退键同时快速下拉,可以看到这个标签页的前面所有网页。 软件包层级如下: 这是解压后的软件包 二,导入一个项目瞅瞅 按...

weixin_44737922的博客 8815

e2studio开发环境教程.pdf

本视频主要分为6个章节:1、瑞萨电子 e2 studio 开发环境教程 - 简介篇;2、瑞萨电子 e2 studio 开发环境教程 - 下载篇、3、瑞萨电子 e2 studio 开发环境教程 - 安装篇;4、瑞萨电子 e2 studio 开发环境教程 – 创建工程篇;5、瑞萨电子 e2 studio 开发环境教程 – 导入篇;6、瑞萨电子 e2 studio 开发环境教程 – 编译调试篇。观看视频

RT-Thread 最强学习笔记之RT-Thread 移植到STM32F103(库)上最全教程

我移植成功的工程已经上传至我的资源,有需要的可以下载一下:https://download.csdn.net/download/qq_40831778/11862568 一:简介RT-Thread 1.RT-Thread 简介 作为一名 RTOS 的初学者,也许你对 RT-Thread 还比较陌生。然而,随着你的深入接...

qq_40831778的博客 1万+

瑞萨e2studio----编译调试

本篇文章主要介绍如何使用e2studio的编译调试。

SHUAI_XIONG的博客 9092

【致敬未来的攻城狮计划】— 连续打卡第四天:e2 studio 使用教程

【致敬未来的攻城狮计划】— 连续打卡第四天:e2 studio 使用教程

嵌入式up 3145

使用RT-Thread studio 把LVGL移植到RT-Thread

使用RT-Thread studio 移植 LVGL到RT-Thread中 其实RT-Thread 移植LVGL 官方已经出来很多教程,但是但是他出的教程都是基于一些他们适配的BSP,但是其他不适配的怎么办呢? 当然是手搓了。 前期准备 1 在本次移植前,你必须要有在RT-Thread studio中你屏幕的显示和触摸驱动。 这个简单拉,直接把正点原子的代码移植一下就好拉。 2.你最好还是先在裸机上移植一次,这个可以跟着正点原子litleVGL(LVGL旧版本名称 要 用 这个搜索视频才能搜索的到

qq_53341141的博客 1万+

RT-ThreadRT-Thread Studio安装教程详解

RT-Thread,全称是 Real Time-Thread,顾名思义,它是一个嵌入式实时多线程操作系统,基本属性之一是支持多任务,允许多个任务同时运行并不意味着处理器在同一时刻真地执行了多个任务。事实上,一个处理器核心在某一时刻只能运行一个任务,由于每次对一个任务的执行时间很短、任务与任务之间通过任务调度器进行非常快速地切换(调度器根据优先级决定此刻该执行的任务),给人造成多个任务在一个时刻同时运行的错觉。

C/C++软件工程师、嵌入式软件工程师、物联网研发工程师、C/C++讲师、物联网讲师、嵌入式讲师、鸿蒙讲师---欢迎大家一起交流(私信添加博主微信) 3697

【玩转 RT-ThreadRT-Thread Studio —— 按键控制电机正反转、蜂鸣器

文章目录一、初识RT-Thread1.简介2.前景3.软件生态二、实验准备三、实验需求四、操作流程1.RT-Thread工程2.RT-Thread Studio界面介绍3.代码编写4.烧录5.串口监视五、代码演示六、原理讲解 一、初识RT-Thread 做世界级的 OS,让万物互联,信息畅通无阻。 成为未来 AIoT 领域最为主流的操作系统平台。 1.简介 RT-Thread 是一个集实时操作系统(RTOS)内核、中间件组件和开发者社区于一体的技术平台,由熊谱翔先生带领并集合开源社区力量开发而成,RT

董哲朋的博客 15万+

RT-Thread开发工具链:Env与Studio深度使用

本文深入探讨了RT-Thread生态系统中的核心开发工具链,重点分析了Env配置工具和RT-Thread Studio IDE的高级功能和使用技巧。Env工具作为RT-Thread开发的重要组成部分,提供了强大的图形化配置系统和软件包管理功能,通过文本用户界面让开发者能够轻松对内核、组件和软件包进行配置裁剪。文章详细解析了Env的菜单配置系统、软件包管理高级技巧、构建系统集成与优化方法,以及故障排

gitblog_00095的博客 1000

在e2studio中移植RT-Thread到瑞萨RA MCU的完整实践指南

实时操作系统(RTOS)是嵌入式开发中管理多任务、提高系统可靠性的核心技术,其核心原理是通过任务调度、中断管理和资源分配来实现并发执行。在资源受限的微控制器(MCU)上,轻量级RTOS能显著提升开发效率与系统可维护性。RT-Thread作为一款国产开源实时操作系统,以其模块化设计、丰富组件和活跃社区,在物联网、工业控制等领域广泛应用。瑞萨电子的RA系列MCU基于Arm Cortex-M内核,配合其官方集成开发环境e2studio和灵活软件包(FSP),为开发提供了强大的硬件抽象与配置工具。本文将深入探讨如何

weixin_30315905的博客 551

RT-Thread Studio 正式支持GD32H7高性能系列MCU | 技术集结

RT-Thread 与兆易创(GigaDevice)作为战略合作伙伴,始终以推动MCU芯片生态繁荣为共同使命。我们计划将 RT-Thread Studio支持范围扩展至兆易创的更多产品系列,持续为开发者带来更丰富的选择与更高效的开发体验。RT-Thread Studio现已全面适配GD32H7系列芯片,支持基于该系列芯片的工程创建,为高性能应用场景提供坚实的技术支撑与开发便利。想要在RT-Thread平台或社区投放内容?RT-Thread已开放对接窗口,11月10号即将发布。11月10号即将发布。

rtthreadiotos的博客 761

RT-Thread与e2studio无缝集成:瑞萨MCU嵌入式开发实战指南

嵌入式实时操作系统(RTOS)是嵌入式开发的核心基础,它通过提供任务调度、内存管理和设备抽象等机制,实现对硬件资源的高效利用。RT-Thread作为一款国产开源RTOS,以其组件丰富、可裁剪性强和社区活跃著称,在物联网和工业控制领域应用广泛。其技术价值在于降低了复杂嵌入式应用的开发门槛,并提供了统一的软件框架。在实际工程中,将RT-Thread与特定芯片厂商的原生开发工具链集成,是发挥其效能的关键步骤,这涉及到构建系统适配、调试环境配置和驱动整合等实践。本教程聚焦于将RT-Thread无缝集成到瑞萨(Ren

weixin_33738578的博客 413

【瑞萨RA MCU创意氛围赛速通】瑞萨编译软件E2 studio安装教程

e2 studio(简称为 e2 或 e2s)是瑞萨电子的一款包含代码开发、构建和调试的开发工具。e2 studio 基于开源 Eclipse IDE 和与之相关的 C/C++ 开发工具(CDT)。e2 studio 托管了瑞萨的 FSP 灵活配 置软件包,这是一个用于支持瑞萨 MCU 开发的固件库。通过使用 FSP 库,我们可以轻松配置和 管理瑞萨 MCU,从而轻松实现复杂的应用程序。

PrairieOne的博客 1659

e2 studio复制工程文件、配置调试方式、配置生成hex文件

e2 studio复制工程文件、配置调试方式、配置生成hex文件

qq_55261484的博客 1433

e2studio如何创建工程

目标开发板如果是瑞萨官方的,Target Board选择对应的型号,如果是自主设计的开发板,Target Board选择Custom;选择要下载的工具链版本,这里使用的是瑞萨自有有CC-RX工具链,将左下角对号勾选,只点最版即可,点击完成。双击打开e2studio,先选择工作空间所在位置,自行选择,路径最好全为英文,点击启动。选择编译工具链的存放路径(保持默认即可,也可自由选择),点击Next。编译方式的选取,根据需求选取,点击下一步。配置选择完成,点击下一步,下一步,完成;注册代码生成器,点击确定。

qq_50654853的博客 1536

【瑞萨MCU】开发环境搭建之 e2 studio

e2 studio(简称为 e2 或 e2s)是瑞萨电子的一款包含代码开发、构建和调试的开发工具。e2 studio 基于开源 Eclipse IDE 和与之相关的 C/C++ 开发工具(CDT)。e2 studio 托管了瑞萨的 FSP 灵活配置软件包,这是一个用于支持瑞萨 MCU 开发的固件库。通过使用 FSP 库,我们可以轻松配置和管理瑞萨 MCU,从而轻松实现复杂的应用程序。

嵌入式小菜鸟一枚~ 6967

瑞萨e2studio(24)----电容触摸配置(1)

这篇文档将创建一个使用 e2 studio 集成 QE 的电容式触摸应用示例,通过触摸按键进行LED点亮。

xh1479的博客 1万+

【环境搭建】在e2studio使用DAP进行开发调试(基于DShanMCU-RA6M5开发板)

在e2studio使用DAP进行开发调试(基于DShanMCU-RA6M5开发板)

挨踢民工的博客 1892
上一篇: 基于RT-Thread和FRDM-MCXA156的智能头盔传感器数据采集系统 | 技术集结
下一篇: 资料全面梳理!RT-Thread AIoT大赛报名倒计时
RT-Thread物联网操作系统
博客等级 码龄6年 0粉丝 392原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值