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.

关于28335FLASH程序 上电搬移到RAM



在看例程和Tim Love 写的文档时有几个疑问。1: 烧写在flash中的程序上电后是不是既可以部分搬移到RAM中运行又可以全部搬移到RAM中运行:?2:如果是这样的话,当使用FLASH_API的时候,是不是操作就不一样了呢?:3:上电后程序全部搬移到RAM里运行的时候还可以使用FLASH_API吗?

希望您能够点拨我的疑惑,非常感谢您百忙之中阅读和回答我的问题。

  • tanson

    1: 烧写在flash中的程序上电后是不是既可以部分搬移到RAM中运行又可以全部搬移到RAM中运行:?

    是的,如果你要把某些函数搬到Flash运行,参考initflash函数的做法,如果要把所有的代码都搬到ram中,可以对整个.text进行操作,不过RAM没有那么多空间。

    2:如果是这样的话,当使用FLASH_API的时候,是不是操作就不一样了呢?

    FLASH API的操作都是一样的,确定搬到RAM,才能调用。

    3:上电后程序全部搬移到RAM里运行的时候还可以使用FLASH_API吗?

    可以,所有对FLASH操作的代码都必须运行在RAM。

    Eric

     

     

  • 非常感谢您的耐心作答,帮助我解除了迷惑。还有一个问题请教您:

    假设我把所有程序上电都搬移到RAM中运行,是不是ramfuncs段全都换成text段?

    一些将函数映射到ramfuncs段的操作就不需要做了?

    还有无论程序运行在flash里还是RAM 里当接到指令需要调用FLASH_API函数的时候都要将全局中断关掉?

    再次致谢!

  • tanson,

    假设我把所有程序上电都搬移到RAM中运行,是不是ramfuncs段全都换成text段?

    一些将函数映射到ramfuncs段的操作就不需要做了?

    你说的对,只要把.text段按照ramfuncs设置就可以把整个.text段也就是所有的代码都加载在flash,但是跑在RAM,但你要保证RAM的空间够用。

    还有无论程序运行在flash里还是RAM 里当接到指令需要调用FLASH_API函数的时候都要将全局中断关掉?

    在你调用FLASH API进行擦除,烧写的时候,我建议关掉全局中断,即禁止所有中断,等flash操作完再打开。当然,在FLASH API操作的过程中,有一个阶段是可以接收中断的,你需要读FLASH API的指导手册。但如没有特殊中断要求,还是关掉比较方便。

    Eric

     

  • Hi,Eric

         我还想请教一下,当连接仿真器的时候程序就是在RAM里运行的,那是不是说明把程序全部从FLASH搬移RAM的时候,RAM 的空间是够用的呢?

  • tanson

    TI的许多例程确实都是运行在RAM中进行仿真,因为程序比较小,所以在RAM仿真没问题,但如果程序较大,超过RAM的存储范围,那就还是需要下载到flash中。

    你看一下你工程编译后的.map文件,看一下其中的.text段有多大,RAM区域能不能cover过来,如果能,就可以。

    Eric

  • Eric

          非常感谢您的悉心指导,让我把这个问题理解透彻了。

                                                                                  thanks

  • 怎么计算呢 ?如果是  

    .text      0    00008a02    00003e59 

    那么是 0x3e59 大小?

  • Wan

    下图是.MAP文件的截图,可以从上面看到每个存储块的起始地址origin, 长度Length, 使用了多少used,还剩下多少unused.

    那么关于代码段.text  0  00008a02是它的起始地址,   00003e59是它使用了多少个字。