2018-11-23 14:47:04
评论
提交评论
您好,
的确,Flash API 函数的调用必须在 RAM 中执行。对于 Flash API 函数具体的调用方法,可以参考 ControlSUITE 中其他型号的示例代码,例如 flash_f28069 ;主要有以下几个步骤:
(1)在 .cmd 文件中定义代码搬移的相应区域:
(2)定义函数 Example_CallFlashAPI(),其中包含 Flash API 操作;将其地址空间定义在 ramfuncs 中:
(3)在 main() 中调用 Example_CallFlashAPI() 函数之前,需要先执行代码搬移函数,将在 ramfuncs 中定义的代码从 Flash 搬移到 RAM 中,此时Example_CallFlashAPI() 才真正被搬移至 RAM 中:
(4)最后,执行 Example_CallFlashAPI() 函数,在其中调用相应的 Flash API 函数:
请参考示例代码,对比您工程中的相应操作是否一致?
2018-11-23 15:05:29
评论
提交评论
If a post answers your question, please mark it with the "verify answer" button.
2018-11-23 15:19:56
评论
提交评论
感谢回复,以上的(1)(2)(3)(4)都测试过, 当擦写 编程自定义的一块flash时没有问题,这几段flash没有存储任何代码和数据,说明flash api的调用应该没有问题。
但是当擦写 编程 代码段的flash时,没有成功,怀疑的原因有以下: ①因为是在一个flash函数里面调用了 ramfunc 来编程,擦除调用函数本身是否属于违法操作 ②falsh的编程需要 配置PLL以及cpu scaltor,和call back ptr,这些都是全局变量,flash的编程是否需要将这些数据也copy到 ram中去,这种在代码如何实现?
2018-11-23 15:30:08
评论
提交评论
通常的做法 -- 对于需要在线擦除并编程:
将实现该功能的代码(也即你现在调用FlashAPI的代码,通常称为用户bootloader),放在一个flash sector,运行时全部copy到RAM运行,包括初始化函数,通讯传输数据的代码,memcpy函数等都不要在flash上运行,使用的变量不要与应用程序的放在一起。
自己的应用程序放在剩下的其它flash sector,可由用户bootloader任意操作。
对比一下上面提到的文档参考看看吧。
If a post answers your question, please mark it with the "verify answer" button.
2018-11-23 15:40:32
评