OpenEdv-开源电子网

标题: 在移植好的UCOS基础上移植FATFS跟裸机移植FATFS相比要额外修改些什么东西吗 [打印本页]

作者: kk12138    时间: 2016-11-10 17:14
标题: 在移植好的UCOS基础上移植FATFS跟裸机移植FATFS相比要额外修改些什么东西吗
为什么我移植的创建一个软件定时器,回掉函数实现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();                            //获取定时前时间戳

}





欢迎光临 OpenEdv-开源电子网 (http://www.openedv.com/) Powered by Discuz! X3.4