```void save_data(uint8_t msg, uint16_t size)
{
uint32_t len = 8192;
uint8_t data[80];
uint8_t i = 0;
while(len < 20400)
{
nwy_flash_read(len, data, 80);
rt_thread_delay(1);
for(i=0; i<77;)
{
rt_kprintf(“i = %d,data = %x,len = %d
“,i, data,len);
if((uint16_t)(&data) == 0xdaeb)
{
rt_kprintf(“data = UPLOAD_DATA_FLAG
“);
i += 5+(data[i+3]<<8|data[i+4]);
}
else if((uint32_t)(&data) == 0xffffffff)
{
rt_kprintf(“data = %x
“, data);
rt_memset(data, 0, 80);
(uint16_t*)data = UPLOAD_DATA_FLAG;
data[2] = 1;
data[3] = size>>8;
data[4] = size;
}```
运行结果如下:
i = 0,data = eb,len = 8192
data = UPLOAD_DATA_FLAG
i = 48,data = eb,len = 8192
data = UPLOAD_DATA_FLAG
i = 0,data = 0,len = 8272
psr: 0x01000000
pc: 0x08013d24
lr: 0x08017c47
r12: 0x00000000
r03: 0x08013ce3
r02: 0x40013800
r01: 0x00000000
r00: 0x2000564f
hard fault on thread: UploadData
thread pri status sp stack size max used left tick error
at_clnt0 9 suspend 0x00000098 0x00000600 35% 0x00000005 000
UploadData 10 running 0x00000164 0x00001400 36% 0x0000000a 000
tshell 10 suspend 0x0000007c 0x00000800 07% 0x0000000a 000
tidle0 31 ready 0x00000054 0x00000100 32% 0x00000019 000
timer 4 suspend 0x0000005c 0x00000180 23% 0x00000009 000
当把程序改成如下形式之后,就没问题了,可以正常运行。
```void save_data(uint8_t msg, uint16_t size)
{
uint32_t len = 8192;
uint8_t data[80];
volatile uint8_t i = 0;
while(len < 20400)
{
nwy_flash_read(len, data, 80);
rt_thread_delay(1);
for(i=0; i<77;)
{
// if((uint16_t)(&data) == 0xdaeb)
if((data == 0xeb) && (data[i+1] == 0xda))
{
i += 5+(data[i+3]<<8|data[i+4]);
}
// else if((uint32_t)(&data) == 0xffffffff)
else if((data == 0xff) && (data[i+1] == 0xff) && (data[i+2] == 0xff) && (data[i+3] == 0xff))
{
(uint16_t*)data = UPLOAD_DATA_FLAG;
data[2] = 1;
data[3] = size>>8;
data[4] = size;
}
```求解。。。