[PIC®/AVR®/dsPIC®产品] 16位pic单片机读内部flash问题

[复制链接]
3248|6
 楼主| idqiye 发表于 2017-1-6 15:08 | 显示全部楼层 |阅读模式
关键函数如下:
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);

lowWord的内容是3333,但highword为什么是0
而且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,这个在数据手册中都有详细说明
XIEYUANBIN 发表于 2017-1-9 12:40 | 显示全部楼层
idqiye 发表于 2017-1-8 12:56
您好,再请教你一下,假如我要修改flash内的一个字,除了正常的解锁修改字之前,是不是先进行一下擦除操 ...

是的,所以在擦写某个字之前,需要把整块读出来放到RAM里,然后擦除,再修改RAM内容,再写入FLASH,这个在数据手册中都有详细说明
 楼主| idqiye 发表于 2017-1-9 15:42 | 显示全部楼层
XIEYUANBIN 发表于 2017-1-9 12:40
是的,所以在擦写某个字之前,需要把整块读出来放到RAM里,然后擦除,再修改RAM内容,再写入FLASH,这个在 ...

还真是这么费劲额
XIEYUANBIN 发表于 2017-1-15 16:52 | 显示全部楼层
idqiye 发表于 2017-1-9 15:42
还真是这么费劲额

不是EEPROM,所以要麻烦些,所有FLASH都是这么搞的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

61

主题

346

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部