您现在的位置是:首页 >学无止境 >华为 VOS 移植到 TDA4VM/VH 芯片的 TI RTOS SDK 时的 bug 修复笔记网站首页学无止境
华为 VOS 移植到 TDA4VM/VH 芯片的 TI RTOS SDK 时的 bug 修复笔记
简介华为 VOS 移植到 TDA4VM/VH 芯片的 TI RTOS SDK 时的 bug 修复笔记
请从官网下载 TD4VM 技术参考手册,地址如下:
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 指针的值与我们汇编代码中的不一致。导致跳转出错。
解决:
- 使用
LDR PC, [地址]
的方式进行绝对地址跳转,如下:
_VECTOR_TABLE:
LDR pc, reset_addr
reset_addr : .long RESET_HANDLER
问题解决,代码正常运行。
- 将异常向量在连接脚本中直接链接到 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,代码运行正常。
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。