1.新建C语言工程
相关参考文章:
RISC-V教学教案
之前的文章RISC-V C语言编程1(1)FII-RISC-V CPU简介和C语言编译流程中介绍了C语言的编译流程,本文将在Freedom Studio的环境下新建一个C语言工程。
Freedom Studio被用作开发平台。 它由SiFive公司研发,基于行业标准Eclipse IDE,并且RISCV硬件板兼容。 此外,它还预先构建了RISCV GCC工具链(toolchain)和仿真器(emulator)。
按照下面显示的步骤在Freedom Studio中创建一个新的C项目。
首先,点击File > New > C Project,然后会弹出一个窗口,如图2所示。将项目名称设置为test。 对于Project type,选择Empty Project,然后在Toolchains中选择RISC-V Cross GCC。 其他设置保持默认选项。 点击两次Next,然后点击Finish完成设置。
图1 创建C语言工程
图2 C工程设置
图3结束C工程设置
如图4所示,右键单击新创建的C工程,选择Properties,图5中的窗口将弹出。
图4 工程Properties
图5中有很多需要注意的项。 要进入常规设置界面,在左边的C/C++ Build选项下点击Settings。相应的设置会出现在右侧。
首先,点击Target Processor. 由于FII RISCV是基于整数的32位指令集,因此为Architecture选择RV32I(-march = rv32i *)。注意不要勾选下面的Multiple extension或Atomic extension。 对于Integer ABI,选择ILP32(-mabi = ilp32 *)。 ABI(application binary interface,应用程序二进制接口)是一种定义数据结构和计算例程的格式。 ILP32表示C项目中的int类型,long类型和指针类型均为32位。 small data limit一栏,填4。
图5 Target Processor设置
在图6中,对于Optimization设置,选择Optimization Level为Optimize for debug (-Og)。勾选 Disable builtin (-fno-builtin) 以禁用所有标准C库函数的替换和内联操作。 其他复选框保持默认选项。
图6 Optimization设置
在图7中,单击Warnings,然后勾选 Enable all common warnings (-Wall)。 此选项将提供常见的警告信息。 这非常实用,因为修正常见的警告会防止严重错误的发生。
单击Debugging,进入调试设置,如图8所示。将Debug level设置为Default (-g)。
图7 Warnings 设置
图8 Debugging设置
在GNU RISC-V Cross Linker下点击General,并选中Do not use standard start files (-nostartfiles),如图9所示。自定义的启动文件将被使用,稍后将对其进行介绍。
图9 Linker General设置
在GNU RISC-V Cross C Linker下的 Miscellaneous 设置中,如图10所示,选中Use newlib-nano(–specs = nano.specs),并将Other linker flags设置为-t -nostdinc –entry _start -Wl, -m,elf32lriscv -Wl,-EL,-b,elf32-littleriscv -Wl,–check-sections -Wl,–wrap = printf。 有关选项的详细说明,请参见表1。 其他选项可以在gcc.gnu.org上查询。
图10 Miscellaneous设置
选项 |
描述 |
–specs=nano.specs | 添加newlib-nano,nano是专为小型嵌入式应用程序而设计的库 |
-t | 打开trace文件 |
-nostdinc | 不在标准系统目录中搜索头文件 |
–entry _start | 将起始地址设置为startup.s |
-Wl | 将选项传递给链接器 |
-m | 设置仿真 |
Elf32lriscv | 以RISCV32I格式输出文件 |
-El | 链接小端(little-endian)对象 |
-b | 指定后续输入文件的目标 |
Elf32-littleriscv | 输出文件为小端(little-endian)格式 |
–check-sections | 检查section地址是否重叠 |
–wrap=printf | 对printf使用包装函数 |
表1 linker选项描述
在图11中,在GNU RISC-V Cross Create Flash Image下的General设置中选择Raw binary。 此选项输出原始二进制文件,可用于FLASH编程。
图11 Flash Image设置
接下来,开始使用来自RISCV_Hello(该工程可在文章末尾下载)的一些现有文件配置新的C项目。RISCV_Hello主要做了一个打印输出,代码如下:
#include <stdio.h> #include “fii_types.h” #include “platform.h” #define NOP_DELAY 0x100 void delay_cnt (int cnt) { unsigned int i; for(i = 0; i < cnt ; i ++ ) asm(“nop”); return; }; int main(void) { while ( 1 ) { printf(“Hello FII Risc-V !\r\n”); delay_cnt(NOP_DELAY); } }
在RISCV_Hello工程下选择bsp,inc,entry.S,main.S,startup.S,sys.lds和test_dbg.cfg文件,在弹出菜单上右键单击 Copy,然后右键单击 test 工程,选择Paste以粘贴所有复制的文件。
该过程如图12,图13所示。
图12从RISCV_Hello中复制文件
图13 复制文件到test工程
将文件添加到test工程后,右键单击,然后像以前一样选择Properties。 在图14中,单击GNU RISC-V Cross C Compiler下的Includes设置。 在Include paths中,单击Add图标,然后会弹出一个窗口。 在Directory column中,填$ {workspace_loc:/ $ {ProjName} / inc}或点击选择Workspace,然后选择test工程下的inc,如图15所示。单击OK完成。
图14 添加头文件
图15 选择增加文件路径
在图16中,单击GNU RISC-V Cross C Linker的General设置,在右侧的Script files中,单击Add图标将路径添加到链接器脚本。 将$ {workspace_loc:/ $ {ProjName} /sys.lds}填到File,或单击Workspace,然后找到test工程下的sys.lds,如图17所示。然后单击Apply and Close完成设置。
图16 添加linker script路径
图17 选择增加文件路径
完成上述所有步骤之后,进行Clean Project,Build Project和Refresh,如图18所示。
图18 Clean Project,Build Project和Refresh
图19 Debug
右键单击test工程,然后选择Debug As > Debug Configurations,如图19所示。图20显示了Debug Configuration弹出窗口。 在GDB OpenOCD Debugging下,单击左上角图标New launch configuration以添加test Debug。 通常在构建项目,Refresh后,Main选项卡下的C/C++ Application 行将自动填充相应的* .elf文件。 如果不是,单击空白下的Search Project以搜索* .elf文件。 否则,使用 Browse按钮在调试文件夹下找到* .elf文件(绝对路径)。
图20 Debug configurations(调试配置)
图21显示了Debugger设置。 在 Config options选项中填-f test_dbg.cfg,并在Commands中填写set mem inaccessible-by-default off。 然后单击Debug开始调试。 “set mem inaccessible-by-default off”使GDB将未由内存范围明确描述的内存视为RAM [4]。
图21 Debugger设置
圖都不能看了,可以更新一下嗎?
謝謝
谢谢你的反馈,图已经补上了!
老师,您好!
该文章结尾没有RISCV hello 工程文件,能否添加在文章后,便于接下来的课程学习。谢谢!