背景介绍:
新项目使用到Freertos系统,Linux程序移植到Freertos(隐含信息代码量不是很小,是将基于Linux系统的一个IP驱动程序、应用框架和应用程序拿到Freertos上跑),validation阶段在仿真环境运行Freertos程序进行图像处理,不加载输入数据到ddr时程序能进行一帧帧图像处理,加载输入数据到ddr时程序"Data Abort"。
因为之前没做过Freertos,也没有投入太多时间做Freertos开发准备,像开发Linux一样做Freertos。以以往的经验从现象判断应该是放输入数据的地址冲突了,从后门加载输入数据覆盖了后边要用到的数据。
IP是A IP,做图像处理的,整个程序分3大层(驱动层,框架层,应用层),实际系统包含两个A IP(这里称硬核)。其中应用层是多task并发,框架层是多task并发,驱动层单task 初始化由freertos main task完成,工作阶段由应用层task调用。
问题原因:
初始化阶段驱动层向框架层注册第2个核的时候地址算错了,偏移到后边分配给输入数据的地址范围。
分析思路:
1. dump ddr,确认输入数据的地址空间在加载前是不是有数据。
2.确认误写到输入数据空间的内容是啥,推断程序中位置。
3.确