野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 6919|回复: 1

[ucos] ucos III + FATFS移植问题

[复制链接]
发表于 2016-11-10 16:53:29 | 显示全部楼层 |阅读模式
用的火哥移植好的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, 下载次数: 26

工程文件

回复

使用道具 举报

 楼主| 发表于 2016-11-10 16:54:38 | 显示全部楼层
在ucos中移植fatfs是不是要修改什么东西呢,求大神解答
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-23 10:51 , Processed in 0.031284 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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