查看: 1864|回复: 1
收起左侧

SES的进阶学习

[复制链接]

  离线 

  • TA的每日心情
    慵懒
    2021-7-23 17:16
  • 签到天数: 17 天

    [LV.4]

    发表于 2021-6-3 20:32:43 | 显示全部楼层 |阅读模式

    有人预言,RISC-V或将是继Intel和Arm之后的第三大主流处理器体系。欢迎访问全球首家只专注于RISC-V单片机行业应用的中文网站

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

    x
    本帖最后由 草帽王子 于 2021-6-3 20:35 编辑

    修订历史


    版本号
    修订日期
    修订的章节
    修订的内容
    1.0.0
    2020/09/22
    N/A
    初始版本

    1. SES无模板新建工程


    本节将介绍如何使用手动方式在SES创建一个用户自定义的helloworld项目。该方法在创建项目之外,需要手动设置各种选项和路径。

    由于该方式比较繁琐,所以在实际工作中较少使用,本文通过对该方式的详细讲解,来帮助用户了解如何配置各种选项和路径。

    1.1. 手动创建项目


    在菜单栏中选择“File-->New Project”,如图 1‑1。
    SEGGER Embedded Studio IDE-SES的进阶学习risc-v单片机中文社区(1)
    图 1‑1新建project

    点击后弹窗如图 1‑2,选择第一项,输入工程名并且选择文件夹路径,点击next。

    SEGGER Embedded Studio IDE-SES的进阶学习risc-v单片机中文社区(2)
    图 1‑2工程名和路径

    选择目标设备为GD32VF103VBT6,如图 1‑3,点击next。


    SEGGER Embedded Studio IDE-SES的进阶学习risc-v单片机中文社区(3)
    图 1‑3选择目标设备

    • 设置添加默认文件,此步骤需要取消勾选所有文件,点击next。
    • 新的页面不需要修改,直接点击Finish完成新建。

    1.2. 配置项目的SDK


    在上一节新建的工程处右击打开右键菜单,选择New Folder可以添加文件夹,如图 1‑4。

    在新建好的文件夹处右击,右键菜单中选择Add Existing File可以向工程添加文件,如图 1‑5。
    • 为了方便管理,请新建两个文件夹,分别命名为application和nuclei_sdk,其中application用来存放应用程序,nuclei_sdk用来存放使用的SDK。请根据nuclei_sdk实际文件结构新建文件夹以及添加使用到的文件。这里我们新建一个helloworld工程,所以nuclei_sdk文件夹内只需要添加NMSIS和SoC两个文件夹内的部分内容。各文件的详细介绍请参考第2章。
    • 注意,请在SoC目录下仅添加gd32vf103文件夹下的内容,在SoC/gd32vf103/Board目录下仅添加gd32vf103v_rvstar文件夹下的内容,最终工程目录如图 1‑6。

    SEGGER Embedded Studio IDE-SES的进阶学习risc-v单片机中文社区(4)
    图 1‑4向工程添加文件夹

    SEGGER Embedded Studio IDE-SES的进阶学习risc-v单片机中文社区(5)
    图 1‑5向工程添加文件

    SEGGER Embedded Studio IDE-SES的进阶学习risc-v单片机中文社区(6)
    图 1‑6 SES新建工程的工程结构

    1.3. 配置项目的编译和连接选项

    在菜单栏选择“Project-->Options”打开工程设置弹窗,如图 1‑7。

    在Build栏目下修改Project Type为Externally Built Executable,如图 1‑8,点击弹窗的OK按钮保存设置。

    SEGGER Embedded Studio IDE-SES的进阶学习risc-v单片机中文社区(7)
    图 1‑7打开工程设置

    SEGGER Embedded Studio IDE-SES的进阶学习risc-v单片机中文社区(8)
    图 1‑8修改工程类型

    修改工程类型后重新在菜单栏选择“Project-->Options”打开工程设置弹窗,修改Build栏目下Tool Chain Directory为\$(StudioDir)/Nuclei_Toolchain/gcc/bin如图 1‑9。此路径是根据之前配置的工具链路径而变化的,为方便使用,如果严格按照教程配置,可以使用“StudioDir”这个宏来简化路径,否则需要输入绝对路径。


    SEGGER Embedded Studio IDE-SES的进阶学习risc-v单片机中文社区(9)
    图 1‑9修改工具链路径

    修改编译指令,如图 1‑10,按照下文内容分别填入编译指令。
    1. Assemble Command:"$(ToolChainDir)/riscv-nuclei-elf-gcc" $(CORE_FLAGS) $(COMMON_FLAGS) $(GC_CFLAGS) $(AsmOptions) $(Defines) $(Includes) -MD -MF "$(RelDependencyPath)" -c -o  "$(RelTargetPath)"  "$(RelInputPath)"
    2. C Compile Command:"$(ToolChainDir)/riscv-nuclei-elf-gcc" $(CORE_FLAGS) $(COMMON_FLAGS) $(GC_CFLAGS) $(COptions) $(COnlyOptions) $(Defines) $(Includes) -MD -MF "$(RelDependencyPath)" -c -o  "$(RelTargetPath)"  "$(RelInputPath)"
    3. C++ Compile Command:"$(ToolChainDir)/riscv-nuclei-elf-g++" $(CORE_FLAGS) $(COMMON_FLAGS) $(GC_CFLAGS) $(COptions) $(CppOnlyOptions) $(Defines) $(Includes) -MD -MF "$(RelDependencyPath)" -c -o  "$(RelTargetPath)"  "$(RelInputPath)"
    4. Link Command:"$(ToolChainDir)/riscv-nuclei-elf-gcc" $(CORE_FLAGS) $(COMMON_FLAGS) $(GC_LDFLAGS) $(NEWLIB_LDFLAGS) $(EXTRA_LDFLAGS)  --specs=nosys.specs -MMD -MT $(ProjectName)$(EXE) -MF $(ProjectName)$(EXE).d $(Objects) -o  "$(OutDir)/$(ProjectName)$(EXE)" -T "$(RelLinkerScriptPath)" -lstdc++ -nostartfiles -Wl,-M,-Map="$(RelMapPath)" $(LinkOptions)
    复制代码

    SEGGER Embedded Studio IDE-SES的进阶学习risc-v单片机中文社区(10)
    图 1‑10修改编译连接指令

    此处使用宏控制,之后非必要的情况下不需要修改此处的设置,直接修改编译选项的宏内容即可。

    修改工程宏。如图 1‑11,打开Build,修改Project Macros选项为下文内容。注意每个Macro之间应当换行分开。各宏定义详细内容请参考第4章。
    1. CORE_FLAGS=-march=rv32imafc -mabi=ilp32f -mcmodel=medany
    2. COMMON_FLAGS=-g -fno-common -DDOWNLOAD_MODE=DOWNLOAD_MODE_FLASHXIP
    3. GC_CFLAGS=-ffunction-sections -fdata-sections
    4. GC_LDFLAGS=-Wl,--gc-sections -Wl,--check-sections
    5. NEWLIB_LDFLAGS=--specs=nano.specs
    6. EXTRA_LDFLAGS=-u _isatty -u _write -u _sbrk -u _read -u _close -u _fstat -u _lseek
    复制代码

    SEGGER Embedded Studio IDE-SES的进阶学习risc-v单片机中文社区(11)
    图 1‑11修改工程宏设置

    如图 1‑12,修改Linker栏目下的Use Manual Linker Script为yes,在Linker Script File选项中输入链接脚本路径。


    SEGGER Embedded Studio IDE-SES的进阶学习risc-v单片机中文社区(12)
    图 1‑12连接脚本路径设置

    1.4. 配置包含路径文件


    在菜单栏选择“Project-->Options”打开工程设置弹窗,如图 1‑13,在Preprocesser选项下User Include Directories内输入工程需要的头文件路径,包括nuclei_sdk用到的头文件路径和应用程序头文件路径。

    SEGGER Embedded Studio IDE-SES的进阶学习risc-v单片机中文社区(13)
    图 1‑13工程头文件路径

    2. 工程内各文件夹内容介绍


    模板工程包含两个文件夹:application(用来存放应用文件)和nuclei_sdk(用来存放工程使用到的SDK文件)。application文件夹一般包含main.c等文件,不同工程其包含的内容不尽相同,在这里不做一一介绍。本节会较详细的介绍nuclei_sdk的内容。

    由于nuclei_sdk文件夹仅包含当前工程使用到的sdk文件,所以不同工程此文件夹内容会有所不同。本节介绍Nuclei SDK中例程中使用到的部分文件。

    NMSIS:全称Nuclei MCU Software Interface Standard,实际工程中仅包含NMSIS的部分文件。
    • Core:NMSIS-Core为基于Nuclei N/NX级别处理器的设备实现了基本的运行系统,允许用户访问处理器核心,并且为外设提供硬件抽象层。
    • DSP:包含使用NMSIS-DSP库的头文件,仅在使用DSP库时添加。
    • NN:包含使用NMSIS-NN库的头文件,仅在使用NN库时添加。
    • Library:包含编译好的DSP和NN库,仅在使用DSP和NN库时添加。

    • OS:包含操作系统的文件。Nuclei SDK提供了操作系统的例程,包括FreeRTOS,UC/OS II和RTThread。使用不同的操作系统需要包含对应名字的文件夹。
    • SoC:包含gd32vf103芯片相关的SoC部分,使用时只需添加对应芯片的文件夹。下文对SoC文件夹内容分别进行介绍。

    gd32vf103:存放gd32vf103相关内容。
    • Board:存放开发板相关内容。
    • Gd32vf103v_rvstar:存放RV-STAR相关内容,包括OpenOCD的cfg文件。
    • Include:包含硬件抽象层的头文件部分。
    • Source:包含硬件抽象层的实现部分。
    • GCC:用于存放GCC编译器使用的链接脚本。

    Common:存放驱动,启动文件,桩函数,中断处理函数。
    • Include:驱动头文件部分。有关驱动索引请参考驱动索引章节,链接如下:连接到驱动索引。
    • Source:包含系统相关函数,启动文件,驱动实现部分,桩函数。
    • Drivers:包含驱动函数实现部分。
    • GCC:包含启动文件和异常处理和中断处理部分。
    • Stubs:包含桩函数。

    以上为工程常用的文件部分,想要获取Nuclei SDK的全部源码请到Github(https://github.com/Nuclei-Software/nuclei-sdk)或码云(https://gitee.com/Nuclei-Software/nuclei-sdk)下载。想要更深入了解Nuclei SDK可以阅读Nuclei SDK在线文档(https://doc.nucleisys.com/nuclei_sdk/)。

    想要获取NMSIS的全部源码请到Github(https://github.com/Nuclei-Software/NMSIS)或码云(https://gitee.com/Nuclei-Software/NMSIS)下载。想要更深入了解NMSIS可以阅读NMSIS在线文档(https://doc.nucleisys.com/nmsis/)。

    3. 驱动索引


    RV-STAR外设部分驱动对应头文件在nuclei-sdk\SoC\gd32vf103\Common\Include路径下,内核部分对应头文件在nuclei-sdk\NMSIS\Core\Include路径下。

    外设部分驱动索引:
    外设名称
    Api所在头文件名
    adc
    gd32vf103_adc.h
    bkp
    gd32vf103_bkp.h
    can
    gd32vf103_can.h
    crc
    gd32vf103_crc.h
    dac
    gd32vf103_dac.h
    dbg
    gd32vf103_dbg.h
    dma
    gd32vf103_dma.h
    exmc
    gd32vf103_exmc.h
    exti
    gd32vf103_exti.h
    fmc
    gd32vf103_fmc.h
    fwdgt
    gd32vf103_fwdgt.h
    gpio
    gd32vf103_gpio.h
    I2c
    gd32vf103_I2c.h
    libpot
    gd32vf103_libpot.h
    pmu
    gd32vf103_pmu.h
    rcu
    gd32vf103_rcu.h
    rtc
    gd32vf103_rtc.h
    spi
    gd32vf103_spi.h
    timer
    gd32vf103_timer.h
    usart
    gd32vf103_usart.h
    wwdgt
    gd32vf103_wwdgt.h

    有关各驱动api,详见rvstar_misc文件夹内的《GD32VF103_Firmware_Library_User_Guide_V1.0.pdf》。


    4. SES编译选项设置


    本节以快速上手使用的helloworld工程为例,介绍SES中编译相关的宏以及如何修改编译选项。


    4.1. 修改工程宏


    在Projec “helloworld”文字处右键选择options,或者选中helloworld工程并且菜单栏选择“Project -> options”,打开helloworld工程的设置页面。如图 4‑1,点击图中红框标注的向上箭头打开Solution设置页面。


    SEGGER Embedded Studio IDE-SES的进阶学习risc-v单片机中文社区(14)

    图 4‑1打开Solution设置页面


    如图 4‑2,1号位置显示Solution字样即正确打开Solution设置页面,2号位置选择Build栏目,3号位置双击Project Macros选项来查看详细内容,4号位置为Project Macros选项的详细内容。下面详细介绍各个宏的内容:


    SEGGER Embedded Studio IDE-SES的进阶学习risc-v单片机中文社区(15)

    图 4‑2查看Project Macros



    • CORE_FLAGS:用来存放内核相关设置,默认值为-march=rv32imac -mabi=ilp32 -mcmodel=medany
    • COMMON_FLAGS:用来存放通用编译选项,默认值为-g -fno-common -DDOWNLOAD_MODE=DOWNLOAD_MODE_FLASHXIP
    • GC_CFLAGS:使用GC Section时C编译选项,默认值为-ffunction-sections -fdata-sections
    • GC_LDFLAGS:使用GC Section时链接选项,默认值为-Wl,--gc-sections -Wl,--check-sections
    • NEWLIB_LDFLAGS:使用NEWLIB时链接选项,默认值为--specs=nano.specs,如果需要打印浮点内容,需增加-u _printf_float编译选项,注意与前一个选项之间要有空格。
    • EXTRA_LDFLAGS:用来存放一些其他编译选项,默认值为-u _isatty -u _write -u _sbrk -u _read -u _close -u _fstat -u _lseek


    如果有涉及到以上部分内容的修改,直接修改等号右侧的内容即可。注意:project层级内的修改会覆盖Solution层级的内容,如果在project层级内修改Solution中已有的某个宏,请确保宏的内容完整性。


    4.2. 增加不在宏分类当中的编译选项


    如果要增加的编译选项不在以上的分类中,各部分可增加编译选项的位置如下:


    • 增加预定义内容:Code > Preprocessor > Preprocessor Definitions
    • 增加仅编译汇编文件使用的编译选项:Code > Assembler > Additional Assembler Options
    • 增加仅编译C文件使用的编译选项:Code > Compiler > Additional C Compiler Only Options
    • 增加编译C或C++使用的编译选项:Code > Compiler > Additional C/C++ Compiler Options
    • 增加仅编译C++文件使用的编译选项:Code > Compiler > Additional C++ Compiler Only Options
    • 增加仅链接使用的编译选项:Code > Linker > Additional Linker Options


    5. SES设置 GDB Server


    板载调试器是通过OpenOCD结合GDB的方式进行调试下载,所以需要设置使用GDB Server。在Projec “helloworld”文字处右键选择options,或者选中helloworld工程并且菜单栏选择“Project -> options”,打开helloworld工程的设置页面。如图 5‑1,在Debugger栏目下修改Target Connection选项为GDB Server。


    SEGGER Embedded Studio IDE-SES的进阶学习risc-v单片机中文社区(16)

    图 5‑1修改连接方式为GDB Server


    如图 5‑2,在GDB Server选项下需要修改三个设置项目:


    • 修改Type为OpenOCD。
    • 修改GDB Server Command Line为:"\$(StudioDir)/Nuclei_Toolchain/openocd/bin/openocd" -f "\$(SolutionDir)/../nuclei-sdk/SoC/gd32vf103/Board/gd32vf103v_rvstar/openocd_gd32vf103.cfg"
    • 修改Auto Start GDB Server为yes。


    其中GDB Server Command Line选项中openocd为实际路径,如果严格按照教程设置,可以使用StudioDir宏。-f选项后的内容为cfg文件所在实际路径,如果在工程所在路径下,可以使用SolutionDir宏。


    SEGGER Embedded Studio IDE-SES的进阶学习risc-v单片机中文社区(17)

    图 5‑2修改GDB Server设置内容


    6. SES中J-Link使用RTT打印输出


    使用J-Link调试,可以使用RTT打印输出,其设置步骤如下:

    打开rvstar_quick_start文件夹,在此路径下新建一个名为SEGGER文件夹,如图 6‑1。


    SEGGER Embedded Studio IDE-SES的进阶学习risc-v单片机中文社区(18)

    图 6‑1新建“SEGGER”文件夹


    打开J-Link驱动的根目录,将“Samples -> RTT”路径下的“SEGGER_RTT_V680d.zip”解压缩(具体压缩包名可能因版本不同而变化)。解压缩后文件内容如图 6‑2,将RTT文件夹下的“SEGGER_RTT.c”,“SEGGER_RTT.h”和“SEGGER_RTT_Conf.h”三个文件以及Syscalls文件夹下的“SEGGER_RTT_Syscalls_GCC.c”这些文件复制到之前新建的SEGGER文件夹中,最后如图 6‑3所示。在IDE中打开“SEGGER_RTT_Syscalls_GCC.c”,如图 6‑4,注释“#include \<reent.h>”所在的这一行。


    SEGGER Embedded Studio IDE-SES的进阶学习risc-v单片机中文社区(19)

    图 6‑2压缩包内文件内容


    SEGGER Embedded Studio IDE-SES的进阶学习risc-v单片机中文社区(20)

    图 6‑3复制后SEGGER文件夹内容


    SEGGER Embedded Studio IDE-SES的进阶学习risc-v单片机中文社区(21)

    图 6‑4注释不使用的头文件


    文件添加完成后添加SEGGER文件夹路径至include,如图 6‑5,打开当前工程的设置页面,添加SEGGER文件夹路径至include中。


    SEGGER Embedded Studio IDE-SES的进阶学习risc-v单片机中文社区(22)

    图 6‑5添加SEGGER文件夹路径至Include中


    接下来移除原有的write函数。如图 6‑6,在“nuclei_sdk/SoC/hbird/Common/Source/Stubs”下的“write.c”文件处右击,选择“Exclude From Build”。此时可以使用RTT打印输出,可以在J-Link的RTT Viewer里查看输出内容,在调试模式下SES会自动打开控制台输出RTT打印内容。


    SEGGER Embedded Studio IDE-SES的进阶学习risc-v单片机中文社区(23)

    图 6‑6移除原有的write函数


    7. SES中打开或导入其他例程

    7.1. 导入其他例程


    这里介绍如何在helloworld工程中导入board labs中的Timer PWM例程。


    GD32VF103单片机提供一个16位高级定时器(TIMER0),四个16位通用定时器(TIMERx=1,2,3,4)和两个16位基本定时器(TIMER5和TIMER6)。一般定时器,也就是TIMERx=1,2,3,4,可用于各种用途,包括一般时间,输入信号脉冲宽度测量或输出波形产生,如单个脉冲产生或PWM输出,多达4个独立通道的输入捕获/输出比较。通用定时器也支持编码器接口与两个输入使用正交解码器。


    这里使用Timer1的三个通道分别于led相连,并分别将这些引脚命名为TIMER1_CH1, TIMER1_CH2, TIMER1_CH3。这里使用到了GPIO和Timer的驱动,分别在gd32vf103_gpio.h和gd32vf103_timer.h文件中可以找到对应api。有关api的详细内容请参考rvstar_misc文件夹内的《GD32VF103_Firmware_Library_User_Guide_V1.0.pdf》文件。


    打开board labs获取例程源码,其链接如下:github(https://github.com/Nuclei-Software/nuclei-board-labs)码云(https://gitee.com/Nuclei-Software/nuclei-board-labs)。下载源码并解压缩,解压缩后文件内容如。打开timer_pwm文件夹,将main.c的内容覆盖至helloworld工程application文件夹下main.c文件中。


    按键盘alt+f7重新编译工程,编译无误后按照之前的教程调试运行,可以看到其运行结果如图 7‑1。可以观察到三色切换的呼吸灯即正确导入了Timer例程。

    SEGGER Embedded Studio IDE-SES的进阶学习risc-v单片机中文社区(24)

    图 7‑1三色切换的呼吸灯


    其他例程源码与board labs位置相同,如果想要获取其他例程介绍,请阅读board labs在线文档(https://doc.nucleisys.com/nuclei_board_labs/index.html)。


    7.2. 打开其他例程


    除quickstart的工程外,我们还提供了许多其他例程,链接如下:github(https://github.com/riscv-mcu/ses_nuclei_sdk_projects)码云(https://gitee.com/riscv-mcu/ses_nuclei_sdk_projects


    如图 7‑2红框所示,rvstar_quick_start文件夹内是快速上手配套的helloworld工程,rvstar_examples文件夹内是Nuclei SDK提供的所有demo,rvstar_demos是board labs当中的所有例程。有关board labs中例程的详细内容,可访问board labs的在线文档(https://doc.nucleisys.com/nuclei_board_labs/)。下载时注意要将nuclei-sdk文件夹一同下载,并保持各文件相对位置不变。如果快速上手运行无误,其他demo可直接双击打开,在IDE当中编译运行。


    SEGGER Embedded Studio IDE-SES的进阶学习risc-v单片机中文社区(25)

    图 7‑2获取其他例程






    上一篇:SES的快速上手
    RISCV作者优文
    全球首家只专注于RISC-V单片机行业应用的中文网站
    回复

    使用道具 举报

      离线 

  • TA的每日心情
    飞起
    2021-11-22 18:36
  • 签到天数: 31 天

    [LV.5]

    发表于 2021-10-21 08:07:30 | 显示全部楼层
    学习了
    全球首家只专注于RISC-V单片机行业应用的中文网站
    点评回复

    使用道具 举报

    高级模式
    B Color Image Link Quote Code Smilies

    本版积分规则

    关闭

    RISC-V单片机中文网上一条 /2 下一条


    版权及免责声明|RISC-V单片机中文网 |网站地图

    GMT+8, 2024-3-28 20:57 , Processed in 0.436248 second(s), 50 queries .

    快速回复 返回顶部 返回列表