OpenEdv-开源电子网

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

ucosⅢ+fatfs,如何利用软件定时器每隔一段时间往SD卡写入数据

[复制链接]

2

主题

4

帖子

0

精华

新手入门

积分
18
金钱
18
注册时间
2020-5-21
在线时间
14 小时
发表于 2020-12-17 21:04:24 | 显示全部楼层 |阅读模式
20金钱
stm32移植了ucosⅢ,现在想每隔一段时间往SD卡写入数据,参考的原子软件定时器的教程,每次开启定时器就死机,求指点下怎么实现,是方法不对还是写的程序不对。程序如下:

void task1_task(void *p_arg)
{
        u8 key,num;
        OS_ERR err;
        while(1)
        {
                key = KEY_Scan(0);
                switch(key)
                {
                        case WKUP_PRES:     //μ±key_up°′ÏÂμÄ»°′ò¿a¶¨ê±Æ÷1
                                OSTmrStart(&tmr1,&err);        //¿aÆô¶¨ê±Æ÷1
                                break;
                        case KEY1_PRES:                //μ±key1°′Ï»°¾í1رն¨ê±Æ÷
                                OSTmrStop(&tmr1,OS_OPT_TMR_NONE,0,&err);        //1رն¨ê±Æ÷1
                                break;       
                }
                num++;
                if(num==25) //ÿ500msLED0éá˸ò»′Î
                {
                        num = 0;
                        LED0 = ~LED0;       
                }
                OSTimeDlyHMSM(0,0,0,40,OS_OPT_TIME_PERIODIC,&err);   //Ñóê±10ms
        }
}


//¶¨ê±Æ÷1μÄ»Øμ÷oˉêy
void tmr1_callback(void *p_tmr, void *p_arg)
{       
        Write_Data();                    
        LED1 = ~LED1;       
}




uint8_t  Write_Data()
{
        OS_ERR err;
        FRESULT res;
        FIL fil;
        DIR tdir;
        UINT bww;
//        u8 hum,tem;
        char Con[60];
        char name_buf[30];
        CPU_SR_ALLOC();


        RTC_Get();
        sprintf(name_buf,"%s%0.2d%0.2d%0.2d%s","0:/DATA/", calendar.w_year,calendar.w_month,calendar.w_date,".txt");
        sprintf(Con,"%0.2d:%0.2d/%s%d%s%d%s%d%s%d%s%d \r\n",calendar.hour,calendar.min,"Tem:",temperature,"/Hum:",humidity,"/Light:",lux,"/soil_humi:",soil_humi/100,"/soil_ph: ",soil_ph/10);


        OSSchedLock(&err);
        res = f_open(&fil, name_buf, FA_WRITE|FA_OPEN_ALWAYS);
//        printf("%d\r\n",res);
        if (res != FR_OK)
        {
//                printf("open succesed");
                OSSchedUnlock(&err);
                return 0;
        }
        res = f_lseek(&fil,fil.fsize);
        res = f_write(&fil, Con, sizeof(Con), &bww);
        printf("%d\r\n",res);
        if (res != FR_OK)
          {
                OSSchedUnlock(&err);
                return 0;
          }
        f_close(&fil);
        OSSchedUnlock(&err);
        return 1;
}

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

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-25 11:46

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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