嘉楠科技
直播中

万物死

9年用户 1389经验值
擅长:MEMS/传感技术
私信 关注
[问答]

移植vi->venc时提示VA and PA must be page aligned. va=0x70000000, pa=0x10823300,是什么问题?

移植vi->venc时出现以下提示 VA and PA must be page aligned. va=0x70000000, pa=0x10823300
编译时正常的,在.elf文件跑起来时,出现以下提示

是因为哪里没有对齐吗?以下是修改的内容:
变量及宏定义


代码修改片段


        


回帖(2)

陈燕

2025-2-8 10:18:34
当 VI 绑定 VENC 时,VI 的输出会作为 VENC 的输入。VENC 要求所有待编码的数据都要物理地址 4K 对齐,因此需要将 VI 产生的数据设置为 4K 对齐。
具体实现方法如下:设置 vicap 的绑定 venc 的通道数据为 4K 对齐(chn_attr.alignment = 12),具体代码如下:
...chn_attr.alignment = 12;...ret = kd_mpi_vicap_set_chn_attr(vicap_dev, vicap_chn, chn_attr);更多详细代码请参考 sample_venc 示例。
举报

维生素B2

2025-2-8 18:13:00
从您提供的错误信息来看,"VA and PA must be page aligned" 表示虚拟地址(VA)和物理地址(PA)必须对齐到页边界。在这种情况下,va=0x70000000 和 pa=0x10823300 没有对齐。

要解决这个问题,您需要确保虚拟地址和物理地址都对齐到页边界。通常,页大小为4KB(0x1000),因此您需要确保地址是4KB的倍数。

以下是一些可能的解决方案:

1. 检查您的内存分配代码,确保分配的内存地址是页对齐的。您可以使用以下宏来确保地址对齐:

```c
#define ALIGN_TO_PAGE(x) (((x) + 0x1000 - 1) & ~(0x1000 - 1))
```

使用这个宏,您可以将地址对齐到页边界:

```c
va = ALIGN_TO_PAGE(va);
pa = ALIGN_TO_PAGE(pa);
```

2. 如果您使用的是动态内存分配,确保分配的内存大小是页大小的倍数。例如,如果您使用的是 `malloc` 函数,您可以使用以下代码:

```c
size_t size = 4096; // 4KB
void *va = malloc(size);
```

3. 检查您的代码,确保没有其他地方导致地址未对齐。这可能包括数组、结构体或其他数据结构的大小和对齐。

4. 如果您使用的是嵌入式系统,确保您的硬件和操作系统支持页对齐。在某些情况下,您可能需要在硬件或操作系统级别进行配置。

请检查您的代码,确保虚拟地址和物理地址都对齐到页边界。希望这些建议能帮助您解决问题。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分