在调试的时候发现 程序经常跑进 HardFaultException() {while(1);} 这个函数里头! 因为K9f1G08是大页的nand 所以定义的缓冲区一个接受一个发送都是2k! 后来我将缓冲区的定义放到 fs的测试函数里头可以正常运行, 但后来我又将这两个数组定义成全局的 又跑到了HardFaultException() {while(1);} 。 我再次将数组定义到函数里头发现程序还是跳到 HardFaultException() {while(1);} 我这搞不懂这是什么原因呢? 假若要想找出真正的原因,该怎么调试查看呢? 请各位朋友指点一下 谢谢大家。 下面是fatfs 的测试函数:
void test_fatfs(void)
{
FATFS fs;
FIL fl;
FATFS *pfs;
DWORD clust;
unsigned int r,w,i;
FRESULT res;
uint8 RxBuffer[2048];
uint8 TxBuffer[2048];
// for mount
res=f_mount(0,&fs);
printf("f_mount=%x \n\r",res);
// for format
//res=f_mkfs(0,1,2048); //MUST Format for New NANDFLASH !!!
//printf("f_mkfs=%x \n\r",res);
// for
pfs=&fs;
res = f_getfree("/", &clust, &pfs);
printf("f_getfree=%x \n\r",res);
printf("\n\r%lu MB total drive space."
"\n\r%lu MB available.\n\r",
(DWORD)(pfs->max_clust - 2) * pfs->csize /2/1024,
clust * pfs->csize /2/1024);
// for read
res=f_open(&fl,"/test2.dat",FA_OPEN_EXISTING | FA_READ);
printf("f_open=%x \n\r",res);
for(i=0;i<2;i++)
{
for(r = 0; r < NAND_PAGE_SIZE; r++)
{
RxBuffer[r]= 0xff;
}
res=f_read(&fl,RxBuffer,NAND_PAGE_SIZE,&r);
printf("f_read=%x \n\r",res);
if(res || r == 0)break;
for(r = 0; r < NAND_PAGE_SIZE; r++)
{
printf("D[%08x]=%02x ",(i*NAND_PAGE_SIZE+r),RxBuffer[r]);
if((r%8)==7)
{printf("\n\r");}
}
}
f_close(&fl);
// for write
res=f_open(&fl,"/test2.dat",FA_CREATE_ALWAYS | FA_WRITE);
printf("f_open=%x \n\r",res);
for(i=0;i<2;i++)
{
for(w = 0; w < NAND_PAGE_SIZE; w++)
{
TxBuffer[w]=((w<<0)&0xff);
}
res=f_write(&fl,TxBuffer,NAND_PAGE_SIZE,&w);
printf("f_write=%x \n\r",res);
if(res || w<NAND_PAGE_SIZE)break;
}
f_close(&fl);
// for umount
f_mount(0,NULL);
} |