C 段属性宏示例

功能说明

演示如何在 C 代码中使用 SDK 提供的段属性宏(_FAST_TEXT__psram_bss____noinit__ 等),将函数和变量放入指定内存区域,无需修改链接脚本或 CMakeLists.txt。

硬件连接

无需外部连接,本示例仅演示链接脚本特性。

示例内容

  1. 使用 _FAST_TEXT 将 CRC 计算函数放入 SRAM 快速执行

  2. 使用 _FAST_DATA 将查找表放入 SRAM 快速访问

  3. 使用 __psram_bss__ 将大缓冲区放入 PSRAM 节省 SRAM

  4. 使用 __noinit__ 标记复位计数器,软复位后保留值

  5. 使用 __psram_data__ 将已初始化常量放入 PSRAM

编译

重要提示:在编译前,请先确认您使用的开发板型号。SDK 目前支持以下开发板:

  • arcs_evb - ARCS EVB 评估板

  • arcs_mini - ARCS Mini 开发板

根据您的开发板型号,选择对应的编译命令:

在示例目录下执行编译:

# 使用 arcs_evb 开发板
./build.sh -C -DBOARD=arcs_evb

# 或使用 arcs_mini 开发板
./build.sh -C -DBOARD=arcs_mini

Note

如果在 SDK 根目录执行,需要指定示例路径:

# 使用 arcs_evb 开发板
./build.sh -C -S samples/<示例路径> -DBOARD=arcs_evb

# 或使用 arcs_mini 开发板
./build.sh -C -S samples/<示例路径> -DBOARD=arcs_mini

Note

确保已安装对应的工具链。

烧录

编译完成后,使用 SDK tools 目录下的 cskburn 工具烧录固件:

./tools/burn/cskburn -s /dev/ttyUSB0 -b 3000000 0x0 build/arcs.bin -C arcs

Note

烧录参数说明

  • -s /dev/ttyUSB0:串口设备路径,需要根据实际情况修改 - Linux 系统:通常是 /dev/ttyUSB0/dev/ttyACM0 - 可通过 ls /dev/tty* 命令查看可用串口设备 - 不同开发板或 USB 转串口芯片可能使用不同的设备名

  • -b 3000000:烧录波特率(3Mbps)

  • 0x0:烧录起始地址

  • build/arcs.bin:编译生成的固件路径

  • -C arcs:芯片类型

注意事项

  • 确保开发板已正确连接到电脑

  • 如果无法识别串口设备,请检查 USB 连接线是否正常,或尝试其他 USB 端口

预期输出

[I][section] === Section Attribute Demo ===
[I][section] _FAST_TEXT   fast_crc=0x20010000, result=0xxxxxxxxx
[I][section] _FAST_DATA   lookup_table=0x20011394, [0]=0x00
[I][section] __psram_bss__  frame_buffer=0x28000014, size=32768
[I][section] __noinit__   boot_count=xxx (retained across soft reset)
[I][section] __psram_data__ welcome_msg=0x28000000, "Hello from PSRAM!"

地址说明:0x2001xxxx 为 SRAM,0x2800xxxx 为 PSRAM 数据区。

核心 API

定义位置

目标段

适用场景

_FAST_TEXT

arcs_ap.h

.fast_text(SRAM)

中断处理、音频回调

_FAST_DATA

arcs_ap.h

.fast_data(SRAM)

小型查找表

_FAST_BSS

arcs_ap.h

.fast_bss(SRAM)

SRAM 零初始化数据

__psram_bss__

sysutils.h

.psram.bss(PSRAM)

大缓冲区

__psram_data__

sysutils.h

.psram.data(PSRAM)

大型常量表

__psram_code__

sysutils.h

.psram.text(PSRAM)

PSRAM 中执行的代码

__noinit__

sysutils.h

.noinit

复位保留数据

__itcm_text__

sysutils.h

.itcm.text(ITCM)

极低延迟代码

__dtcm_data__

sysutils.h

.dtcm.data(DTCM)

极低延迟数据

关键代码

#include <arcs_ap.h>
#include <sysutils.h>

/* SRAM 快速函数:中断处理等对延迟敏感的场景 */
_FAST_TEXT
static uint32_t fast_crc(const uint8_t *data, size_t len)
{
    /* CRC 计算... */
}

/* PSRAM 大缓冲区:节省 SRAM 空间 */
__psram_bss__ static uint8_t frame_buffer[32 * 1024];

/* 复位保留:软复位后值不丢失 */
__noinit__ static uint32_t boot_count;

注意事项

  1. 头文件引入_FAST_TEXT 等宏定义在 arcs_ap.h__psram_bss__ 等定义在 sysutils.h,使用前需包含对应头文件

  2. PSRAM 依赖__psram_* 系列宏需要硬件支持 PSRAM 且 CONFIG_MEM_PSRAM_SIZE > 0

  3. noinit 初始值__noinit__ 变量首次上电为随机值,应用中需做有效性判断

  4. SRAM 容量_FAST_TEXT / _FAST_DATA 会占用 SRAM,仅对性能关键路径使用