无需复制的代码重定位

Browse source code on GitHub

概述

此示例演示如何使用自定义链接脚本重定位代码段、数据段或 BSS 段。

与代码重定位示例不同,本示例将 ext_code.c 的内容放入另一个 Flash 区域, 并直接在该区域就地执行(XIP),无需在运行时复制或重定位代码。 其他代码(例如 main() 和 Zephyr 内核)仍放在内部 Flash 中。

nRF5340 DK 平台说明

nRF5340 DK 配备了支持 Quad SPI 的 64 Mb 外部 Flash,映射地址为 0x10000000。

使用以下命令构建并烧录应用,包括位于外部存储器中的部分:

west build -b nrf5340dk/nrf5340/cpuapp samples/application_development/code_relocation_nocopy
west flash

STM32F769I-Discovery 平台说明

stm32f769i_disco 通过 QSPI 连接了 64MB 外部 Flash,映射地址为 0x90000000。

west build -b stm32f769i_disco samples/application_development/code_relocation_nocopy
west flash

STM32 b_u585i_iot02a Discovery 套件说明

b_u585i_iot02a 通过 OSPI 连接了 64MB 外部 Flash,映射地址为 0x70000000。

west build -b b_u585i_iot02a samples/application_development/code_relocation_nocopy
west flash

运行输出

*** Booting Zephyr OS build v3.0.0-rc3-25-g0df32cec1ff2  ***
Address of main function 0x4f9
Address of function_in_ext_flash 0x10000001
Address of var_ext_sram_data 0x200000a0 (10)
Address of function_in_sram 0x20000001
Address of var_sram_data 0x200000a4 (10)
Hello World! nrf5340dk/nrf5340/cpuapp