工具/软件:Code Composer Studio
你(们)好
大约一年前,有一个线程涉及重新启动应用程序,其中初始化的数据部分未再次初始化。
https://e2e.ti.com/support/embedded/tirtos/f/355/p/54.2236万/1978196</s>197.8196万
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具/软件:Code Composer Studio
你(们)好
大约一年前,有一个线程涉及重新启动应用程序,其中初始化的数据部分未再次初始化。
https://e2e.ti.com/support/embedded/tirtos/f/355/p/54.2236万/1978196</s>197.8196万
Markus,
请参阅此HOWTO说明,以指定GNU目标的不同数据加载和运行地址: processors.wiki.ti.com/.../BIOS_with_GCC_(CortexA)
执行此操作时,每次程序启动.data部分运行时位置时,都将从加载程序放置在内存中的初始值重新初始化。
这是您想要的吗? 如果不是,请澄清您的具体使用案例和问题吗?
谢谢!
Scott
您好Markus:
我确实与Eric联系过,看到他回复了您原来的线。 我把它留在了那里,不知道你还有什么问题。 当时我可能会要求将此线程作为副本关闭。
不管怎样,很抱歉耽误你的时间。
我现在看到您对另一个线程的回复,即它适用于您自己的分区,但不适用于预定义的分区,如.text,.data等 。当我尝试移动.data时,没有任何问题。 我的猜测是,问题与自定义平台有某种关系。 我当地的一位工程师可以问我这个问题(他在wiki上写了HOWTO的信息),但他已经离开了。 我明天会跟他谈谈,看看他是否有任何建议…
此致,
Scott
您好Markus:
我听到了。 Wiki网页上描述的技巧将生成第二个放置指令,其目标是它将覆盖平台内自动生成的默认指令。 自此之后,发现此覆盖对某些链接程序版本不起作用。 这可能是您的项目正在发生的情况。
另一种强制对.data使用不同的加载和运行地址的方法是编辑您的自定义平台,以便分别对代码和数据区域进行分区。 默认情况下,自动生成的链接程序脚本将.data部分放入Program.platform.codeMemory,并在Program.platform.dataMemory中具有运行地址。 如果编辑内存配置,使codeMemory和dataMemory指向不同的内存区域,则会导致.data的加载和运行地址不同,从而允许.data值在CPU重置时重新初始化。
这对您有效吗?
谢谢!
Scott
这才是诀窍:
“.data”部分现在有单独的加载和运行地址(load:dddr_code,run:dddr_data)。
我还在我的配置文件中添加了以下内容:
Program.sectMap[".data"]=新Program.SectionSpec();
Program.sectMap[".data"].loadSegment ="DDR_code";
Program.sectMap[".data"].runSegment ="DDR_data";
奇怪的是,在我这样做之后,程序总是在main()之前崩溃。
但当我删除这些线条时,它是有效的。
有什么想法,为什么这里出现了这种错误?
此致,
Markus
您好Markus:
好的,我很高兴听到它工作正常(没有这些额外的线路)。
我不知道如果您在配置文件中添加.data的额外处理,为什么程序会崩溃。 如果在平台中指定了不同的代码和数据存储器区域,则无需使用Program.sectMap[],因为默认指令现在将对.data使用不同的加载和运行地址。
猜测在缺省指令和那些试图在配置文件中覆盖的指令之间仍然存在一些排序问题。 要理解原因,最好调试启动顺序,以查看main()崩溃发生的位置。 我希望最终它会有意义,但我不知道您是否要进一步调试,因为不再需要尝试重定向.data (?)
此致,
Scott