打印
[PIC®/AVR®/dsPIC®产品]

16位pic单片机读内部flash问题

[复制链接]
2444|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
idqiye|  楼主 | 2017-1-6 15:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
[size=10.6667px]关键函数如下:
[size=10.6667px]long int __attribute__((space(prog), aligned(2))) prog_data = 0x333333;
unsigned int lowWord, highWord;
unsigned int tbloffset;
TBLPAG = __builtin_tblpage(&prog_data);
tbloffset = __builtin_tbloffset(&prog_data);
lowWord=__builtin_tblrd1(tbloffset);
highWord=__builtin_tblrdh(tbloffset);

[size=10.6667px]lowWord的内容是3333,但highword为什么是0
[size=10.6667px]而且highword怎么写进去想要的数值。有这么用过的没?


沙发
XIEYUANBIN| | 2017-1-6 18:14 | 只看该作者
高字是指令,所以一般数据都写在低字中。如果你一定要写入高字,需要用到特殊的高字表写指令。目前貌似还只能用汇编

使用特权

评论回复
板凳
idqiye|  楼主 | 2017-1-8 12:56 | 只看该作者
XIEYUANBIN 发表于 2017-1-6 18:14
高字是指令,所以一般数据都写在低字中。如果你一定要写入高字,需要用到特殊的高字表写指令。目前貌似还只 ...

您好,再请教你一下,假如我要修改flash内的一个字,除了正常的解锁修改字之前,是不是先进行一下擦除操作,而且貌似不能单独擦除一个字,只能一页一页的擦除?

使用特权

评论回复
地板
XIEYUANBIN| | 2017-1-9 12:40 | 只看该作者
idqiye 发表于 2017-1-8 12:56
您好,再请教你一下,假如我要修改flash内的一个字,除了正常的解锁修改字之前,是不是先进行一下擦除操 ...

是的,所以在擦写某个字之前,需要把整块度出来放到RAM里,然后擦除,再修改RAM内容,再写入FLASH,这个在数据手册中都有详细说明

使用特权

评论回复
5
XIEYUANBIN| | 2017-1-9 12:40 | 只看该作者
idqiye 发表于 2017-1-8 12:56
您好,再请教你一下,假如我要修改flash内的一个字,除了正常的解锁修改字之前,是不是先进行一下擦除操 ...

是的,所以在擦写某个字之前,需要把整块读出来放到RAM里,然后擦除,再修改RAM内容,再写入FLASH,这个在数据手册中都有详细说明

使用特权

评论回复
6
idqiye|  楼主 | 2017-1-9 15:42 | 只看该作者
XIEYUANBIN 发表于 2017-1-9 12:40
是的,所以在擦写某个字之前,需要把整块读出来放到RAM里,然后擦除,再修改RAM内容,再写入FLASH,这个在 ...

还真是这么费劲额

使用特权

评论回复
7
XIEYUANBIN| | 2017-1-15 16:52 | 只看该作者
idqiye 发表于 2017-1-9 15:42
还真是这么费劲额

不是EEPROM,所以要麻烦些,所有FLASH都是这么搞的

使用特权

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

本版积分规则

61

主题

346

帖子

3

粉丝