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.

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段是冗余的?

期待您的回答!谢谢!

  • 你好,

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

    是的。

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

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

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

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

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

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

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

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

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

  • 抱歉没弄清楚您的问题。

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

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

    user guide 链接:

    www.ti.com/.../spnu151w.pdf

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

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

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

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

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

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