在移植fatfs的时候,把字符表放到片内flash中可以实现中文读写,但是因为那个字符表太大了,宝贵的片内flash不能浪费在这儿啊,所以就想把字符表放在片外flash,但是在这过程中遇到一件怪事,
首先:
if (dir)
{
TableBasePage=OEM2UNI_TABLE_BASE*256; /* OEMCP to unicode */
hi =87172/ 4 - 1;
}
else
{
TableBasePage=UNI2OEM_TABLE_BASE*256; /* Unicode to OEMCP */
hi =87172/ 4 - 1;
}
单步调试,看到dir=0,但是却执行的上面那段程序,还请高手指点下。
其次:
u16 ReadByte(u32 addr)
{
u16 buf=0;
Select_Flash();
SPI_Flash_Write(FAST_READ_DATA);
SPI_Flash_Write((addr>>16) & 0xff);
SPI_Flash_Write((addr>>8) & 0xff);
SPI_Flash_Write(addr & 0xff);
SPI_Flash_Write(0);
buf=(u16)SPI_Flash_Read();
buf=(buf<<8)+(u16)(SPI_Flash_Read());
NotSelect_Flash();
count++;
return buf;
}
是这个函数,通过调用这个函数把flash中的字符读出来,
在主函数中调用下面这个函数把片外flash中所有的字符全读出了,发现没有错误,但是在fatfs字符转换函数中调用时,返回值全是0xffff,(进去的地址是对的,返回值是错的),还请高手不吝赐教。
for(i=0;i<43586;i++)
{
printf("0x%x ",ReadByte(UNI2OEM_TABLE_BASE*256+(i<<1)));
} |