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

TMS570LC4357: 二次bootloader对app的.out进行远程升级时,如何将各个section加载至对应的memory中?

Part Number:TMS570LC4357

您好!我需要在tms570lc4357芯片上实现通过bootloader远程升级app的功能

我的设计是:生成两个文件,一个是bootloader.out,另一个是app.out,将bootloader.out加载至flash的0地址处启动,然后在bootloader流程中进行远程升级,通过CAN的方式烧录app.out

问题1:通过bootloader烧录app.out是将整个文件烧录至FLASH的固定位置吗?如:bootloader占flash bank0的sector0与sector1,将app.out烧录至sector2之后的空间中

app.out在编译链接时,会通过.CMD链接脚本将.bss段和.data段加载至SRAM中,.text段和只读数据段加载至FLASH中

问题2:如果问题1中app.out烧录至flash,我还需要在bootloader流程中添加相关的拷贝函数将flash api、.bss和.data段拷贝至SRAM中吗?那这样是不是意味着flash空间中的.bss段与.data段是冗余的?

期待您的回答!谢谢!

Ben Qin:

你好,

user5769726 说:问题1:通过bootloader烧录app.out是将整个文件烧录至FLASH的固定位置吗?

是的。

user5769726 说:问题2:如果问题1中app.out烧录至flash,我还需要在bootloader流程中添加相关的拷贝函数将flash api、.bss和.data段拷贝至SRAM中吗?

不需要。app需要的变量在app文件中定义就行。

,

user5769726:

感谢您的解惑!但我对第二个问题还有疑问:

链接脚本中配置的.bss与.data段是分配在SRAM中的,但bootloader烧录的app.out是在FLASH中的,那这样不就相当于这两个段load在FLASH中,但函数中对数据进行读写时访问的地址却是SRAM的吗?

我的问题与这个帖子的问题2是类似的,但这个帖子没有解答

e2echina.ti.com/…/tms570-on-chip-bootloader

,

Ben Qin:

flash是只读内存,所以变量、堆栈等都必须在RAM中运行。

,

user5769726:

您可能没明白我的问题,我知道数据段是需要放在SRAM中运行的

我的bootloader将app.out是烧录至flash,那就是说整个.out文件包括代码段、数据段现在都在flash上,然后我是否需要手动拷贝数据段到SRAM吗?

,

Ben Qin:

抱歉没弄清楚您的问题。

user5769726 说:然后我是否需要手动拷贝数据段到SRAM吗?

不需要。对于.bss .data段是不需要特别手动将其拷贝到SRAM,这些工作提前定义在CMD文件中并由编译器完成。

user guide 链接:

www.ti.com/…/spnu151w.pdf

,

user5769726:

Ben Qin 说:对于.bss .data段是不需要特别手动将其拷贝到SRAM,这些工作提前定义在CMD文件中并由编译器完成

我理解这里不需要手动拷贝是因为ccs的加载器自动完成了这个过程,ccs的加载器加载app.out文件时候自动根据cmd文件的分配情况将各个段load至对应memory上的(flash或sram)

那我通过bootloader升级app时候,并不是通过ccs加载的,是通过CAN协议获取的,这时候如何确定各个section的地址?如何加载至对应memory?

,

Ben Qin:

你不需要重新分配各个section地址。

当你通过CAN协议获取app,只会用新的app替换掉原来的app。memory allocation是不用重新分配的,你只是将flash中的程序替换掉了。

你只需要操作flash将擦除原来的app擦除,然后写进新的app。当新的app运行,还是按照原来的分配。

赞(0)
未经允许不得转载:TI中文支持网 » TMS570LC4357: 二次bootloader对app的.out进行远程升级时,如何将各个section加载至对应的memory中?
分享到: 更多 (0)