首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

请大家帮我看看我这个操作FLASH的代码有什么问题

首先谢谢luojun2005,按照你说的方法,程序运行正常了!

只是const INT8U P[18] 应该改为INT8U P[18],因为const是定义FLASH的,而这里应该把数组定义到RAM中吧

也就是说将对FLASH读写的操作代码放到RAM中去执行。但是我不明白为什么会有这种情况出现,FLASH读写的特殊性在芯片的文档里有提到过吗?这算不算是CW的一个BUG呢?

在对一个FLASH块进行擦写操作时,程序不能同时又在这个块中运行,这在数据手册中是有说明的。
海纳百川  有容乃大

《嵌入式系统--使用HCS12微控制器的设计与应用》

Flash在线编程时提供一下两种方案:

1 将擦除与写入程序放在包含要擦/写区域的Flash块中,这样进行擦/写操作时,擦/写程序就可以直接在Flash中运行,不需要移到RAM中运行。

2 将擦除与写入程序放在包含要擦/写区域的Flash块中,这样进行擦/写操作时,擦/写程序不能直接在Flash中运行,需要移到RAM中运行。

我的问题是,对于XEP100系列的单片机,是不是在操作FLASH时也必须按以上方案来执行?

但是我是把对FLASH操作的代码放在NON_BANKED块的,而要操作的FLASH地址(0xFA8800)与操作代码并不在同一个FLASH块啊!

这里的块应该是指BLOCK,不是指PAGE,不过不知道哪些PAGE是划分在BLOCK0,哪些是划分在BLOCK1中的,这个数据手册上我还没找到。

QUOTE:
以下是引用fayefayehoo在2008-10-7 9:27:00的发言:

这里的块应该是指BLOCK,不是指PAGE,不过不知道哪些PAGE是划分在BLOCK0,哪些是划分在BLOCK1中的,这个数据手册上我还没找到。

对啊,我只在文档上看到过分成4个BLOCK,但是具体怎么划分的就不知道了!

把代码数组改了半天,终于在XEP100上面也能正常编程FLASH了

const U08 P[18] = { 0x18, 0x0B, 0x80, 0x01, 0x06, 0xF6, 0x01, 0x06, 0x87, 0x87, 0xC4, 0x80, 0x8C, 0x00, 0x00, 0x27, 0xF4, 0x3D };

[此贴子已经被作者于2008-10-7 16:28:22编辑过]

收益颇多啊,我现在正在写这方面代码

与楼上同感,学习了。
谢谢·~~~~~~~~~~~~~~
返回列表