• RTT之ENV


    一 先安装工具git:在CMD命令行中运行git命令检验git环境变量安装成功

    二 下载env工具:然后解压,打开对应的exe然后右击-setting-intergration-registor这样后就可以在对应的目录下用右键直接打开env

    三env的功能和命令:

    3.1 配置自动生成mdk4/5/IAR相应的工程:eg:scons --target=mdk5

    3.2自动编译:scons,注意默认是使用ARM GCC编译器,如果要使用keil mdk的ARM CC编译器则需要在ENV命令行中这样指定:

    set RTT_CC=keil
    set RTT_EXEC_PATH=C:/Keilv5

    3.3项目配置menuconfig(可以用tag键的自动补全功能):上下左右键移动,空格键使能禁能某个功能,shift+?进行查找,/进行

    四软件包pkgs:可重用的软件包,从V3.0开始,使用方法:先利用menuconfig进行查找和配置相应的组件,然后使用命令:pkgs --update

    五 config:在RTT源码下的任意一个BSP上进行:

      menuconfig -s :设置每次退出menuconfig后自动生成软件包(pkgs --update)和自动重新生成相应mdk/iar工程(scons --target=mdk5)。

          menuconfig的使用条件:1 RTT版本要V3.0以上 ;2自己的根目录下要有Kconfig文件(从)

    六添加模块文件到scons:

    6.1 在文件夹下有三个文件:xxx.c  xxx.h还有SConscript(通过自定义宏 RT_USING_HELLO是否添加使能该模块),其中SConscript内容如下:

      from building import *

      cwd = GetCurrentDir()

      include_path = [cwd] src = []

      if GetDepend(['RT_USING_HELLO']):

        src += ['hello.c']

      group = DefineGroup('hello', src, depend = [''], CPPPATH =   include_path)

      Return('group')

    6.2 menuconfig 命令通过读取工程的各个 Kconfig 文件(如下),生成配置界面供用户配置内核,最后所有配置相关的宏定义都会自动保存到 BSP 目录里的 rtconfig.h 文件中,每一个 BSP 都有一个 rtconfig.h 文件

     

    保存配置后退出配置界面,打开 stm32f10x-HAL BSP 目录下的 rtconfig.h 文件可以看到 hello 模块的配置信息已经有了。

    hello 模块相关宏定义

    注意:每次 menuconfig 配置完成后都要使用 scons --target=XXX 命令生成新工程。

    因为 rtconfig.h 中已经定义了 RT_USING_HELLO 宏,所以新生成工程时就会把 hello.c 的源文件添加到新工程中。

    rtconfig.py 是一个 RT-Thread 标准的编译器配置文件

    import os
    
    # toolchains options
    ARCH='arm'
    CPU='cortex-m3'
    CROSS_TOOL='gcc'
    
    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   = '/usr/local/gcc-arm-none-eabi-5_4-2016q3/bin/'
    elif CROSS_TOOL == 'keil':
        PLATFORM    = 'armcc'
        EXEC_PATH   = 'C:/Keilv5'
    elif CROSS_TOOL == 'iar':
        PLATFORM    = 'iar'
        EXEC_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 = 'elf'
        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'
  • 相关阅读:
    mysql常用技巧
    java中集成CKEditor和CKFinder
    Linux_C++内存分配方式详解——堆、栈、自由存储区、全局/静态存储区和常量存储区
    Linux_内存分配中的堆和栈
    mysql中的text,mediumtext,longtext在Hibernate中的类型映射
    循环神经网络LSTM RNN回归:sin曲线预测
    什么?语音合成开源代码不会跑,follow me!
    华为云GaussDB:发挥生态优势,培养应用型DBA
    对话华为云专家,摆脱无意义“内卷”
    带你读AI论文丨用于细粒度分类的Transformer结构—TransFG
  • 原文地址:https://www.cnblogs.com/jieruishu/p/10268755.html
Copyright © 2020-2023  润新知