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.
大家好,最近在用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时,是否需要使用不同的内存区域独立开来?
谢谢大家!
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内存划分产生了疑问,因此在此提问,实际运行状态应该是与您的预测是一致的