查看: 2439|回复: 3

[求助] 如何在mcf52221的内置flash里面进行数据存储?

[复制链接]

该用户从未签到

6

主题

16

帖子

0

新手上路

Rank: 1

积分
52
最后登录
1970-1-1
发表于 2013-10-12 21:33:12 | 显示全部楼层 |阅读模式
 不是将程序烧写到flash里面,想实现一个功能,每次程序都从芯片某一地址读数据,然后程序运行过程中,会实时更新这个地址的数据,
下一次上电从这个地址读取的数据是最近一次写入的数据。
比如
int *g_pStore = (int *)0x00010000;
main.c
int main(void)
{
  int a = g_pStore[0];
  '''''''''''''
  '''''''''''''
  '''''''''''''
}
file.c
void file(void)
{
  g_pStore[0] = 5;
}
程序每次执行到g_pStore[0] = 5就会死掉,请问什么原因。。
谢谢大伙了。。
我知道答案 目前已有2人回答
回复

使用道具 举报

  • TA的每日心情
    难过
    2021-12-15 16:01
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2013-10-16 15:51:26 | 显示全部楼层

    RE:如何在mcf52221的内置flash里面进行数据存储?

    FLASH不能这样操作。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    6

    主题

    16

    帖子

    0

    新手上路

    Rank: 1

    积分
    52
    最后登录
    1970-1-1
     楼主| 发表于 2013-10-17 09:26:27 | 显示全部楼层

    回复:如何在mcf52221的内置flash里面进行数据存储?

    回复第 2 楼 于2013-10-16 15:51:26发表:
    FLASH不能这样操作。
     
     
    谢谢安大的回复,我后来看了,是需要专门在CFM模块里面以命令的形式写进去。。
    但是按照MCF52223RM上操作时,发现总是写入不成功。这是我的代码,系统时钟是48MHz,g_pStore是指向0x0001e000的指针。代码如下:
    MCF_CFM_CFMPROT = 0;
        MCF_CFM_CFMSACC = 0;
        MCF_CFM_CFMDACC = 0;
         if(0 == (MCF_CFM_CFMCLKD & 0X80))  //CFM时钟可设置
        {
            RELAY_LED_OFF;
                MCF_CFM_CFMCLKD = 0X4E;
        }
       for(i = 0; i> code


            .data : AT(___ROM_AT) 
            {  
                    ___DATA_RAM = .;
                    . = ALIGN(0x4);
                    *(.exception)       
                    . = ALIGN(0x4);       
                    __exception_table_start__ = .;
                    EXCEPTION
                    __exception_table_end__ = .;
                   
                    ___sinit__ = .;
                STATICINIT
                    __START_DATA = .;


                    *(.data)
                    . = ALIGN (0x4);
                    __END_DATA = .;


                    __START_SDATA = .;
                    *(.sdata)
                    . = ALIGN (0x4);
                    __END_SDATA = .;


                    ___DATA_END = .;
                    __SDA_BASE = .;
                    . = ALIGN (0x4);
            } >> userram


            .bss :
            {
                    ___BSS_START = .;
                    __START_SBSS = .;
                    *(.sbss)
                    . = ALIGN (0x4);
                    *(SCOMMON)
                    __END_SBSS = .;


                    __START_BSS = .;
                    *(.bss)
                    . = ALIGN (0x4);
                    *(COMMON)
                    __END_BSS = .;
                    ___BSS_END = .;


                    . = ALIGN(0x4);
            } >> userram


            .custom :
            {
                    ___HEAP_START        = .;
                    ___heap_addr        = ___HEAP_START;
                    ___HEAP_END                = ___HEAP_START + ___heap_size;
                    ___SP_END                = ___HEAP_END;
                    ___SP_INIT                = ___SP_END + ___stack_size;


                    . = ALIGN (0x4);
            } >> userram
             
            ___VECTOR_RAM                = ADDR(.vectorram);
           
            __SP_INIT                = ___SP_INIT;
            ___mem_limit = ___HEAP_END;
            ___stack_safety = 16;


            _romp_at = ___ROM_AT + SIZEOF(.data);
            .romp : AT(_romp_at)
            {
                    __S_romp = _romp_at;
                    WRITEW(___ROM_AT);
                    WRITEW(ADDR(.data));
                    WRITEW(SIZEOF(.data));
                    WRITEW(0);
                    WRITEW(0);
                    WRITEW(0);
            }


    }

     
       
     
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    6

    主题

    16

    帖子

    0

    新手上路

    Rank: 1

    积分
    52
    最后登录
    1970-1-1
     楼主| 发表于 2013-10-17 09:27:18 | 显示全部楼层

    回复:如何在mcf52221的内置flash里面进行数据存储?

    回复第 3 楼 于2013-10-17 09:26:27发表:
    回复第 2 楼 于2013-10-16 15:51:26发表:
    FLASH不能这样操作。
     
     
    谢谢安大的回复,我后来看了,是需要专门在CFM模块里面以命令的形式写进去。。
    但是按照MCF52223RM上操作时,发现总是写入不成功,不知道是不是还有什么地方没有考虑到。这是我的代码,系统时钟是48MHz,g_pStore是指向0x0001e000的指针。代码如下:
    MCF_CFM_CFMPROT = 0;
        MCF_CFM_CFMSACC = 0;
        MCF_CFM_CFMDACC = 0;
         if(0 == (MCF_CFM_CFMCLKD & 0X80))  //CFM时钟可设置
        {
            RELAY_LED_OFF;
                MCF_CFM_CFMCLKD = 0X4E;
        }
       for(i = 0; i> code


            .data : AT(___ROM_AT) 
            {  
                    ___DATA_RAM = .;
                    . = ALIGN(0x4);
                    *(.exception)       
                    . = ALIGN(0x4);       
                    __exception_table_start__ = .;
                    EXCEPTION
                    __exception_table_end__ = .;
                   
                    ___sinit__ = .;
                STATICINIT
                    __START_DATA = .;


                    *(.data)
                    . = ALIGN (0x4);
                    __END_DATA = .;


                    __START_SDATA = .;
                    *(.sdata)
                    . = ALIGN (0x4);
                    __END_SDATA = .;


                    ___DATA_END = .;
                    __SDA_BASE = .;
                    . = ALIGN (0x4);
            } >> userram


            .bss :
            {
                    ___BSS_START = .;
                    __START_SBSS = .;
                    *(.sbss)
                    . = ALIGN (0x4);
                    *(SCOMMON)
                    __END_SBSS = .;


                    __START_BSS = .;
                    *(.bss)
                    . = ALIGN (0x4);
                    *(COMMON)
                    __END_BSS = .;
                    ___BSS_END = .;


                    . = ALIGN(0x4);
            } >> userram


            .custom :
            {
                    ___HEAP_START        = .;
                    ___heap_addr        = ___HEAP_START;
                    ___HEAP_END                = ___HEAP_START + ___heap_size;
                    ___SP_END                = ___HEAP_END;
                    ___SP_INIT                = ___SP_END + ___stack_size;


                    . = ALIGN (0x4);
            } >> userram
             
            ___VECTOR_RAM                = ADDR(.vectorram);
           
            __SP_INIT                = ___SP_INIT;
            ___mem_limit = ___HEAP_END;
            ___stack_safety = 16;


            _romp_at = ___ROM_AT + SIZEOF(.data);
            .romp : AT(_romp_at)
            {
                    __S_romp = _romp_at;
                    WRITEW(___ROM_AT);
                    WRITEW(ADDR(.data));
                    WRITEW(SIZEOF(.data));
                    WRITEW(0);
                    WRITEW(0);
                    WRITEW(0);
            }


    }

     
       

     
     
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-7-19 20:17 , Processed in 0.092399 second(s), 24 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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