[uCOS/RTOS] 使用RTthreadstudio创建KEIL工程

[复制链接]
8572|1
 楼主| 穿西装的强子 发表于 2024-12-21 23:20 | 显示全部楼层 |阅读模式
#申请原创#以STM32F407为例

使用RTthread-studio创建STM32F407的工程;


工程名为STM32F4,我选择的是串口1作为打印,DAPLink作为烧录口;
打开工程,构建工程;

编译完成无错误;


下载完成后成功打印!
接下来是转换成keil工程!
------------------------------------我是分割线-----------------------------------------------
首先需要创建一个keil工程,名字为template的工程

修改文件:
  • rtconfig.py
  1. import os

  2. # toolchains options
  3. ARCH='arm'
  4. CPU='cortex-m4'
  5. CROSS_TOOL='keil'

  6. # bsp lib config
  7. BSP_LIBRARY_TYPE = None                                   

  8. # cross_tool provides the cross compiler
  9. # EXEC_PATH is the compiler execute path, for example, CodeSourcery, Keil MDK, IAR
  10. PLATFORM = 'armcc'
  11. EXEC_PATH = r'KEIL的路径,根目录即可'

  12. if os.getenv('RTT_EXEC_PATH'):
  13.     EXEC_PATH = os.getenv('RTT_EXEC_PATH')

  14. BUILD = 'debug'


  15. CC = 'armcc'
  16. AS = 'armasm'
  17. AR = 'armar'
  18. LINK = 'armlink'
  19. TARGET_EXT = 'axf'

  20. DEVICE = ' --cpu Cortex-M4'
  21. CFLAGS = DEVICE + ' --apcs=interwork'
  22. AFLAGS = DEVICE
  23. LFLAGS = DEVICE + ' --info sizes --info totals --info unused --info veneers --list rtthread.map --scatter "./linker_scripts/stm32_rom.sct"'

  24. LFLAGS += ' --keep *.o(.rti_fn.*)   --keep *.o(FSymTab) --keep *.o(VSymTab)'

  25. EXEC_PATH += '/ARM/ARMCC/bin'
  26. print(EXEC_PATH)

  27. CFLAGS += ' --c99'

  28. if BUILD == 'debug':
  29.         CFLAGS += ' -g -O0'
  30.         AFLAGS += ' -g'
  31. else:
  32.         CFLAGS += ' -O2'

  33. POST_ACTION = 'fromelf --bin $TARGET --output rtthread.bin \nfromelf -z $TARGET'

2.Sconstruct
  1. import os
  2. import sys
  3. import rtconfig

  4. RTT_ROOT = os.path.normpath(os.getcwd() + '/rt-thread')

  5. sys.path = sys.path + [os.path.join(RTT_ROOT, 'tools')]
  6. try:
  7.     from building import *
  8. except Exception as e:
  9.     print("Error message:", e.message)
  10.     print('Cannot found RT-Thread root directory, please check RTT_ROOT')
  11.     print(RTT_ROOT)
  12.     sys.exit(-1)

  13. TARGET = 'rt-thread.elf'

  14. DefaultEnvironment(tools=[])
  15. env = Environment(tools = ['mingw'],
  16.     AS = rtconfig.AS, ASFLAGS = rtconfig.AFLAGS,
  17.     CC = rtconfig.CC, CCFLAGS = rtconfig.CFLAGS,
  18.     AR = rtconfig.AR, ARFLAGS = '-rc',
  19.     LINK = rtconfig.LINK, LINKFLAGS = rtconfig.LFLAGS)
  20. env.PrependENVPath('PATH', rtconfig.EXEC_PATH)

  21. env.AppendUnique(CPPDEFINES = [])

  22. Export('RTT_ROOT')
  23. Export('rtconfig')

  24. # prepare building environment
  25. objs = PrepareBuilding(env, RTT_ROOT, has_libcpu=False)

  26. # make a building
  27. DoBuilding(TARGET, objs)


然后使用RTthread的ComEmu功能生成KEIL工程,输入命令scons --target=mdk5


然而我们打开的工程不全

需要添加几个脚本,以下是工程目录

1.在applications添加SConscript脚本
  1. from building import *
  2. Import('rtconfig')

  3. cwd   = GetCurrentDir()
  4. src          = Glob('*.c')
  5. PATH  = [cwd]
  6. CPPDEFINES = ['RT_USING_ARM_LIBC','SOC_FAMILY_STM32','SOC_SERIES_STM32F4','STM32F407xx','USE_HAL_DRIVER','HAL_IWDG_MODULE_ENABLED','HAL_ADC_MODULE_ENABLED']


  7. if rtconfig.PLATFORM == 'armcc' or rtconfig.PLATFORM == 'armclang':
  8.     group = DefineGroup('Applications', src, depend = [''], CPPPATH = PATH,CPPDEFINES = CPPDEFINES)

  9. Return('group')
第一、二行加载rtconfig文件
第三行获取当前路径
第四行获取当前路径.c文件
第五行添加宏定义
第六行确定编译器版本
第七行在KEIL上添加Applications组,添加的路径为PATH,添加宏定义为CPPDEFINES,返回group。
我们在使用env功能scons --target=mdk5重新生成看效果,并且自动添加路径在库配置里面。

以此类推,所需要添加的文件的文件夹内都添加该脚本;
重新使用scons --target=mdk5生成keil工程
编译时有个报错
Undefined symbol Image$RW_IRAM1$ZI$Limit (referred from board.c)
该问题是因为rt-thread studio和keil环境不一致导致,将Image$RW_IRAM1$ZI$Limit内的$符号改为2个$即可
Image$$RW_IRAM1$$ZI$$Limit
编译成功并下载完成



以上即是rt-thread工程生成keil工程的全部过程


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
钓鱼大师 发表于 2025-5-25 23:56 | 显示全部楼层
你没有用rt thread studio 中内嵌的cube mx来自动生成代码吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

63

主题

264

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部