我现在使用c6678的H264HP编码器多核开发,遇到一个问题。
H264版本是01.00.03,从官网下载的。编译环境和realease PDF的说明一致。
core0跑NDK,core1-core2跑H264编码,在仿真情况下,从DDR3读取帧数据,然后core0将压缩的视频数据从网络发送出去,一切工作都是正常的。
将镜像文件写到SPI NOR FLASH,再启动,core0的NDK功能正常,core1-core2的编码不能正常运行。
可以确认DDR3初始化正常,因为core0的代码段在DD3里。
后来发现core1-core7都停在
H264HPVENC_control(handle,XDM_GETVERSION,(H264HPVENC_DynamicParams *)&lDynamicParams,(H264HPVENC_Status *)&lstatus);
这行代码,不再继续执行了。
后来又做了一些实验,发现H264编码器只能在Core0正常运行,其他核都不行,都是停在了H264HPVENC_control这一行。这个结果是在烧写到NOR Flash后发生的。仿真情况下,都是正确的。
项目需要脱机运行,希望能得到大家的帮助,告诉我是哪里出了问题?
Shine:
跟仿真时不同的地方是脱机运行时,由core0加载代码到其他核运行,先跟一下代码有没有被core0正确加载到其他的核。
user5024810:
回复 Shine:
我使用工具链,将同一个.out文件,制作成2核的镜像文件,然后用norwriter烧到SPINOR Flash。
启动使用了2次调用RBL的方式。 使用的官方开发板,拨码为POST启动,我替换了POST程序,替换的程序首先初始化DDR3,然后再次调用RBL,让RBL以SPI NOR FLASH的方式再次加载程序。
core0 修改core1的启动地址,然后激活core1。 2个核的代码及数据加载是由RBL完成的。
core0没有加载其他核代码的程序。H264Encode的CFG没有做修改,与官网例子一致。
结果是core0不会停在H264HPVENC_control,core1会停在H264HPVENC_control。
后来发现core1调用H264HPVENC_control时,会回调5次sync函数,然后就没有下文了。
Shine:
回复 user5024810:
不太明白启动使用了2次调用RBL的方式,上电后,RBL会自动执行,如果觉得RBL功能不符合要求可以自己写二次bootloader代码。
建议看一下下面的SPI多核加载例程。
www.deyisupport.com/…/46608.aspx
user5024810:
回复 Shine:
2次调用RBL的方式,我是参考www.deyisupport.com/…/10240.aspx 这个帖子里的附件实现的。
我的问题重点是所有核的代码是RBL完成加载的,不会出现代码加载不正确的情况,却出现了仿真和脱机运行结果不一致的情况,还可能是什么原因造成的呢?