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

QG8_C语言FLASH程序能檫不能写[求助、谢谢]

QG8_C语言FLASH程序能檫不能写[求助、谢谢]

我将论坛中版主用处理器专家intFLASH模块为AW60产生的IFlash1.c与IFsh1.h文件加入我用CW5.0处理器专家建立的QG8项目中进行编译无错误。然后在用户模块中调用函数做实验,使用USB——multilink调试器进行调试:
处理器专家为初始化设置,CPU为高速4M内部振荡,未加入Init_FLASH模块。
实验一:在线调试
byte fanhui;word aa;
aa=*(volatile char *)0xe000;
IFsh1_Init();fanhui=IFsh1_EraseSector(0xe000);
在CW的DEBUG界面中看到aa读数正确,0xe00块檫除成功。
实验二:在线调试debug,未在函数上设置断点。(也试过release后运行)
byte fanhui;word aa;
fanhui=IFsh1_SetByteFlash(0xf000,0x00);
aa=*(volatile char *)0xf000;
在CW的DEBUG界面调试时说SP超出允许范围。在将FLASH中程序转移到RAM时,如下:
FnBurstProgCmdInRamStruct FnBurstProgCmdInRam=*(FnBurstProgCmdInRamStruct *)(FnBurstProgCmdInRam_); /* Copy function into the stack */
我尝试将IFlash1.c中程序存储长度110改为60,如下
typedef struct {
unsigned char code[60];//[110]; /* Structure required to copy code to ram memory */
/* Size of this structure needs to be at least (but best) the size of the FnBurstProgCmdInRam_ */
} FnBurstProgCmdInRamStruct;
这里是因为AW60与QG8页长度不同的原因吗?这样改影响单字节写吗?
改后,程序可以正常运行,fanhui=IFsh1_SetByteFlash(0xf000,0x00);返回值为0。
但aa=*(volatile char *)0xf000;返回值始终为0xff.
请问是怎么的呀?
版主能不能用CW处理器专家帮忙生成代码看看?我的CW是45天无代码限制版,INTFLASH模块没有授权,用不了,谢谢了!
110应该不可以改,这个是把程序放到RAM里面跑的RAM空间。
试着堆栈空间开大一些,另外,你怎么没有初始化,要设定的flash烧写的时钟频率的。

[此贴子已经被seuafu2005于2007-2-8 10:09:59编辑过]

我上传了一个PE生成的QG8的FLASH操作的project供你参考:

http://bbs.eccn.com/uploadImages/QG8_PE.rar
海纳百川  有容乃大
非常感谢两位版主!!问题解决了.
我对比了处理器专家为QG8与AW60生成的代码,除了过滤无效地址,其它代码都一样.qg8代码中在RAM中运行的程序还是需要110长RAM,将CPUbean中buildoptions的Stack size由0x0040改为0x00a0后
IFsh1_Init();
fanhui=IFsh1_SetByteFlash(0xf000,0xab);
fanhui=IFsh1_GetByteFlash(0xf000,&aa);
返回aa值为0xab.说明flash读写正常.
还有就是要在用户模块中包含#include "IFsh1.h",否则make会成功,仿真时写flash函数参数会传递错误,导致错误地址过滤,不会对flash写入.
调用以上参数后,就无法进行全软件仿真了.会返回:
Error: At location 6025 -
Error: Attempt to execute from unimplemented (--) ROM.
STARTED
RUNNING
An Illegal address error caused a RESET.

收到了 但是打开的时候什么也没有 是咱们用的软件版本不一样吗

我怎么也没用面白,我这个软件怎么就不能生成INTflash呢?》??
返回列表