修复单页指针存储边界bug
diff --git a/supwisdom/sp_flash.c b/supwisdom/sp_flash.c
index 0788aed..032f7b6 100644
--- a/supwisdom/sp_flash.c
+++ b/supwisdom/sp_flash.c
@@ -32,35 +32,26 @@
**/
uint16 sp_flash_page_read(uint32 addr,uint8 buf[],uint32 len)
{
- uint32 i;
- uint32 offset = 0;
- uint8 temp[128];
+ uint32 offset;
+ uint8 temp[256];
if(len > sizeof(temp))
{
+ memset(buf,0,len);
return 1;
}
-
+
+ offset = 0;
while(1)
{
- i = 0;
+ memset(temp,0,sizeof temp);
sp_flash_read(addr +offset,temp, len);
- while(i < len)
- {
- if(0xFF == temp[i])
- {
- ++i;
- }
- else
- {
- break;
- }
- }
- if(len == i)
+ if(0 == isFF(temp,(uint16)len))
{
if(0 == offset)
{
//ÎÞÊý¾Ý
+ memset(buf,0,len);
return 1;
}
else
@@ -70,9 +61,11 @@
}
}
offset += len;
- if(DEF_FLASH_PageSize < (offset +len)) // ³¬¹ýµ±Ò³Î´ÕÒµ½·µ»Ø1
+ /**Ò»Ò³¸ÕºÃдÍê»ò³¬¹ýµ±Ç°Ò³ ˵Ã÷Ò»Ò³¸ÕºÃÓÃÍê**/
+ if(DEF_FLASH_PageSize < (offset +len))
{
- return 1;
+ memcpy(buf,temp,len);
+ return 0;
}
}
}
@@ -84,40 +77,30 @@
**/
uint16 sp_flash_page_write(uint32 addr,uint8 buf[],uint32 len)
{
- uint32 i;
- uint32 offset = 0;
- uint8 temp[64];
+ uint32 offset;
+ uint8 temp[256];
- if(len > 64)
+ if(len > sizeof(temp))
{
return 1;
}
+
+ offset = 0;
while(1)
{
- i = 0;
+ memset(temp,0,sizeof temp);
sp_flash_read(addr +offset,temp, len);
- while(i < len)
+ if(0 == isFF(temp,(uint16)len))
{
- if(0xFF == temp[i])
- {
- ++i;
- }
- else
- {
- break;
- }
+ return sp_flash_write(addr +offset,buf, len);
}
+ offset += len;
if(DEF_FLASH_PageSize < (offset +len)) // ³¬¹ýµ±Ò³±íʾÒÑдÂú,²Á³ýÖØÐ´
{
sp_flash_erase(addr);
return sp_flash_write(addr,buf, len);
}
- if(len == i)
- {
- //ÎÞÊý¾Ý
- return sp_flash_write(addr +offset,buf, len);
- }
- offset += len;
}
}
+