打印

关于c8051f340单片机内部flash当eeprom使用的问题

[复制链接]
1857|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xbyu520|  楼主 | 2014-2-16 15:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 xbyu520 于 2014-2-16 15:37 编辑

这个是新华龙网站下载的参考代码。
// FLASH_ByteRead
////
// Return Value :
//   1)  unsigned char  - byte that was read from Flash
// Parameters   :
//   1)  FLADDR addr    - target address to write to
//                        range is 0 to (FLASH_TEMP-1)
//
// This routine reads a <byte> from the linear FLASH address <addr>.
//
//
unsigned char FLASH_ByteRead (FLADDR addr)
{
   bit EA_SAVE = EA;                   // Preserve EA
   char code * data pread;             // FLASH read pointer
   unsigned char byte;
   EA = 0;                             // Disable interrupts
   pread = (char code *) addr;
   byte = *pread;                      // Read the byte
   EA = EA_SAVE;                       // Restore interrupts
   return byte;
}



相关帖子

沙发
xbyu520|  楼主 | 2014-2-16 15:36 | 只看该作者
pread = (char code *) addr;这条语句为什么要加括号?哪位坛友知道的?
char code * data pread;这条语句相当于只是定义了指针变量data pread,为什么定义成char,这样不是只能寻址256个字节吗?实际上c8051f340内部flash 64K   

使用特权

评论回复
板凳
xbyu520|  楼主 | 2014-2-16 15:45 | 只看该作者
大家来讨论讨论。谢谢各位了

使用特权

评论回复
地板
ningling_21| | 2014-2-16 15:55 | 只看该作者
本帖最后由 ningling_21 于 2014-2-16 15:58 编辑
xbyu520 发表于 2014-2-16 15:36
pread = (char code *) addr;这条语句为什么要加括号?哪位坛友知道的?
char code * data pread;这条语句 ...

加括号是 强制类型转换,指向ROM空间也就是FLASH空间...

另,定义成char 并不代表只能寻址256个字节范围,只是说它指向的空间存储的内容是char 的数据类型而已...

使用特权

评论回复
5
xbyu520|  楼主 | 2014-2-16 16:05 | 只看该作者
哦,原来是这样

使用特权

评论回复
6
xbyu520|  楼主 | 2014-2-16 16:22 | 只看该作者
unsigned char FLASH_ByteRead (FLADDR addr)   函数参数addr类型怎么写FLADDR ????

使用特权

评论回复
7
ningling_21| | 2014-2-16 16:25 | 只看该作者
FLADDR只是一个宏定义而已...
应该是一个16位的地址.

使用特权

评论回复
8
yhn1973| | 2014-2-16 16:39 | 只看该作者
整太复杂了,只要一条就够了: return CBYTE[addr];,读不需要关中断

使用特权

评论回复
9
kz_zank| | 2014-2-17 10:38 | 只看该作者
pread = (char code *) addr;
byte = *pread;
等效于byte =  *(uchar code *)addr,addr转化为指向ROM的uchar型变量的指针,即它指向的数是uchar型的,但其本身作为一个地址是uint型的。

使用特权

评论回复
10
kz_zank| | 2014-2-17 10:42 | 只看该作者
xbyu520 发表于 2014-2-16 16:22
unsigned char FLASH_ByteRead (FLADDR addr)   函数参数addr类型怎么写FLADDR ????

没记错的话  #typedef UINT FLADDR  这个是FLADDR的类型

使用特权

评论回复
11
popeye021| | 2014-2-17 12:18 | 只看该作者
可以模拟eeprom写吗?有例程吗?

使用特权

评论回复
12
Harvard| | 2014-2-17 12:29 | 只看该作者
本帖最后由 Harvard 于 2014-2-17 12:31 编辑

an009 从应用程序写flash.pdf (1.32 MB)



e-an201C8051Fxx全系列固件程序写FLASH原程序.pdf (1.27 MB)

有点   官方有个例程 和说明

使用特权

评论回复
13
xbyu520|  楼主 | 2014-2-18 08:56 | 只看该作者
谢谢各位朋友,我再试验一下!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:工作不养闲人,团队不养懒人。赚不到钱赚知识,赚不到知识赚经历,赚不到经历赚阅历,让人迷茫的原因只有一

43

主题

853

帖子

5

粉丝