OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 10393|回复: 3

srm32 移植fatfs 程序很怪

[复制链接]

2

主题

20

帖子

0

精华

新手上路

积分
48
金钱
48
注册时间
2011-11-21
在线时间
0 小时
发表于 2011-12-3 16:18:51 | 显示全部楼层 |阅读模式

在移植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)));
        }

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2011-12-3 19:56:18 | 显示全部楼层
回复【楼主位】331086846:
---------------------------------
这个jtag看数据有时候是有这样的现象,看看传入参数的时候是什么值?
你转换都错了(dir0和1的问题),后面肯定也就错了。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

2

主题

20

帖子

0

精华

新手上路

积分
48
金钱
48
注册时间
2011-11-21
在线时间
0 小时
 楼主| 发表于 2011-12-3 20:06:58 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
但是如果不用仿真,用printf打印出来的值也是0xffff,ReadByte(u32 addr)这个函数传入的参数是正确的,但是最后返回的值,是错误的。
dir0和1,这个原因可能是仿真造成的,但是和后面读数据无关,不管执行那一段都会有数据的,不会是0xffff,现在最想不通的就是ReadByte(u32 addr),放在main函数中读取一切正常,但是在这里就这样了。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2011-12-3 23:25:30 | 显示全部楼层
回复【3楼】331086846:
---------------------------------
那应该是你读取的时候计算/读取有误吧.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-24 14:27

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表