打印
[uCOS/RTOS]

使用RTthreadstudio创建KEIL工程

[复制链接]
58|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
#申请原创#以STM32F407为例

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


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

编译完成无错误;


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

修改文件:
  • rtconfig.py
import os

# toolchains options
ARCH='arm'
CPU='cortex-m4'
CROSS_TOOL='keil'

# bsp lib config
BSP_LIBRARY_TYPE = None                                   

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

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

BUILD = 'debug'


CC = 'armcc'
AS = 'armasm'
AR = 'armar'
LINK = 'armlink'
TARGET_EXT = 'axf'

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

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

EXEC_PATH += '/ARM/ARMCC/bin'
print(EXEC_PATH)

CFLAGS += ' --c99'

if BUILD == 'debug':
        CFLAGS += ' -g -O0'
        AFLAGS += ' -g'
else:
        CFLAGS += ' -O2'

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

2.Sconstruct
import os
import sys
import rtconfig

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

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

TARGET = 'rt-thread.elf'

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

env.AppendUnique(CPPDEFINES = [])

Export('RTT_ROOT')
Export('rtconfig')

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

# make a building
DoBuilding(TARGET, objs)


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


然而我们打开的工程不全

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

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

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


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

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工程的全部过程


960086766d4b35550b.png (36.89 KB )

960086766d4b35550b.png

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

69

帖子

2

粉丝