求问想把数据存在main flash中要如何操作?!!

2019-07-17 13:08发布

我有一堆比较大的数据想存在flash中,但是info flash太小了,想存在main flash中。
但是同样的程序在info flash中是可以正常写入的,在main flash中却不行了,单片机总是会reset。

求问想把数据存在main flash中要如何操作?!!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
19条回答
jlyuan
1楼-- · 2019-07-17 14:17

可以自己定义存的地址,还要改什么linker文件
jiaxw
2楼-- · 2019-07-17 16:13
这两个是我擦除和写入flash的函数,在info flash内是可以正常执行的。但是在main flash里面调用会reset掉!

void FERASE(U16 address)
{
//_DINT();
U8 *Erase_address ;
Erase_address = (U8 *)address ;
FCTL1 = FWKEY + ERASE ;
FCTL3 = FWKEY ;
*Erase_address = 0 ;
FCTL1 = FWKEY ;
FCTL3 = FWKEY + LOCK ;
//_EINT();
}

void FWRITE(U16 address, U8* data,U16 length)
{
//_DINT();
U16 i ;
U8* Wr_Addr ;
Wr_Addr =(U8*)address ;

FCTL1 = FWKEY + WRT ; // Set WRT bit for write operation
FCTL3 = FWKEY ;
//while(FCTL3 & BUSY);
for(i=0;i<length;i++)
{
*Wr_Addr= data ;
Wr_Addr++ ;
}
FCTL1 = FWKEY ;
FCTL3 = FWKEY + LOCK ;
//while(FCTL3 & BUSY);
//_EINT();
}
heweibig
3楼-- · 2019-07-17 21:26

1. 确保FLASH的目标写入地址没有被程序占用,程序占用FLASH的大小及范围可通过IAR option里生成MAP文件查看。
2. 确保目标地址有效,而不是空地址或保留地址,FLASH地址有错MCU会RESET.
wyjie
4楼-- · 2019-07-17 21:49
 精彩回答 2  元偷偷看……
wuhany
5楼-- · 2019-07-18 02:25
完全可以,本人就是那么用的,但是你要注意范围和页大小,最好做个页起始对齐,存没有这个问题,主要是擦除
jiaxw
6楼-- · 2019-07-18 07:54

哦,请教楼上,430单片机的擦除最小是以段为单位的,那也就按段擦除了?还是?

一周热门 更多>