OpenEdv-开源电子网

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

在移植好的UCOS基础上移植FATFS跟裸机移植FATFS相比要额外修改些什么东西吗

[复制链接]

4

主题

12

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2016-9-2
在线时间
5 小时
发表于 2016-11-10 17:14:13 | 显示全部楼层 |阅读模式
为什么我移植的创建一个软件定时器,回掉函数实现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, 下载次数: 67

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

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-1 22:25

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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