rtconfig.py文件,主要用于指定编译器以及安装路径。除此之外,该文件中定义了大量的变量,这些变量包括编译选项,汇编选项,链接选项。
import os
# toolchains options
ARCH='arm'
CPU='cortex-m3'
CROSS_TOOL='keil'
if os.getenv('RTT_CC'):
CROSS_TOOL = os.getenv('RTT_CC')
# cross_tool provides the cross compiler
# EXEC_PATH is the compiler execute path, for example, CodeSourcery, Keil MDK, IAR
if CROSS_TOOL == 'gcc':
PLATFORM = 'gcc'
EXEC_PATH = 'D:/SourceryGCC/bin'
elif CROSS_TOOL == 'keil':
PLATFORM = 'armcc'
EXEC_PATH = 'D:/Keil'
elif CROSS_TOOL == 'iar':
PLATFORM = 'iar'
IAR_PATH = 'C:/Program Files/IAR Systems/Embedded Workbench 6.0 Evaluation'
if os.getenv('RTT_EXEC_PATH'):
EXEC_PATH = os.getenv('RTT_EXEC_PATH')
BUILD = 'debug'
if PLATFORM == 'gcc':
# toolchains
PREFIX = 'arm-none-eabi-'
CC = PREFIX + 'gcc'
AS = PREFIX + 'gcc'
AR = PREFIX + 'ar'
LINK = PREFIX + 'gcc'
TARGET_EXT = 'axf'
SIZE = PREFIX + 'size'
OBJDUMP = PREFIX + 'objdump'
OBJCPY = PREFIX + 'objcopy'
DEVICE = ' -mcpu=cortex-m3 -mthumb -ffunction-sections -fdata-sections'
CFLAGS = DEVICE
AFLAGS = ' -c' + DEVICE + ' -x assembler-with-cpp'
LFLAGS = DEVICE + ' -Wl,--gc-sections,-Map=rtthread-stm32.map,-cref,-u,Reset_Handler -T stm32_rom.ld'
CPATH = ''
LPATH = ''
if BUILD == 'debug':
CFLAGS += ' -O0 -gdwarf-2'
AFLAGS += ' -gdwarf-2'
else:
CFLAGS += ' -O2'
POST_ACTION = OBJCPY + ' -O binary $TARGET rtthread.bin\n' + SIZE + ' $TARGET \n'
elif PLATFORM == 'armcc':
# toolchains
CC = 'armcc'
AS = 'armasm'
AR = 'armar'
LINK = 'armlink'
TARGET_EXT = 'axf'
DEVICE = ' --device DARMSTM'
CFLAGS = DEVICE + ' --apcs=interwork'
AFLAGS = DEVICE
LFLAGS = DEVICE + ' --info sizes --info totals --info unused --info veneers --list rtthread-stm32.map --scatter stm32_rom.sct'
CFLAGS += ' -I' + EXEC_PATH + '/ARM/RV31/INC'
LFLAGS += ' --libpath ' + EXEC_PATH + '/ARM/RV31/LIB'
EXEC_PATH += '/arm/bin40/'
if BUILD == 'debug':
CFLAGS += ' -g -O0'
AFLAGS += ' -g'
else:
CFLAGS += ' -O2'
POST_ACTION = 'fromelf --bin $TARGET --output rtthread.bin \nfromelf -z $TARGET'
elif PLATFORM == 'iar':
# toolchains
CC = 'iccarm'
AS = 'iasmarm'
AR = 'iarchive'
LINK = 'ilinkarm'
TARGET_EXT = 'out'
DEVICE = ' -D USE_STDPERIPH_DRIVER' + ' -D STM32F10X_HD'
CFLAGS = DEVICE
CFLAGS += ' --diag_suppress Pa050'
CFLAGS += ' --no_cse'
CFLAGS += ' --no_unroll'
CFLAGS += ' --no_inline'
CFLAGS += ' --no_code_motion'
CFLAGS += ' --no_tbaa'
CFLAGS += ' --no_clustering'
CFLAGS += ' --no_scheduling'
CFLAGS += ' --debug'
CFLAGS += ' --endian=little'
CFLAGS += ' --cpu=Cortex-M3'
CFLAGS += ' -e'
CFLAGS += ' --fpu=None'
CFLAGS += ' --dlib_config "' + IAR_PATH + '/arm/INC/c/DLib_Config_Normal.h"'
CFLAGS += ' -Ol'
CFLAGS += ' --use_c++_inline'
AFLAGS = ''
AFLAGS += ' -s+'
AFLAGS += ' -w+'
AFLAGS += ' -r'
AFLAGS += ' --cpu Cortex-M3'
AFLAGS += ' --fpu None'
LFLAGS = ' --config stm32f10x_flash.icf'
LFLAGS += ' --redirect _Printf=_PrintfTiny'
LFLAGS += ' --redirect _Scanf=_ScanfSmall'
LFLAGS += ' --entry __iar_program_start'
EXEC_PATH = IAR_PATH + '/arm/bin/'
POST_ACTION = ''
一般来说,我们只需要修改CROSS_TOOL和下面的EXEC_PATH两个选项。
• CROSS_TOOL
编译器名字,可选的值为'keil', 'gcc','iar'。大致浏览rtconfig.py查看当前bsp所支
持的编译器。
• EXEC_PATH
编译器的安装路径。
如果您的机器上安装了MDK,那么将CROSS_TOOL修改为'keil',并修改EXEC_PATH =
r'C:/Keil'为您的MDK的安装路径。
这里有两点需要注意:
1. 安装编译器时(如MDK,ARM GCC,IAR等),不要安装到带有中文或者空格的路径
中。否则,某些解析路径时会出现错误。有些程序默认会安装到C:\Program Files目
录下,中间带有空格。建议安装时选择其他路径,养成良好的开发习惯。
2. 修改EXEC_PATH时,需要注意路径的格式。在windows平台上,默认的路径分割符号
是反斜杠\,而这个符号在C语言以及Python中都是用于转移字符的。所以修改路径时,
可以将\改为/,或者在前面加r(python特有的语法)。
假如某编译器安装位置为D:\Dir1\Dir2下。下面几种是正确的写法:
EXEC_PATH = r'D:\Dir1\Dir2' 注意,字符串前带有r,则可正常使用“\”
EXEC_PATH = 'D:/Dir1/Dir2' 注意,改用“/”,前面没有r
EXEC_PATH = 'D:\\Dir1\\Dir2' 注意,这里使用“\”的转义性来转义“\”自己。
下面是错误的写法
EXEC_PATH = 'D:\Dir1\Dir2'
编译器配置完成之后,我们就可以使用SCons来编译RT-Thread的bsp了。
在当前目录打开命令行窗口,执行scons.就会启动编译。
其中CFLAGS存储C文件的编译选项,AFLAGS 则是汇编文件的编译选项,LFLAGS 是链
接选项。BUILD 变量控制代码优化的级别。默认 BUILD 变量取值为'debug',即使用debug
方式编译,优化级别0。如果将这个变量修改为其他值,就会使用优化级别2编译。下面几种
都是可行的写法(总之只要不是'debug'就可以了)。
BUILD = ''
BUILD = 'release'
BUILD = 'hello, world'
小技巧: 在WIN7上,在当前目录按下SHIFT同时点击鼠标右键,弹出的菜单中,会
有“在此处打开命令窗口”的菜单项。点击可以快速打开CMD窗口。
参考资料来源:http://www.rt-thread.org/
文章评论(0条评论)
登录后参与讨论