变色龙Ultra编译指南:从零开始
提供了与 nRF5 SDK 相关的功能,包括设备固件更新(DFU)包生成、加密密钥的生成和管理、nRF5 SDK 引导加载程序设置生成等。支持通过多种传输方式进行 DFU,如蓝牙低能耗(BLE)、UART 上的串行通信、USB 上的串行通信、Thread 单播/多播以及 Zigbee。: 支持列出、编程、恢复、擦除 Nordic 设备上的各种操作,并且兼容 MCUboot 和 J-Link。,以及


0.项目介绍
编译变色龙需要下载代码,工具包,编译器等等, 我们直接开始
1.下载代码

2.解压上面下载的压缩包到英文目录下

3.安装make
Make 是一个广泛使用的构建工具,主要用于编译和管理软件项目中的文件。它通过读取名为
Makefile或makefile的脚本文件来确定如何编译和链接程序。Make 最初是为了C语言程序设计而开发的,但现在也可以用于其他编程语言和任务自动化。
下载后打开安装:

安装成功

请你手动添加环境变量,请你直接搜索添加make到环境变量
4. 安装 nRF 工具
nRF Util 是一款专门为 Nordic Semiconductor 产品设计的统一命令行工具。它提供了多种功能,旨在简化 Nordic 芯片(如 nRF5 系列)的开发过程,特别是涉及到固件更新、设备管理以及安全相关的任务。以下是关于 nRF Util 的一些关键点:
主要功能
nrf5sdk-tools 命令: 提供了与 nRF5 SDK 相关的功能,包括设备固件更新(DFU)包生成、加密密钥的生成和管理、nRF5 SDK 引导加载程序设置生成等。支持通过多种传输方式进行 DFU,如蓝牙低能耗(BLE)、UART 上的串行通信、USB 上的串行通信、Thread 单播/多播以及 Zigbee。
device 命令: 支持列出、编程、恢复、擦除 Nordic 设备上的各种操作,并且兼容 MCUboot 和 J-Link。这对于管理和调试 Nordic 芯片非常有用。
completion 命令: 使得用户能够更容易地与 nRF Util 进行交互,提供命令、子命令及标志的自动完成功能。这大大提高了命令行操作的效率。
打开链接:nRF Util - Downloads - nordicsemi.com

下载完成后,然后在任意位置创建文件 nRF_install.bat,打开且修改成如下代码:
@echo off
setlocal
:: Set the target path
set "targetPath=C:\nrfutil"
:: Create the folder if it doesn't exist
if not exist "%targetPath%" (
mkdir "%targetPath%"
echo Folder %targetPath% has been created.
) else (
echo Folder %targetPath% already exists.
)
:: Check if PATH already contains the target path
echo %PATH% | findstr /i /c:"%targetPath%" >nul
if %errorlevel% equ 0 (
echo Path %targetPath% is already in the system PATH.
) else (
:: Get current PATH from registry
for /f "tokens=2*" %%a in ('reg query "HKCU\Environment" /v Path') do set "currentPath=%%b"
:: Add new path to system PATH
setx Path "%currentPath%;%targetPath%" /m
echo Path %targetPath% has been added to the system PATH.
)
echo.
echo Done! You can now use nrfutil from any command prompt.
echo Please restart your command prompt to apply the new environment variables.
pause
管理员权限CMD运行:

成功 ,然后把刚刚下载的程序 nrfutil.exe 移动到如下目录:

cmd 输入 nrfutil ,显示下面安装成功:

安装nrf5sdk-tools ,cmd输入:
nrfutil install completion device nrf5sdk-tools trace
安装成功

5.下载GNU Arm Embedded Toolchain
GNU Arm Embedded Toolchain 是一个由 ARM 维护的免费软件开发工具包,专门用于开发基于 ARM Cortex-M 和 Cortex-R 系列处理器的应用程序。它包含了 GNU Compiler Collection (GCC) 的一系列工具,如编译器、汇编器、链接器和库,以及其他一些必要的工具(如调试器),使得开发者可以编写、编译和调试针对 ARM 嵌入式系统的代码。
主要组件
- GCC for ARM: 一个支持 ARM 架构的 C/C++ 编译器。
- GDB (GNU Debugger): 用于调试应用程序。
- Binutils: 包括汇编器(as)、链接器(ld)和其他工具,比如用于生成二进制文件、十六进制文件等的工具。
- Newlib 或者其他 C 库: 提供标准C库支持,适合嵌入式环境使用。
打开GNU Arm Embedded Toolchain下载链接:Downloads | GNU Arm Embedded Toolchain Downloads – Arm Developer

下载完成后,打开安装程序(这里请你不要修改安装位置):

选择下面这个,添加到环境变量:

这里如果环境变量没有成功添加,请你手动添加
GNU Arm Embedded Toolchain安装完成.
6.Vscode
请你按照下面教程安装
7.安装Vscode插件

安装上面插件
8.配置Vscode环境
VsCode打开项目文件夹

在 VS-Code 中按 F1 并输入
C/C++: Edit Configurations (UI)

在这里添加配置名称输入 ChameleonUltra_GCC 然后确定
下面这里修改成GNU Arm Embedded Toolchain的gcc.exe路径(请你注意是你的安装路径):
将 IntelliSense 模式更改为 gcc-arm (legacy)
9.安装Git
Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。
你需要添加安装目录到环境变量
10.安装nRF Command Line Tools

工具包,这个自带jlink驱动
11.安装zip
https://sourceforge.net/projects/gnuwin32/files/zip/3.0/
打开链接下载下面

cmd输入zip,安装成功

你需要添加安装目录到环境变量
12.编译项目
打开文件build.sh ,修改代码

修改成:
#!/bin/env bash
# 创建符号链接
# nRF 工具路径设置
export PATH="/C/Program Files/Nordic Semiconductor/nrf-command-line-tools/bin:$PATH"
# 添加在脚本开头(cd命令之后)
function check_command() {
if ! command -v "$1" &> /dev/null; then
echo "❌ 命令 $1 未找到,请确保已安装并在环境变量PATH中"
exit 1
fi
}
# 检查所有依赖命令
check_command mergehex
check_command nrfutil
check_command zip
check_command make
if [[ $BASH_SOURCE = */* ]]; then
cd -- "${BASH_SOURCE%/*}/" || exit
fi
function check_build() {
if [ $? -ne 0 ]; then
echo "❌ 编译失败: $1"
exit 1
else
echo "✅ $1 编译成功"
fi
}
softdevice=s140
softdevice_version=7.2.0
softdevice_id=0x0100
# 扩展版本定义
application_version_major=1
application_version_minor=0
application_version_patch=0
application_version_build=0
# 计算nrfutil使用的整型版本号
application_version_integer=$((
(application_version_major << 24) |
(application_version_minor << 16) |
(application_version_patch << 8) |
application_version_build
))
bootloader_version=1
device_type=${CURRENT_DEVICE_TYPE:-ultra}
case $device_type in
"ultra") hw_version=0 ;;
"lite") hw_version=1 ;;
*) echo "Unknown CURRENT_DEVICE_TYPE $CURRENT_DEVICE_TYPE, aborting."; exit 1 ;;
esac
echo "Building firmware for $device_type (hw_version=$hw_version)"
echo "Application版本: ${application_version_major}.${application_version_minor}.${application_version_patch}.${application_version_build}"
rm -rf "objects"
mkdir -p objects
echo "🛠 编译bootloader..."
(
cd bootloader
make -j
)
check_build "Bootloader"
echo "🛠 编译application..."
(
cd application
# 传递所有需要的版本变量
make -j \
APP_FW_VER_MAJOR=$application_version_major \
APP_FW_VER_MINOR=$application_version_minor \
APP_FW_VER_REVISION=$application_version_patch \
APP_FW_VER_BUILD=$application_version_build
)
check_build "Application"
(
cd objects
cp ../nrf52_sdk/components/softdevice/${softdevice}/hex/${softdevice}_nrf52_${softdevice_version}_softdevice.hex softdevice.hex
nrfutil nrf5sdk-tools pkg generate \
--hw-version $hw_version \
--bootloader bootloader.hex --bootloader-version $bootloader_version --key-file ../../resource/dfu_key/chameleon.pem \
--application application.hex --application-version $application_version_integer \
--softdevice softdevice.hex \
--sd-req ${softdevice_id} --sd-id ${softdevice_id} \
${device_type}-dfu-full.zip
nrfutil nrf5sdk-tools pkg generate \
--hw-version $hw_version --key-file ../../resource/dfu_key/chameleon.pem \
--application application.hex --application-version $application_version_integer \
--sd-req ${softdevice_id} \
${device_type}-dfu-app.zip
nrfutil nrf5sdk-tools settings generate \
--family NRF52840 \
--application application.hex --application-version $application_version_integer \
--softdevice softdevice.hex \
--bootloader-version $bootloader_version --bl-settings-version 2 \
settings.hex
mergehex \
--merge \
settings.hex \
application.hex \
--output application_merged.hex
mergehex \
--merge \
bootloader.hex \
application_merged.hex \
softdevice.hex \
--output fullimage.hex
tmp_dir=$(mktemp -d -t cu_binaries_XXXXXXXXXX)
cp *.hex "$tmp_dir"
mv $tmp_dir/application_merged.hex $tmp_dir/application.hex
rm $tmp_dir/settings.hex
zip -j ${device_type}-binaries.zip $tmp_dir/*.hex
rm -rf $tmp_dir
)
然后点击运行 build.sh 就可以编译代码
build.sh 会编译Bootloader与 应用application程序

会弹出编译结果

生成多个类型的固件
编译成功 ,点个关注把
13.参考
14.附件
下面是clion cmakefile.txt ,方便clion进行开发
cmake_minimum_required(VERSION 3.25)
project(ChameleonUltra C CXX ASM)
# ========================================================
# 基础配置
# ========================================================
set(CMAKE_SYSTEM_NAME Generic)
set(CMAKE_SYSTEM_PROCESSOR ARM)
# 设置C/C++标准
set(CMAKE_C_STANDARD 11)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_C_STANDARD_REQUIRED ON)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# 定义关键目录路径
set(PROJ_DIR application/src)
set(SRC_COMMON common)
set(SDK_ROOT nrf52_sdk)
set(LD_DIR application)
# ========================================================
# 编译器设置 (使用GNU Arm Embedded Toolchain)
# ========================================================
set(CMAKE_C_COMPILER arm-none-eabi-gcc)
set(CMAKE_CXX_COMPILER arm-none-eabi-g++)
set(CMAKE_ASM_COMPILER arm-none-eabi-gcc)
set(CMAKE_OBJCOPY arm-none-eabi-objcopy)
set(CMAKE_SIZE arm-none-eabi-size)
# ========================================================
# 源文件配置 (来自Makefile)
# ========================================================
set(SRC_FILES
${SRC_COMMON}/hw_connect.c
${SRC_COMMON}/libc_nano_stubs.c
${PROJ_DIR}/app_main.c
${PROJ_DIR}/app_cmd.c
${PROJ_DIR}/ble_main.c
${PROJ_DIR}/rfid_main.c
${PROJ_DIR}/settings.c
${PROJ_DIR}/usb_main.c
${PROJ_DIR}/rgb_marquee.c
${PROJ_DIR}/bsp/bsp_delay.c
${PROJ_DIR}/bsp/bsp_time.c
${PROJ_DIR}/bsp/bsp_wdt.c
${PROJ_DIR}/rfid/crc_utils.c
${PROJ_DIR}/rfid/hex_utils.c
${PROJ_DIR}/rfid/mf1_crapto1.c
${PROJ_DIR}/rfid/mf1_crypto1.c
${PROJ_DIR}/rfid/parity.c
${PROJ_DIR}/rfid/nfctag/tag_emulation.c
${PROJ_DIR}/rfid/nfctag/tag_persistence.c
${PROJ_DIR}/rfid/nfctag/hf/crypto1_helper.c
${PROJ_DIR}/rfid/nfctag/hf/nfc_14a.c
${PROJ_DIR}/rfid/nfctag/hf/nfc_mf1.c
${PROJ_DIR}/rfid/nfctag/hf/nfc_mf0_ntag.c
${PROJ_DIR}/rfid/nfctag/lf/lf_tag_em.c
${PROJ_DIR}/utils/dataframe.c
${PROJ_DIR}/utils/delayed_reset.c
${PROJ_DIR}/utils/fds_util.c
${PROJ_DIR}/utils/syssleep.c
${PROJ_DIR}/utils/timeslot.c
${SDK_ROOT}/modules/nrfx/mdk/gcc_startup_nrf52840.S
${SDK_ROOT}/components/libraries/log/src/nrf_log_backend_rtt.c
${SDK_ROOT}/components/libraries/log/src/nrf_log_backend_serial.c
${SDK_ROOT}/components/libraries/log/src/nrf_log_default_backends.c
${SDK_ROOT}/components/libraries/log/src/nrf_log_frontend.c
${SDK_ROOT}/components/libraries/log/src/nrf_log_str_formatter.c
${SDK_ROOT}/components/libraries/button/app_button.c
${SDK_ROOT}/components/libraries/util/app_error.c
${SDK_ROOT}/components/libraries/util/app_error_handler_gcc.c
${SDK_ROOT}/components/libraries/util/app_error_weak.c
${SDK_ROOT}/components/libraries/fifo/app_fifo.c
${SDK_ROOT}/components/libraries/scheduler/app_scheduler.c
${SDK_ROOT}/components/libraries/timer/app_timer2.c
${SDK_ROOT}/components/libraries/usbd/app_usbd.c
${SDK_ROOT}/components/libraries/usbd/class/cdc/acm/app_usbd_cdc_acm.c
${SDK_ROOT}/components/libraries/usbd/app_usbd_core.c
${SDK_ROOT}/components/libraries/usbd/app_usbd_serial_num.c
${SDK_ROOT}/components/libraries/usbd/app_usbd_string_desc.c
${SDK_ROOT}/components/libraries/util/app_util_platform.c
${SDK_ROOT}/components/libraries/timer/drv_rtc.c
${SDK_ROOT}/components/libraries/hardfault/nrf52/handler/hardfault_handler_gcc.c
${SDK_ROOT}/components/libraries/hardfault/hardfault_implementation.c
${SDK_ROOT}/components/libraries/util/nrf_assert.c
${SDK_ROOT}/components/libraries/atomic_fifo/nrf_atfifo.c
${SDK_ROOT}/components/libraries/atomic_flags/nrf_atflags.c
${SDK_ROOT}/components/libraries/atomic/nrf_atomic.c
${SDK_ROOT}/components/libraries/balloc/nrf_balloc.c
${SDK_ROOT}/external/fprintf/nrf_fprintf.c
${SDK_ROOT}/external/fprintf/nrf_fprintf_format.c
${SDK_ROOT}/components/libraries/memobj/nrf_memobj.c
${SDK_ROOT}/components/libraries/pwr_mgmt/nrf_pwr_mgmt.c
${SDK_ROOT}/components/libraries/ringbuf/nrf_ringbuf.c
${SDK_ROOT}/components/libraries/experimental_section_vars/nrf_section_iter.c
${SDK_ROOT}/components/libraries/sortlist/nrf_sortlist.c
${SDK_ROOT}/components/libraries/strerror/nrf_strerror.c
${SDK_ROOT}/components/libraries/queue/nrf_queue.c
${SDK_ROOT}/components/libraries/fstorage/nrf_fstorage.c
${SDK_ROOT}/components/libraries/fstorage/nrf_fstorage_sd.c
${SDK_ROOT}/components/libraries/fds/fds.c
${SDK_ROOT}/modules/nrfx/mdk/system_nrf52840.c
${SDK_ROOT}/integration/nrfx/legacy/nrf_drv_clock.c
${SDK_ROOT}/integration/nrfx/legacy/nrf_drv_power.c
${SDK_ROOT}/integration/nrfx/legacy/nrf_drv_rng.c
${SDK_ROOT}/integration/nrfx/legacy/nrf_drv_spi.c
${SDK_ROOT}/integration/nrfx/legacy/nrf_drv_ppi.c
${SDK_ROOT}/modules/nrfx/soc/nrfx_atomic.c
${SDK_ROOT}/modules/nrfx/drivers/src/nrfx_saadc.c
${SDK_ROOT}/modules/nrfx/drivers/src/nrfx_clock.c
${SDK_ROOT}/modules/nrfx/drivers/src/nrfx_gpiote.c
${SDK_ROOT}/modules/nrfx/drivers/src/nrfx_power.c
${SDK_ROOT}/modules/nrfx/drivers/src/prs/nrfx_prs.c
${SDK_ROOT}/modules/nrfx/drivers/src/nrfx_systick.c
${SDK_ROOT}/modules/nrfx/drivers/src/nrfx_usbd.c
${SDK_ROOT}/modules/nrfx/drivers/src/nrfx_nfct.c
${SDK_ROOT}/modules/nrfx/drivers/src/nrfx_timer.c
${SDK_ROOT}/modules/nrfx/drivers/src/nrfx_lpcomp.c
${SDK_ROOT}/modules/nrfx/drivers/src/nrfx_pwm.c
${SDK_ROOT}/modules/nrfx/drivers/src/nrfx_spi.c
${SDK_ROOT}/modules/nrfx/drivers/src/nrfx_rng.c
${SDK_ROOT}/modules/nrfx/drivers/src/nrfx_ppi.c
${SDK_ROOT}/modules/nrfx/drivers/src/nrfx_wdt.c
${SDK_ROOT}/external/segger_rtt/SEGGER_RTT.c
${SDK_ROOT}/external/segger_rtt/SEGGER_RTT_Syscalls_GCC.c
${SDK_ROOT}/external/segger_rtt/SEGGER_RTT_printf.c
${SDK_ROOT}/components/ble/common/ble_advdata.c
${SDK_ROOT}/components/ble/ble_advertising/ble_advertising.c
${SDK_ROOT}/components/ble/common/ble_conn_params.c
${SDK_ROOT}/components/ble/common/ble_conn_state.c
${SDK_ROOT}/components/ble/ble_link_ctx_manager/ble_link_ctx_manager.c
${SDK_ROOT}/components/ble/common/ble_srv_common.c
${SDK_ROOT}/components/ble/nrf_ble_gatt/nrf_ble_gatt.c
${SDK_ROOT}/external/utf_converter/utf.c
${SDK_ROOT}/components/ble/ble_services/ble_nus/ble_nus.c
${SDK_ROOT}/components/ble/ble_services/ble_bas/ble_bas.c
${SDK_ROOT}/components/ble/nrf_ble_qwr/nrf_ble_qwr.c
${SDK_ROOT}/components/softdevice/common/nrf_sdh.c
${SDK_ROOT}/components/softdevice/common/nrf_sdh_ble.c
${SDK_ROOT}/components/softdevice/common/nrf_sdh_soc.c
${SDK_ROOT}/components/ble/peer_manager/auth_status_tracker.c
${SDK_ROOT}/components/ble/peer_manager/gatt_cache_manager.c
${SDK_ROOT}/components/ble/peer_manager/gatts_cache_manager.c
${SDK_ROOT}/components/ble/peer_manager/id_manager.c
${SDK_ROOT}/components/ble/peer_manager/nrf_ble_lesc.c
${SDK_ROOT}/components/ble/peer_manager/peer_data_storage.c
${SDK_ROOT}/components/ble/peer_manager/peer_database.c
${SDK_ROOT}/components/ble/peer_manager/peer_id.c
${SDK_ROOT}/components/ble/peer_manager/peer_manager.c
${SDK_ROOT}/components/ble/peer_manager/peer_manager_handler.c
${SDK_ROOT}/components/ble/peer_manager/pm_buffer.c
${SDK_ROOT}/components/ble/peer_manager/security_dispatcher.c
${SDK_ROOT}/components/ble/peer_manager/security_manager.c
${SDK_ROOT}/components/libraries/crypto/backend/nrf_hw/nrf_hw_backend_init.c
${SDK_ROOT}/components/libraries/crypto/backend/nrf_hw/nrf_hw_backend_rng.c
${SDK_ROOT}/components/libraries/crypto/backend/nrf_hw/nrf_hw_backend_rng_mbedtls.c
${SDK_ROOT}/components/libraries/crypto/nrf_crypto_aead.c
${SDK_ROOT}/components/libraries/crypto/nrf_crypto_aes.c
${SDK_ROOT}/components/libraries/crypto/nrf_crypto_aes_shared.c
${SDK_ROOT}/components/libraries/crypto/nrf_crypto_ecc.c
${SDK_ROOT}/components/libraries/crypto/nrf_crypto_ecdh.c
${SDK_ROOT}/components/libraries/crypto/nrf_crypto_ecdsa.c
${SDK_ROOT}/components/libraries/crypto/nrf_crypto_eddsa.c
${SDK_ROOT}/components/libraries/crypto/nrf_crypto_error.c
${SDK_ROOT}/components/libraries/crypto/nrf_crypto_hash.c
${SDK_ROOT}/components/libraries/crypto/nrf_crypto_hkdf.c
${SDK_ROOT}/components/libraries/crypto/nrf_crypto_hmac.c
${SDK_ROOT}/components/libraries/crypto/nrf_crypto_init.c
${SDK_ROOT}/components/libraries/crypto/nrf_crypto_rng.c
${SDK_ROOT}/components/libraries/crypto/nrf_crypto_shared.c
${SDK_ROOT}/components/libraries/crypto/backend/cc310/cc310_backend_aes.c
${SDK_ROOT}/components/libraries/crypto/backend/cc310/cc310_backend_aes_aead.c
${SDK_ROOT}/components/libraries/crypto/backend/cc310/cc310_backend_chacha_poly_aead.c
${SDK_ROOT}/components/libraries/crypto/backend/cc310/cc310_backend_ecc.c
${SDK_ROOT}/components/libraries/crypto/backend/cc310/cc310_backend_ecdh.c
${SDK_ROOT}/components/libraries/crypto/backend/cc310/cc310_backend_ecdsa.c
${SDK_ROOT}/components/libraries/crypto/backend/cc310/cc310_backend_eddsa.c
${SDK_ROOT}/components/libraries/crypto/backend/cc310/cc310_backend_hash.c
${SDK_ROOT}/components/libraries/crypto/backend/cc310/cc310_backend_hmac.c
${SDK_ROOT}/components/libraries/crypto/backend/cc310/cc310_backend_init.c
${SDK_ROOT}/components/libraries/crypto/backend/cc310/cc310_backend_mutex.c
${SDK_ROOT}/components/libraries/crypto/backend/cc310/cc310_backend_rng.c
${SDK_ROOT}/components/libraries/crypto/backend/cc310/cc310_backend_shared.c
${SDK_ROOT}/components/libraries/crypto/backend/oberon/oberon_backend_chacha_poly_aead.c
${SDK_ROOT}/components/libraries/crypto/backend/oberon/oberon_backend_ecc.c
${SDK_ROOT}/components/libraries/crypto/backend/oberon/oberon_backend_ecdh.c
${SDK_ROOT}/components/libraries/crypto/backend/oberon/oberon_backend_ecdsa.c
${SDK_ROOT}/components/libraries/crypto/backend/oberon/oberon_backend_eddsa.c
${SDK_ROOT}/components/libraries/crypto/backend/oberon/oberon_backend_hash.c
${SDK_ROOT}/components/libraries/crypto/backend/oberon/oberon_backend_hmac.c
)
# ========================================================
# 设备特定源文件 (ChameleonUltra)
# ========================================================
list(APPEND SRC_FILES
${PROJ_DIR}/rfid/reader/hf/mf1_toolbox.c
${PROJ_DIR}/rfid/reader/hf/rc522.c
${PROJ_DIR}/rfid/reader/lf/data_utils.c
${PROJ_DIR}/rfid/reader/lf/lf_125khz_radio.c
${PROJ_DIR}/rfid/reader/lf/lf_em410x_data.c
${PROJ_DIR}/rfid/reader/lf/lf_reader_data.c
${PROJ_DIR}/rfid/reader/lf/lf_reader_main.c
${PROJ_DIR}/rfid/reader/lf/lf_t55xx_data.c
)
# ========================================================
# 包含目录配置 (来自Makefile)
# ========================================================
include_directories(
${PROJ_DIR}
${SRC_COMMON}
${PROJ_DIR}/bsp/
${PROJ_DIR}/utils/
${PROJ_DIR}/rfid/
${PROJ_DIR}/rfid/nfctag/
${PROJ_DIR}/rfid/nfctag/hf
${PROJ_DIR}/rfid/nfctag/lf
${PROJ_DIR}/rfid/reader/
${PROJ_DIR}/rfid/reader/hf
${PROJ_DIR}/rfid/reader/lf
${SDK_ROOT}/components/nfc/ndef/generic/message
${SDK_ROOT}/components/nfc/t2t_lib
${SDK_ROOT}/components/nfc/t4t_parser/hl_detection_procedure
${SDK_ROOT}/components/ble/ble_services/ble_ancs_c
${SDK_ROOT}/components/nfc/platform
${SDK_ROOT}/components/ble/ble_services/ble_ias_c
${SDK_ROOT}/components/libraries/pwm
${SDK_ROOT}/components/libraries/usbd/class/cdc/acm
${SDK_ROOT}/components/libraries/usbd/class/hid/generic
${SDK_ROOT}/components/libraries/usbd/class/msc
${SDK_ROOT}/components/libraries/usbd/class/hid
${SDK_ROOT}/modules/nrfx/hal
${SDK_ROOT}/components/nfc/ndef/conn_hand_parser/le_oob_rec_parser
${SDK_ROOT}/components/libraries/log
${SDK_ROOT}/components/ble/ble_services/ble_gls
${SDK_ROOT}/components/libraries/fstorage
${SDK_ROOT}/components/nfc/ndef/text
${SDK_ROOT}/components/libraries/mutex
${SDK_ROOT}/components/libraries/gfx
${SDK_ROOT}/components/libraries/bootloader/ble_dfu
${SDK_ROOT}/components/nfc/ndef/connection_handover/common
${SDK_ROOT}/components/libraries/fifo
${SDK_ROOT}/components/libraries/stack_info
${SDK_ROOT}/components/boards
${SDK_ROOT}/components/nfc/ndef/generic/record
${SDK_ROOT}/components/nfc/t4t_parser/cc_file
${SDK_ROOT}/components/ble/ble_advertising
${SDK_ROOT}/external/utf_converter
${SDK_ROOT}/components/ble/ble_services/ble_bas_c
${SDK_ROOT}/modules/nrfx/drivers/include
${SDK_ROOT}/components/libraries/experimental_task_manager
${SDK_ROOT}/components/ble/ble_services/ble_hrs_c
${SDK_ROOT}/components/softdevice/s140/headers/nrf52
${SDK_ROOT}/components/nfc/ndef/connection_handover/le_oob_rec
${SDK_ROOT}/components/libraries/queue
${SDK_ROOT}/components/libraries/pwr_mgmt
${SDK_ROOT}/components/ble/ble_dtm
${SDK_ROOT}/components/toolchain/cmsis/include
${SDK_ROOT}/components/ble/ble_services/ble_rscs_c
${SDK_ROOT}/components/ble/common
${SDK_ROOT}/components/ble/ble_services/ble_lls
${SDK_ROOT}/components/libraries/hardfault/nrf52
${SDK_ROOT}/components/libraries/bsp
${SDK_ROOT}/components/nfc/ndef/connection_handover/ac_rec
${SDK_ROOT}/components/ble/ble_services/ble_bas
${SDK_ROOT}/components/libraries/mpu
${SDK_ROOT}/components/libraries/experimental_section_vars
${SDK_ROOT}/components/ble/ble_services/ble_ans_c
${SDK_ROOT}/components/libraries/slip
${SDK_ROOT}/components/libraries/delay
${SDK_ROOT}/components/libraries/csense_drv
${SDK_ROOT}/components/libraries/memobj
${SDK_ROOT}/components/ble/ble_services/ble_nus_c
${SDK_ROOT}/components/ble/ble_services/ble_bas_c
${SDK_ROOT}/components/softdevice/common
${SDK_ROOT}/components/ble/ble_services/ble_ias
${SDK_ROOT}/components/libraries/usbd/class/hid/mouse
${SDK_ROOT}/components/libraries/low_power_pwm
${SDK_ROOT}/components/nfc/ndef/conn_hand_parser/ble_oob_advdata_parser
${SDK_ROOT}/components/ble/ble_services/ble_dfu
${SDK_ROOT}/external/fprintf
${SDK_ROOT}/components/libraries/svc
${SDK_ROOT}/components/libraries/atomic
${SDK_ROOT}/components
${SDK_ROOT}/components/libraries/scheduler
${SDK_ROOT}/components/libraries/cli
${SDK_ROOT}/components/ble/ble_services/ble_lbs
${SDK_ROOT}/components/ble/ble_services/ble_hts
${SDK_ROOT}/components/ble/ble_services/ble_cts_c
${SDK_ROOT}/components/libraries/crc16
${SDK_ROOT}/components/nfc/t4t_parser/apdu
${SDK_ROOT}/components/libraries/util
${SDK_ROOT}/components/libraries/usbd/class/cdc
${SDK_ROOT}/components/libraries/csense
${SDK_ROOT}/components/libraries/balloc
${SDK_ROOT}/components/libraries/ecc
${SDK_ROOT}/components/libraries/hardfault
${SDK_ROOT}/components/ble/ble_services/ble_cscs
${SDK_ROOT}/components/libraries/hci
${SDK_ROOT}/components/libraries/usbd/class/hid/kbd
${SDK_ROOT}/components/libraries/timer
${SDK_ROOT}/components/softdevice/s140/headers
${SDK_ROOT}/integration/nrfx
${SDK_ROOT}/components/nfc/t4t_parser/tlv
${SDK_ROOT}/components/libraries/sortlist
${SDK_ROOT}/components/libraries/spi_mngr
${SDK_ROOT}/components/libraries/led_softblink
${SDK_ROOT}/components/nfc/ndef/conn_hand_parser
${SDK_ROOT}/components/libraries/sdcard
${SDK_ROOT}/components/nfc/ndef/parser/record
${SDK_ROOT}/modules/nrfx/mdk
${SDK_ROOT}/components/ble/ble_link_ctx_manager
${SDK_ROOT}/components/ble/ble_services/ble_nus
${SDK_ROOT}/components/libraries/twi_mngr
${SDK_ROOT}/components/ble/ble_services/ble_hids
${SDK_ROOT}/components/libraries/strerror
${SDK_ROOT}/components/libraries/crc32
${SDK_ROOT}/components/nfc/ndef/connection_handover/ble_oob_advdata
${SDK_ROOT}/components/nfc/t2t_parser
${SDK_ROOT}/components/nfc/ndef/connection_handover/ble_pair_msg
${SDK_ROOT}/components/libraries/usbd/class/audio
${SDK_ROOT}/components/nfc/t4t_lib
${SDK_ROOT}/components/ble/peer_manager
${SDK_ROOT}/components/libraries/mem_manager
${SDK_ROOT}/components/libraries/ringbuf
${SDK_ROOT}/components/ble/ble_services/ble_tps
${SDK_ROOT}/components/nfc/ndef/parser/message
${SDK_ROOT}/components/ble/ble_services/ble_dis
${SDK_ROOT}/components/nfc/ndef/uri
${SDK_ROOT}/components/ble/nrf_ble_gatt
${SDK_ROOT}/components/ble/nrf_ble_qwr
${SDK_ROOT}/components/libraries/gpiote
${SDK_ROOT}/components/libraries/button
${SDK_ROOT}/modules/nrfx
${SDK_ROOT}/components/libraries/twi_sensor
${SDK_ROOT}/integration/nrfx/legacy
${SDK_ROOT}/components/libraries/usbd
${SDK_ROOT}/components/nfc/ndef/connection_handover/ep_oob_rec
${SDK_ROOT}/external/segger_rtt
${SDK_ROOT}/components/libraries/atomic_fifo
${SDK_ROOT}/components/ble/ble_services/ble_lbs_c
${SDK_ROOT}/components/nfc/ndef/connection_handover/ble_pair_lib
${SDK_ROOT}/components/libraries/crypto
${SDK_ROOT}/components/ble/ble_racp
${SDK_ROOT}/components/libraries/fds
${SDK_ROOT}/components/nfc/ndef/launchapp
${SDK_ROOT}/components/libraries/atomic_flags
${SDK_ROOT}/components/ble/ble_services/ble_hrs
${SDK_ROOT}/components/ble/ble_services/ble_rscs
${SDK_ROOT}/components/nfc/ndef/connection_handover/hs_rec
${SDK_ROOT}/components/nfc/ndef/conn_hand_parser/ac_rec_parser
${SDK_ROOT}/components/libraries/stack_guard
${SDK_ROOT}/components/libraries/log/src
${SDK_ROOT}/components/libraries/crypto/backend/cc310
${SDK_ROOT}/components/libraries/crypto/backend/cc310_bl
${SDK_ROOT}/components/libraries/crypto/backend/mbedtls
${SDK_ROOT}/components/libraries/crypto/backend/oberon
${SDK_ROOT}/components/libraries/crypto/backend/micro_ecc
${SDK_ROOT}/external/nrf_cc310/include
${SDK_ROOT}/external/nrf_cc310_bl/include
${SDK_ROOT}/components/libraries/crypto/backend/optiga
${SDK_ROOT}/components/libraries/crypto/backend/nrf_sw
${SDK_ROOT}/components/libraries/crypto/backend/nrf_hw
${SDK_ROOT}/components/libraries/crypto/backend/cifra
)
# ========================================================
# 编译器选项 (来自Makefile)
# ========================================================
add_compile_options(
-O3
-g3
-DAPP_TIMER_V2
-DAPP_TIMER_V2_RTC1_ENABLED
-DFLOAT_ABI_HARD
-DNRF52840_XXAA
-DNRF_SD_BLE_API_VERSION=7
-DS140
-DSOFTDEVICE_PRESENT
-mcpu=cortex-m4
-mthumb
-mabi=aapcs
-Wall
-Werror
-mfloat-abi=hard
-mfpu=fpv4-sp-d16
-ffunction-sections
-fdata-sections
-fno-strict-aliasing
-fno-builtin
-fshort-enums
-D__HEAP_SIZE=8192
-D__STACK_SIZE=8192
-DPROJECT_CHAMELEON_ULTRA
)
# 设备特定定义
add_compile_definitions(
APP_FW_VER_MAJOR=1
APP_FW_VER_MINOR=0
)
# 汇编器选项
set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} -DAPP_TIMER_V2 -DAPP_TIMER_V2_RTC1_ENABLED -DCONFIG_GPIO_AS_PINRESET -DFLOAT_ABI_HARD -DNRF52840_XXAA -DNRF_SD_BLE_API_VERSION=7 -DS140 -DSOFTDEVICE_PRESENT")
# ========================================================
# 链接器配置
# ========================================================
set(LINKER_SCRIPT ${LD_DIR}/application.ld)
set(CMAKE_EXE_LINKER_FLAGS
"${CMAKE_EXE_LINKER_FLAGS} \
-T ${LINKER_SCRIPT} \
-specs=nano.specs \
-Wl,--gc-sections \
-mcpu=cortex-m4 \
-mthumb \
-mabi=aapcs \
-mfloat-abi=hard \
-mfpu=fpv4-sp-d16"
)
add_executable(new_target ${SRC_FILES})
# 链接库
target_link_libraries(new_target
${SDK_ROOT}/external/nrf_cc310/lib/cortex-m4/hard-float/libnrf_cc310_0.9.13.a
${SDK_ROOT}/external/nrf_oberon/lib/cortex-m4/hard-float/liboberon_3.0.8.a
-lc
-lnosys
-lm
)
更多推荐



所有评论(0)