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的功能
我的设计是:生成两个文件,一个是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是类似的,但这个帖子没有解答
抱歉没弄清楚您的问题。
然后我是否需要手动拷贝数据段到SRAM吗?
不需要。对于.bss .data段是不需要特别手动将其拷贝到SRAM,这些工作提前定义在CMD文件中并由编译器完成。
user guide 链接:
对于.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运行,还是按照原来的分配。