一、目的
细心的朋友可能会发现官方提供了HPM-Sdk仓库,示例代码都是作为一个文件夹的形式放在此仓库下,我们之前都是直接拷贝里面的工程进行演示。
下面我们就具体来分析一下hello_world工程的文件组成,这样我们就可以创建自己的工程。
二、介绍
现在让我们仔细研究一下hello_world工程
CMakeLists.txt是cmake构建脚本文件
cmake_minimum_required要求cmake的版本至少为3.13
find_package用于查找hpm-sdk(从环境变量HPM_SDK_BASE)
project定义工程名称
sdk_app_src指定工程源码文件
generate_ses_project生成segger工程文件
hello_world.c源码文件
board.h板级头文件
main函数中首先调用board_init进行板级初始化,然后初始化GPIO引脚,创建一个300ms的定时器用于周期性开关LED
从整体上来整个工程干净整洁(给先楫的工程师点赞)。
我们从工程构建日志中跟踪一下构建过程
先从hello_world工程中读取cmake文件,然后调用hpm-sdk目录下 hpm_Sdk/cmake/hpm-sdk-config.cmake,在调用hpm_Sdk/cmake/application.cmake。
关于示例工程的介绍到此为止。
HPM_SDK说明
下面我们进入到HPM-SDK中进一步学习下
1、目录结构
![](https://i-blog.csdnimg.cn/blog_migrate/b245f94cb44f5b0163ee5c5de5fe1658.png)
我们针对sdk目录下的CMakeLists.txt进行说明
hpm_Sdk/cmake/hpm-sdk-config.cmake
先检查HPM_SDK_BASE环境变量是否定义,未定义则报错,定义了则声明HPM_SDK_BASE变量,然后包含hpm_Sdk/cmake/application.cmake文件
hpm_Sdk/cmake/application.cmake
检查GNURISCV_TOOLCHAIN_PATH环境变量是否定义,未定义则报错;定义APP_SRC_DIR/APP_BIN_DIR/APP_NAME/APP_ELF_NAME/APP_BIN_NAME/APP_MAP_NAME/APP_ASM_NAME变量;
1、设置堆栈、flash、sdram大小信息
获取flash、sdram的大小并设置_flash_size、_extram_size这个两个链接器变量;
根据变量HEAP_SIZE/STACK_SIZE设置堆/栈大小
2、设置编译类型
可以设置的编译目标类型包括:flash_xip、flash_sdram_xip、flash_uf2、flash_sdram_uf2等;通过这个关键字定义不同的宏变量。
3、添加系统头文件路径以及添加子模块(子目录)
4、指定链接脚本
5、根据不同的工具链设置链接库
6、双核相关的配置
以上就是SDK的基本情况(先楫内部的人综合能力很强啊,从SDK的设计和脚本的编写上可见一斑)