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

这样做,为什么不能在指定的FLASH地址写数据

这样做,为什么不能在指定的FLASH地址写数据

unsigned long int flash_addr=0xFCA000;
*(volatile unsigned long int *)flash_addr= 0x8899;

结果0xFCA000处仍是0xFF。 9S12XDT512,BANKED模式

const unsigned int myvalue @0x4000 = 0x55AA;

我在xep100上是这么写的,没什么问题。

试试按分页的方式来写一下FLASH,另外,查看地址的时候,默认的是逻辑地址"0xFCA000'L",你可以到"0xFCA000'G"看一下

但是我想往任意指定的FLASH地址写入数据,能使用指针的话是最方便的。我不可能每写一个数据都要定义一个变量再指定一个地址吧。

如果要写连续区域的数据的话,就用数组,FLASH的数据应该是在烧写的时候就定死了的。

const U16 myTable[128] @0x4003 =
{/* 0 -- */ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
/* 8 -- */ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
/* 16 -- */ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
/* 24 -- */ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
/* 32 -- */ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
/* 40 -- */ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
/* 48 -- */ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
/* 56 -- */ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
/* 64 -- */ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
/* 72 -- */ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
/* 80 -- */ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
/* 88 -- */ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
/* 96 -- */ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
/* 104 -- */ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
/* 112 -- */ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
/* 120 -- */ 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u, 0x0000u,
};

但是那样只能定义一个数组,并在初始化的时候将值写入。可我需要经常修改FLASH的值又该怎么做?
要在程序运行时修改FLASH,必须按照FLASH擦写操作的步骤进行操作。
海纳百川  有容乃大
返回列表