Basic: Fixed Flash Root Section¶
1 功能概述¶
本例程演示如何将变量或数据编译到(一个名为 Fixed Flash Root Section 的)固定区域(地址)。
2 环境要求¶
Board: pan108xxa1_evb / pan108xxa3_evb / pan108xxb1_evb / pan108xxb5_evb
3 编译和烧录¶
例程位置:zephyr\samples_panchip\basic\ffr_section
使用 ZAL 工具可以对其进行编译、烧录、打开 VS Code 调试等操作。关于 ZAL 工具的详细介绍请参考:Zephyr APP Launcher 工具介绍。
4 演示说明¶
下载后,串口工具中看到程序成功运行:
*** Booting Zephyr OS version 2.7.0 ***
(addr: 0x302c0) prefix = 0x7e 0x7e 0x7e 0x7e 0x7e 0x7e 0x7e 0x7e 0x7e 0x7e 0x7e 0x7e 0x7e 0x7e 0x7e 0x7e
(addr: 0x302d0) myuuid = 0x97 0x3e 0x55 0xf1 0x90 0xee 0x7c 0x62 0x9a 0xb6 0x12 0x28 0x65 0x4a 0x01 0x24
(addr: 0x302e0) string = Hi Panchip SoC!
(addr: 0x302f0) suffix = 0x92 0x92 0x92 0x92 0x92 0x92 0x92 0x92 0x92 0x92 0x92 0x92 0x92 0x92 0x92 0x92
raw data (addr: 0x302c0, size: 64):
0x7e 0x7e 0x7e 0x7e 0x7e 0x7e 0x7e 0x7e 0x7e 0x7e 0x7e 0x7e 0x7e 0x7e 0x7e 0x7e
0x97 0x3e 0x55 0xf1 0x90 0xee 0x7c 0x62 0x9a 0xb6 0x12 0x28 0x65 0x4a 0x01 0x24
0x48 0x69 0x20 0x50 0x61 0x6e 0x63 0x68 0x69 0x70 0x20 0x53 0x6f 0x43 0x21 0x00
0x92 0x92 0x92 0x92 0x92 0x92 0x92 0x92 0x92 0x92 0x92 0x92 0x92 0x92 0x92 0x92
5 开发说明¶
在 App
prj.conf
中开启 FFR Section 功能:CONFIG_FFR_SECTION=y
在 App 代码中,在需要编译到 FFR Section 的变量前面,带上
__in_section_unique(ffr_section)
前缀,需注意此变量大小默认不应超过 64 字节:/* * Put the 64-bytes app defined variable cstm_ffr to the ffr_section on flash. * NOTE: The config CONFIG_FFR_SECTION should be set to y. */ _in_section_unique(ffr_section) union ffrs cstm_ffr = { .prefix[0 ... 15] = 0x7E, .myuuid = {0x97, 0x3e, 0x55, 0xf1, 0x90, 0xee, 0x7c, 0x62, 0x9a, 0xb6, 0x12, 0x28, 0x65, 0x4a, 0x01, 0x24}, .string = "Hi Panchip SoC!", .suffix[0 ... 15] = 0x92, };
默认 FFR Section 的起始地址为 0x302C0(Bootloader 使能),大小为 64 字节
注:实际上,FFR Section 的起始地址和大小均可通过 Kconfig 进行配置,但需要满足额外的条件,因此不建议修改。项目中一般是没有必要将某个变量存放到固定地址的,仅在需要存一些 Flag 的情况下可能会用到,因此默认的 64 字节是足够使用的。
6 RAM/Flash资源使用情况¶
Memory region Used Size Region Size %age Used
FLASH: 15204 B 384 KB 3.87%
SRAM: 4128 B 64 KB 6.30%
IDT_LIST: 0 GB 2 KB 0.00%