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.

TMS320F280049C: bootloader和app共用一块RAM区域时,是否会造成内存冲突

Part Number: TMS320F280049C

大家好,最近在用280049开发bootloader,在bootloader中完成程序升级功能,从bootloader跳转至app时,使用asm(" LB 0x00084002")指令,从app跳转至bootloader时,使用看门狗复位芯片。有一些问题想要请教一下大家。

bootloader和app,这两个工程储存在FLASH的两个独立扇区,互不冲突,但是这两个工程都用了同一块RAM内存区域来存放运行过程中的全局变量以及从FLASH复制到RAM的代码(ramfuncs),在这种情况下

1. RAM上会有内存的冲突吗?假如上电后,从bootloader跳转至app后,bootloader中的一些储存在RAM上的全局变量和代码(ramfuncs)是否仍然存在,有没有对app的运行造成影响的可能?

2. 是否需要在跳转前对RAM进行清零?

3. 从bootloader跳转至app后,重新执行c_int00函数构建C语言环境,c_int00函数是否会对RAM(主要是.bss和.ebss段)进行清零操作,保证内存清零后再跳转至app的main()?

4. bootloader和app在使用RAM时,是否需要使用不同的内存区域独立开来?

谢谢大家!

  • 已为您咨询TI资深工程师,一旦得到回复会立刻回复给您

  • 您使用的是 ROM bootloader还是您自己的bootloader?您可以尝试在跳转到应用程序后清除 RAM 并重新初始化堆栈指针。

  • 我用的是自己的bootloader,请问TI有没有提供清除RAM和初始化堆栈指针的库函数

  • 已为您询问TI工程师,稍后给您回复

  • 1. 

    假如上电后,从bootloader跳转至app后,bootloader中的一些储存在RAM上的全局变量和代码(ramfuncs)是否仍然存在,有没有对app的运行造成影响的可能?

    是的,当您从bootloader跳转至app时,如果您没有仔细注意在链接器命令文件中将它们分开并避免冲突/重叠,则可能会发生冲突。但是,当您从bootloader跳转至app时,如果您通过 C 初始化例程(由编译器提供),它将在 RAM 中初始化应用程序所需的任何内容,并在到达 main() 之前初始化 SP。在此过程中,它可能最终会覆盖bootloader先前使用的一些 RAM 区域。这应该不是问题,因为您不会将 LIVE 从app切换回bootloader。当您从bootloader切换到app时,您会发生看门狗重置。

    因此,总而言之,我认为应该不会有问题。问您一个问题——您在实践中观察到什么行为?它与我的预测一致吗?

    2. 

    是否需要在跳转前对RAM进行清零

    基于以上,不需要。

  • 3. 

    从bootloader跳转至app后,重新执行c_int00函数构建C语言环境

    是的,这应该有效。

    4. 

    bootloader和app在使用RAM时,是否需要使用不同的内存区域独立开来?

    仅当您正在进行 LFU(实时固件更新)时。

  • 感谢您的回复,很完整的解答了我的问题,谢谢,我没有在实践中观测到什么现象或行为,只是对现有工程的Memory内存划分产生了疑问,因此在此提问,实际运行状态应该是与您的预测是一致的

  • 不客气,也感谢您的提问