野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 11195|回复: 4

ucos III + FATFS移植问题

[复制链接]
发表于 2016-11-10 17:03:02 | 显示全部楼层 |阅读模式
用的火哥移植好的ucos模板,然后把火哥修改过的FATFS相关的文件diskio.c,ffconfig.h以及SDIO相关的文件等加入到工程中,其他文件未作修改,然后创建一个软件定时器,回掉函数实现sd卡写操作,但是实现不了,为了发现原因,在回掉函数里挂接文件,打开文件,写入文件等后都会打印消息到串口,发现串口没有数据出来,以下是回掉函数代码,工程文件在附件

void TmrCallback (OS_TMR *p_tmr, void *p_arg) //软件定时器MyTmr的回调函数
{
CPU_INT32U       cpu_clk_freq;
CPU_SR_ALLOC();      //使用到临界段(在关/开中断时)时必需该宏,该宏声明和定义一个局部变
             //量,用于保存关中断前的 CPU 状态寄存器 SR(临界段关中断只需保存SR)
             //,开中断时将该值还原。  
i++;
printf ( "%s", ( char * ) p_arg );    //这个能打印出来,但是程序运行自始至终只打印了一次,后边的就打印不出来了

cpu_clk_freq = BSP_CPU_ClkFreq();                   //获取CPU时钟,时间戳是以该时钟计数

ts_end = OS_TS_GET() - ts_start;     //获取定时后的时间戳(以CPU时钟进行计数的一个计数值)
                                       //,并计算定时时间。
OS_CRITICAL_ENTER();                 //进入临界段,不希望下面串口打印遭到中断

res_sd = f_mount(&fs,"0:",1);

while( res_sd )
{
   printf("SD_Card error!");
}
printf("f_mount result:%d\r\n",res_sd);

res_sd=f_open(&fnew,"0:201611081543.txt",FA_OPEN_ALWAYS | FA_WRITE);
printf("f_open result:%d\r\n",res_sd);
if ( res_sd == FR_OK )
{
   f_lseek( &fnew, fnew.fsize);
   f_printf( &fnew, "%d", i );
   f_puts( "\r\n", &fnew);
}
else
{
   printf("file open error!");
}
f_close(&fnew);
   
printf ( "\r\n定时1s,通过时间戳测得定时 %07d us,即 %04d ms。\r\n",
       ts_end / ( cpu_clk_freq / 1000000 ),     //将定时时间折算成 us
       ts_end / ( cpu_clk_freq / 1000 ) );      //将定时时间折算成 ms

OS_CRITICAL_EXIT();                              
ts_start = OS_TS_GET();                            //获取定时前时间戳

}

FatFSWithOS.rar

7.2 MB, 下载次数: 36

回复

使用道具 举报

发表于 2016-11-11 09:11:00 | 显示全部楼层
直接在线调试看看程序卡在哪里
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-11 10:02:16 | 显示全部楼层
东门安芙 发表于 2016-11-11 09:11
直接在线调试看看程序卡在哪里

res_sd = f_mount(&fs,"0:",1);
进去后单步运行,卡在ff.c里的2255行: fmt = check_fs(fs, bsect);     /* Load sector 0 and check if it is an FAT boot sector as SFD */
QQ截图20161111095819.png
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-11 10:04:45 | 显示全部楼层
-kk12138 发表于 2016-11-11 10:02
res_sd = f_mount(&fs,"0:",1);
进去后单步运行,卡在ff.c里的2255行: fmt = check_fs(fs, bsect);     ...

然后我就更乱了,ff.c在移植的时候不是不用修改么,而且我不用ucos时fatfs运行没有问题
回复 支持 反对

使用道具 举报

发表于 2023-6-5 09:41:51 | 显示全部楼层
系统是不是进入HardFault_Handler
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-24 21:15 , Processed in 0.033604 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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