查看: 3732|回复: 7

[其他] [求大哥们指导]关于Flash擦写

[复制链接]

该用户从未签到

1

主题

25

帖子

0

新手上路

Rank: 1

积分
30
最后登录
1970-1-1
发表于 2011-7-7 16:12:25 | 显示全部楼层 |阅读模式
以下是我大概程序:
//突发模式连续写
void flash_burst(uchar data[],uint des_addr,uchar num){
  if(FSTAT&0x10){
    FSTAT|=0x10;
  }
 
  while(num--)
  {
    while(!(FSTAT&0x80)) ;
    *((char *)(des_addr++))= *data;
    data++;
    FCMD=0x25;
    FSTAT|=0x80;
    asm{
    NOP
    NOP
    NOP
    NOP
    }
    if(FSTAT&0x10){
    FSTAT|=0x10;
    } 
  }
 
while((FSTAT&0x40)==0);
}
在main()函数里面调用单步执行即可实现flash指定地址写入一组数组,
全速的时候会出现问题,好像应该是要放到RAM里面去执行这个函数。
   我想的是写一个CopyInRAM()函数,将burst_flash机器码拷贝到RAM中,然后定义一个函数指针指向RAM地址,在main函数里调用函数指针
 
uchar *srcadr;
srcadr = (uchar*)&flash_burst;
此处赋值时会出现警告;
 
假定拷贝的RAM地址为0x0800
定义一个函数指针指到这个地址
void (*fun)(uchar *,uint,uchar) = 0x0800;
会报错!
我知道答案 目前已有6人回答
回复

使用道具 举报

该用户从未签到

1

主题

25

帖子

0

新手上路

Rank: 1

积分
30
最后登录
1970-1-1
 楼主| 发表于 2011-7-7 16:16:36 | 显示全部楼层

回复:[求大哥们指导]关于Flash擦写

关于可行的将函数放到RAM中运行的方法请大家能给小弟点指导,希望能够详细点……新手上路请高手多多关照哈
  • TA的每日心情
    难过
    2021-12-15 16:01
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2011-7-8 15:18:50 | 显示全部楼层

    RE:[求大哥们指导]关于Flash擦写

    不用这样写,你直接在
    prm文件中定义ROMDATA     =  READ_ONLY    0xE000 TO 0xE3FF;
    然后在你的.c文件中,函数以前加:
    #pragma CONST_SEG ROMDATA     
    这样在使用函数时,自动跳转到RAM中执行了。
    该会员没有填写今日想说内容.

    该用户从未签到

    27

    主题

    418

    帖子

    0

    新手上路

    Rank: 1

    积分
    228
    最后登录
    1970-1-1
    发表于 2011-7-8 15:44:17 | 显示全部楼层

    回复:[求大哥们指导]关于Flash擦写

    回复第 3 楼 安于2011-07-08 07:18:50发表:
    不用这样写,你直接在
    prm文件中定义ROMDATA = READ_ONLY 0xE000 TO 0xE3FF;
    然后在你的.c文件中,函数以前加:
    #pragma CONST_SEG ROMDATA
    这样在使用函数时,自动跳转到RAM中执行了。
     

    不懂,求解释,请问有没有专门讲pragma使用的手册或资料,对这个比较迷糊
  • TA的每日心情
    难过
    2021-12-15 16:01
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2011-7-8 16:59:52 | 显示全部楼层

    RE:[求大哥们指导]关于Flash擦写

    我找找,看看有没有。
    该会员没有填写今日想说内容.

    该用户从未签到

    1

    主题

    25

    帖子

    0

    新手上路

    Rank: 1

    积分
    30
    最后登录
    1970-1-1
     楼主| 发表于 2011-7-11 09:28:32 | 显示全部楼层

    回复:[求大哥们指导]关于Flash擦写

    回复第 3 楼 安于2011-07-08 07:18:50发表:
    不用这样写,你直接在
    prm文件中定义ROMDATA = READ_ONLY 0xE000 TO 0xE3FF;
    然后在你的.c文件中,函数以前加:
    #pragma CONST_SEG ROMDATA
    这样在使用函数时,自动跳转到RAM中执行了。
     
     
     
     
    多谢版主,不过我还是不怎么明白啊,我用的是DZ60的片子,定位函数不是CODE_SEG么?怎么用#pragma CONST_SEG ROMDATA 定位数据存储地址呢?我默认的函数应该是存放在DEFAULT_ROM中的吧,版主的意思是在指定ROM中存储函数么?那怎么会调用的时候自动就转到RAM中执行了呢?求解释
     

    该用户从未签到

    1

    主题

    25

    帖子

    0

    新手上路

    Rank: 1

    积分
    30
    最后登录
    1970-1-1
     楼主| 发表于 2011-7-11 09:57:35 | 显示全部楼层

    回复:[求大哥们指导]关于Flash擦写

    回复第 3 楼 安于2011-07-08 07:18:50发表:
    不用这样写,你直接在
    prm文件中定义ROMDATA = READ_ONLY 0xE000 TO 0xE3FF;
    然后在你的.c文件中,函数以前加:
    #pragma CONST_SEG ROMDATA
    这样在使用函数时,自动跳转到RAM中执行了。
     

     
    另外,再请教一下版主,在codewarrior中函数指针是怎么使用的呢?

    该用户从未签到

    4

    主题

    42

    帖子

    0

    注册会员

    Rank: 2

    积分
    108
    最后登录
    1970-1-1
    发表于 2014-1-10 10:08:44 | 显示全部楼层

    回复:[求大哥们指导]关于Flash擦写

    回复第 3 楼 于2011-07-08 15:18:50发表:
    不用这样写,你直接在
    prm文件中定义ROMDATA     =  READ_ONLY    0xE000 TO 0xE3FF;
    然后在你的.c文件中,函数以前加:
    #pragma CONST_SEG ROMDATA     
    这样在使用函数时,自动跳转到RAM中执行了。
     
    我也试过这个,但是擦写FLASH不成功,什么回事??设了breakpoint证明有运行到该子程序的结尾,也可以看到是在RAM地址中运行,但是就是擦不成功,擦除FLASH程序是正确的,我把整个main函数都放在RAM中运行时是可以擦除的,求解
     
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-21 00:21 , Processed in 0.098821 second(s), 28 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表