您现在的位置是:首页 >学无止境 >华为 VOS 移植到 TDA4VM/VH 芯片的 TI RTOS SDK 时的 bug 修复笔记网站首页学无止境

华为 VOS 移植到 TDA4VM/VH 芯片的 TI RTOS SDK 时的 bug 修复笔记

TI是路,通向智驾的坑 2024-06-15 12:01:02
简介华为 VOS 移植到 TDA4VM/VH 芯片的 TI RTOS SDK 时的 bug 修复笔记

请从官网下载 TD4VM 技术参考手册,地址如下:

TDA4VM 技术参考手册地址

VOS 作为静态库移植到TDA4VM/VH 芯片的 TI RTOS SDK 中

VOS 移植到 mcusw/mcal_drv/mcal/vos,如下:
在这里插入图片描述

vos 测试应用

mcusw/mcuss_demos/vos_test_app 目录下新增 VOS 测试应用,如下:
在这里插入图片描述

bug1:将 VOS 汇编启动文件移植到 TI SDK 环境下,代码无法运行

现象:汇编代码无法正常执行; 就算在汇编启动文件 _reset 开头进行打印,依旧没有任何输出。

原因:是因为 VOS 的异常向量表以B symbol 的方式跳转的,如下:

_VECTOR_TABLE:
    b   Reset_Vector   	 // Reset Vector

B symbol 是依赖 pc 指针的相对跳转,而 SBL 会拷贝入口地址的 128 字节内容到 0 地址,然后 R5 核从0x0 地址处启动,会导致 pc 指针的值与我们汇编代码中的不一致。导致跳转出错。

解决:

  1. 使用 LDR PC, [地址] 的方式进行绝对地址跳转,如下:
_VECTOR_TABLE:
    LDR pc, reset_addr                 
  
reset_addr      : .long  RESET_HANDLER

问题解决,代码正常运行。

  1. 将异常向量在连接脚本中直接链接到 0x0 地址处

bug2: 将 VOS 汇编启动文件移植到 TI SDK 环境下,设置 MPU 后卡死

现象:在配置 MPU 之后,如果进行任何一个函数调用,那么芯片进入异常。

原因:调试发现,代码运行地址内存不能为 strong order 属性,否则进入异常

解决:修改代码运行地址处(OCMC- 0x41c00000)的 MPU 配置,设置为 normal non-cache 内存

bug3: 将 VOS 汇编启动文件移植到 TI SDK 环境下,.data 段中已赋值的全局变量初始值都是 0

现象:测试发现,已赋值的全局变量初始值都是 0,.data 段变成了 .bss 段!

原因:编译器的问题,编译器将全局变量设置为0.

解决:修改链接脚本中 .data 段属性。

原来是:

.data    	: {} palign(128) 	> OCMC_RAM_SCISERVER

修改为:

.data    	: {} palign(128) 	> OCMC_RAM_SCISERVER, type = NOINIT

已赋值的全局变量初始值不再为0,代码运行正常。

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。