[技术问答] 【MA35D1】NONOS下 noncached buffer是否需要地址对齐,应该如何设置?

[复制链接]
 楼主| flycamelaaa 发表于 2025-8-19 10:46 | 显示全部楼层 |阅读模式
需要32字节对齐,否则不对齐的部分依然会是cached地址。


uint8_t  test_buffer[2048] __attribute__((aligned(32)));
...

uint8_t *p = nc_ptr(test_buffer);//转换为noncached address
lix1yr 发表于 2025-8-27 14:36 | 显示全部楼层
在 MA35D1 的 NONOS 环境下,noncached buffer(非缓存缓冲区)需要地址对齐,这是由 ARM 架构的内存访问特性及 DMA / 外设交互的硬件要求决定的
t1ngus4 发表于 2025-8-27 14:51 | 显示全部楼层
MA35D1 的外设(如 DMA、Ethernet、USB 等)在访问内存时,通常要求数据地址满足特定对齐要求(如 4 字节、8 字节或 16 字节对齐)。若地址未对齐,可能导致访问错误、数据截断或性能损耗。
g0d5xs 发表于 2025-8-27 15:52 | 显示全部楼层
noncached buffer 用于避免缓存带来的数据一致性问题(如 DMA 直接访问内存时,绕过 CPU 缓存),而未对齐的地址可能导致缓存操作(即使禁用缓存)的隐性错误。
cen9ce 发表于 2025-8-27 15:54 | 显示全部楼层
ARM Cortex-A53 内核对未对齐的内存访问虽有一定容错性,但在访问非缓存区域时,未对齐操作可能触发异常或降低效率。
zhizia4f 发表于 2025-8-27 15:54 | 显示全部楼层
一般数据传输:至少 4 字节对齐(适用于多数外设的常规数据交互)。
lamanius 发表于 2025-8-27 15:55 | 显示全部楼层
DMA 传输 / 高速外设:通常要求 8 字节或 16 字节对齐(如 Ethernet 的帧数据缓冲区、USB 的批量传输缓冲区)。
suw12q 发表于 2025-8-27 15:55 | 显示全部楼层
特定硬件模块:需参考 MA35D1 数据手册中对应外设的要求(如某些加密模块可能要求 32 字节对齐)。
su1yirg 发表于 2025-8-27 15:56 | 显示全部楼层
在 NONOS 环境下,可通过以下方式分配和设置 noncached buffer,使用编译器的对齐属性(如 GCC 的__attribute__((aligned(n)))),在定义数组或变量时强制地址对齐
b5z1giu 发表于 2025-8-27 15:56 | 显示全部楼层
通过新唐提供的内存管理 API 或标准库函数(需配合对齐参数)分配新唐专用 API:若 SDK 提供nu_malloc_aligned()等函数,可直接指定对齐粒度
ex7s4 发表于 2025-8-27 15:56 | 显示全部楼层
非缓存缓冲区需确保禁用 CPU 缓存(通过 MMU 页表配置为Device或Strongly Ordered属性),具体配置需参考 MA35D1 的 MMU 初始化代码。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

824

主题

4298

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部