TI中文支持网
TI专业的中文技术问题搜集分享网站

TMS320C6748: second boot开发中出现的关于存储地址的问题

Part Number:TMS320C6748

你好:

我最近在开发二级boot的时候出现如下的问题,我参考的是论坛中与startware库中关于boot的代码。

1.参考代码的流程都是spi从flash中读取app的代码,但是读出的app的代码存放的位置应该在什么位置?参考例程中是从flash读出的位置,并未明确

是不是需要根据app的地址进行修改

2.我自己开发的app代码需不需要注意什么,比如地址位置等,还是说只需要拿到entrypoint的位置,并在boot中跳转该位置就行了?

Gary Lu:

二级引导加载的应用程序代码会存储在 Flash 。这些位置需要在编译时就确定好,并在引导代码中硬编码

meng fanan 说:我自己开发的app代码需不需要注意什么,比如地址位置等

代码大小不超过你为其分配的内存空间,并且它不会覆盖任何其他关键数据或代码

,

meng fanan:

这个硬编码指的是什么操作?地址直接跳转到flash中,还是从flash中读数据?

,

Gary Lu:

meng fanan 说:这个硬编码指的是什么操作?

是在代码中直接使用具体数值或地址,不是通过变量或参数来表示。指在代码中直接使用特定的地址、常数,而不是配置文件、宏定义

在二级 boot loader 中,硬编码为直接将 flash 中应用程序的地址固定在代码中

,

meng fanan:

我现在的问题就是boot操作,从flash读取之后,这个地址固定在什么位置,从0开始?还是从某个自定的位置开始?

二级跳转的话应当是从entrypoint跳转,这个从map文件中我可以知道,但是这个flash读取固定的位置我不太清楚。

,

Gary Lu:

程序从flash中的固定地址开始执行,启动代码负责从flash中读取应用程序并将其加载到RAM中执行。这个过程会从flash中的预定义起始地址开始,这个地址可能是0,也可能是某个特定的地址。

对于二级跳转,确实应该从入口点地址跳转。这个地址在map文件中定义,就像您在图中看到的那样。

,

meng fanan:

“启动代码负责从flash中读取应用程序并将其加载到RAM中执行”,这个ram中执行的地址也是随机的吗?还是说是个特定的位置?

,

Gary Lu:

预先定义的,不是随机

,

meng fanan:

是这样的,我现在想做一个boot+app的二级boot。

1.我的app的entry point地址为 ,所有的data都放在了DDR中,DDR的起始地址为0xC0000000,用AIS生成了hex文件,通过自己设计的代码,spi烧入flash某个自定义的地址中(0x00200000)。

2.我的boot程序是参考startware的boot程序设计的,首先通过flash读出存在0x00200000中的代码,放入我预先定义的一个数组中,该数组的首地址定义在0xC0000000。然后跳转程序至entry point处,即0xc0c0fe40,但是现象是程序无法运行下去,像是在空跑

我感觉像是地址方面的问题,所以才询问你们的帮助。

ais生成的程序没有问题,我放在flash的0地址,程序是可以正常运行的;另外boot的程序地址和app的地址我也分开存放的,一个是在DDR的0xC0000000,一个是在0xC7000000。 我的boot程序现在是接jtag在线调试的,并没有烧录进去。

是否是我地址的问题,或者是我操作步骤的问题呢?是否有可能的解决方向呢?

,

meng fanan:

你好,我刚刚在论坛中找到原来有相关问题的帖子,其中有个解答文档中有关于ais文件的解释,下面图中的这个section load address是不是你说的预先定义的ram?我是不是得按照这个adress在boot中去存储我的app的data,而不是我上午回复的2的步骤?

,

Gary Lu:

meng fanan 说:,我放在flash的0地址,程序是可以正常运行的;

这表明程序本身是没问题的。更可能是y问题出在了内存映射、跳转地址、Cache上

meng fanan 说:是否有可能的解决方向呢?

使用调试器检查一下`0xc0c0fe40`地址处的内存内容,看看是否和Flash中的`0x00200000`处的内容一致。检查boot程序是否有正确的内存映射设置。通过JTAG单步跟踪boot程序的执行,特别是在跳转到app之前和之后的行为

,

Gary Lu:

meng fanan 说:section load address

指的是程序的某个部分应当被加载到内存中的地址。它表明AIS文件中的数据将被加载到RAM的`0x80000000`地址。这表明您的boot程序应该将app的数据从Flash复制到这个RAM地址,而不是之前回复的第二步中提到的`0xC0000000`地址。

根据AIS文件的格式,每个section有一个特定的加载地址,这个地址是由链接器脚本预先定义的,确保app能够在设备的内存中正确地被定位。当您的boot程序执行时,它按照AIS文件中指定的地址将数据从Flash复制到RAM中相应的位置。

,

meng fanan:

好的,我去尝试一下重新放入相应的ram中,另外请问下有没有关于ais生成的文件说明,就像 58535901代表Section Load Command的这样的说明,因为我发现我生成的ais文件中 前面会有一段5853590D开头的数据,我不太清楚表示的是什么意思,需不需要烧入ram中?

ais文件结尾也有 58535906是不是代表结束了?

,

meng fanan:

你好,感谢!现在boot可以跳转到app了,就是要放在相对应的ram中,然后再跳转至entry point处

,

Gary Lu:

好的,不客气~

赞(0)
未经允许不得转载:TI中文支持网 » TMS320C6748: second boot开发中出现的关于存储地址的问题
分享到: 更多 (0)