初中生
最后登录1970-1-1
在线时间 小时
注册时间2016-3-18
|
用的火哥移植好的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(); //获取定时前时间戳
}
|
|