1 创建新工程
前文,笔者讲了Linux和Windows下的开发环境搭建,下面就是使用SDK创建新的工程。
sdk_env自录下有两种创建工程的方式,即命令行工具和GUI Project Generator-工具,用户可根据自己的喜好选择适合自己的方式。
1.1 命令行新建工程
以命令行工具为例,双击打开sdk_env_vx.x.x下start_cmd.cmd。
![1.png](//www.obk20.com/file1/web2/M00/B2/B8/wKgaomVvInGAFAUqAACgmyILDXo706.png)
该脚本将打开一个终端。
![2.png](//www.obk20.com/file1/web2/M00/B4/7F/wKgZomVvIoGAHg-5AAB11lrG1YQ199.png)
切换路径至SDK具体的一个示例程序,以hello_world为例。
cd hpm_sdk/samples/hello_world
![3.png](//www.obk20.com/file1/web2/M00/B2/B8/wKgaomVvIpeAArGhAACPzgVHYIo681.png)
运行以下命令进行支持目标板查询。
generate_project -list
![4.png](//www.obk20.com/file1/web2/M00/B2/B8/wKgaomVvIpeAArGhAACPzgVHYIo681.png)
确认目标板名称后就可以通过运行以下命令进行工程构建,若构建成功,将看到如下类似提示。
generate_project -b hpm5300evk
![5.png](//www.obk20.com/file1/web2/M00/B4/7F/wKgZomVvItKAVM6ZAADch5uBhJo717.png)
注1:generate._project可以生成多种工程类型,如:flash_xip(链接完成后的应用程序将会在flash地址空间原地执行),debug(链接完成后的应用程序将会在片上sram中执行,掉电后程序不能保存)等。默认是使用的sram中运行。
注2:当调试flash目标时,建议把启动配置(具体请参考表4)拨为在系统编程(ISP)模式,以免flash内已烧录的程序对当前调试过程产生影响。
生成工程后,在例程目录下就会有相应的目录。
![6.png](//www.obk20.com/file1/web2/M00/B4/7F/wKgZomVvIuKAAF6jAACmikMS-2w862.png)
segger_embedded_studio的目录下就是Segger Embedded Studio的工程文件,双击hello_world.emProject可打开该工程,其他编译方式同理。
1.2 GUI Project Generator新建工程
双击打开stat_gui.exe。
![7.png](//www.obk20.com/file1/web2/M00/B4/7F/wKgZomVvIvqACYfAAAFf66BGrwY169.png)
在GUI project generator界面中的“SDK Sample”下拉列表中选择“hello_world”,在“SDK Boards”下拉列表中选择”hpm5300evk”,在“Build Type”下拉列表中选择“flash_xip”。
最后点击”Generate Project”按钮,即可生成xip类型的hello_world工程。
![7.png](//www.obk20.com/file1/web2/M00/B4/7F/wKgZomVvIvqACYfAAAFf66BGrwY169.png)
点击“Open Project with IDE”即可快速打开hello_world.工程。
2 编译下载调试程序
下面笔者使用IED和命令行分别开发程序。
2.1 SEGGER Embedded Studio for RISC-V开发
笔者这里使用SEGGER Embedded Studio for RISC-V开发。打开hello_world.工程。
![9.png](//www.obk20.com/file1/web2/M00/B2/B8/wKgaomVvIymAUWKmAAFkB7P5E-g568.png)
编译工程。
![10.png](//www.obk20.com/file1/web2/M00/B4/7F/wKgZomVvIzeAUpSEAAGtXngl0kA190.png)
编译完成后提示编译OK即可。
![11.png](//www.obk20.com/file1/web2/M00/B2/B8/wKgaomVvI0aAQDZFAADuuemqNok569.png)
接下来就可以及调试了。
![12.png](//www.obk20.com/file1/web2/M00/B4/7F/wKgZomVvI1SAW4czAAE-R0DzTd8777.png)
值得注意的是,如果要用FT2232-to-JTAG模式,需要把TRST,TDL,TMS,TDO,TCK跳线帽安装上;如果需要使用JTAG直连方式,则需要把这五个跳线帽拔掉。
![13.png](//www.obk20.com/file1/web2/M00/B2/B8/wKgaomVvI2eAc9q_AAI_5LdEZss367.png)
然后在Segger Embedded Studio中配置串口。
![14.png](//www.obk20.com/file1/web2/M00/B4/7F/wKgZomVvI3eANPhdAAHfnQLP9Mk767.png)
注意设置串口的波特率为115200。
然后连接串口即可。
![15.png](//www.obk20.com/file1/web2/M00/B4/7F/wKgZomVvI4eAA38YAAF0dPZ5Fms486.png)
然后打开串口。
![16.png](//www.obk20.com/file1/web2/M00/B2/B8/wKgaomVvI62AfXV-AAFk1NjeFBo998.png)
即可看到运行的程序。
![20.png](//www.obk20.com/file1/web2/M00/B4/7F/wKgZomVvJG-AYvPEAAIWtHort7U463.png)
2.2 SDK工具开发
运行start_cmd.cmd脚本文件。
2.2.1 编译程序
以下步骤描述了如何编译hello_world:
1. 切换到示例应用目录:
cd hpm_sdk/samples/hello_world
2. 创建build目录:
mkdir build
md build
3. 切换目录到"build"
cd build
4. 为Ninja-build产生构建文件:
cmake -GNinja -DBOARD=hpm5300evk ..
![17.png](//www.obk20.com/file1/web2/M00/B4/7F/wKgZomVvI_KAfGaWAADY_c8VyGc804.png)
5. 编译:
ninja
![18.png](//www.obk20.com/file1/web2/M00/B2/B8/wKgaomVvI_6AdFYAAABP3zDhJxQ817.png)
当编译完成后,生成的elf以及对应的其他文件可以在output目录中找到.
![19.png](//www.obk20.com/file1/web2/M00/B2/B9/wKgaomVvJBOAag5QAABX0rI0msQ877.png)
2.2.2运行/调试代码
- 完成评估板连线,包括调试器,串口线以及电源线
- 打开电源
- 打开串口软件,设置baudrate为115200
- 安装openocd(0.11以上)
- 切换至SDK根目录, 运行设置环境变量脚本:
- 运行openocd, 需要按顺序指定配置文件: 调试器配置, 内核配置, 目标板配置。例如,通过ft2232在hpm5300evk上进行单核调试,可以运行如下命令:
openocd -f probes/ft2232.cfg -f soc/hpm5361.cfg -f boards/hpm5300evk.cfg
7.连接GDB client到openocd GDB server (缺省状态下, openocd gdbserver 端口为 3333)
riscv32-unknown-elf-gdb
gdb> file build/output/demo.elf
gdb> target remote localhost:3333
gdb> load
gdb> b main
gdb> c
- 顺利运行后可以在串口终端上打印"hello_world".
在线文档:
http://hpm-sdk.readthedocs.io/
http://hpm-sdk-zh.readthedocs.io/