烽火社区

标题: 430单片机的flash 写操作 [打印本页]

作者: suenzhan    时间: 2015-8-24 10:04 AM
标题: 430单片机的flash 写操作
当我用串口软件向430单片机flash中写入10时(假设理解成10秒钟),然后再把10从flash中取出来。但问题出现了,按理说写入flash的数据10两个字节应该被写入0x1080和0x1081两个地址了,读出数据也是从0x1080开始读出,但现在我的目的是:比如我把10要写到flash segA的0x1080-0x1085这6个地址,没有数据的地址写0,但要保证读出来的数据就是10,请问该怎么写入

作者: 回复用户1    时间: 2015-8-24 10:04 AM
串口发送过去的应该是字符串,需要转换成数据,这个你可以验证下是否是这样的;如果你要存500这个数的话,这个已经是两个字节了,一个地址只能存一个字节,所以,500这个数是不能直接存的,需要转化成16进制数,分高8位,低8位存。
作者: 吴正清    时间: 2015-8-24 10:30 AM

10是1个字节,没有说明编译器认为10是十进制数,把10要写到flash segA的0x1080-0x1085这6个地址,可以用数组,例如,uint8_t test_buffer[6] = {10,0,0,0,0,0};

写入可以用指针,类似这样:

for ( uint8_t i = 0; i < 6; i++)

{

*flash_ptr++ = *test_buffer++;

}

写入函数可以这样:void flash_writebuf(uint8_t *flash_ptr,uint8_t *buffer,uint8_t len);


作者: simaqingshan    时间: 2015-8-24 10:58 AM

起始我也是这么写的

for (i=0; i<6; i++)

    {
        *Flash_ptr++ = value;                   // Write value to flash
    }

比如我让led亮十秒,问题是这样我用串口助手发10读出来的数不是10,只有我发000010时,读出来就是10秒,led也能亮10秒;这样是不是说,当我发送10给单片机,单片机存储到1080-1085这六个地址中是不能实现的,因为这样的话相当于1080=0 1081=0....1084=1 1085=0,读出来的数据就是000010了,因为这个数我可以随时更改比如100,或者1000都可以,就变成000100,0010000了
作者: liulanhuikathy    时间: 2015-8-24 11:20 AM

data=(unsigned char *)0x1080;

for(i=0;i<6;i++)

 {
   
   WorkTimeptr=*data++;
 }
 

 WorkTime=string_to_int(WorkTimeptr);

这是读出来的函数,读出来不就不等于10了吗


作者: 杨1008    时间: 2015-8-24 10:41 PM

如果发500的话,接收到的应该是'5','0','0',这个我也不确定,实践出真知,试试就知道;

如果1个Flash地址只能存8位的话,当要存储500这个十进制数到FLASH仍然需要两个地址空间。






欢迎光临 烽火社区 (http://bbs.cnecport.com/) Powered by Discuz! X3.2