硬汉嵌入式论坛

 找回密码
 立即注册
查看: 5522|回复: 17
收起左侧

[μCOS-II] 多任务,运行FATFS后死机

[复制链接]

35

主题

73

回帖

343

积分

高级会员

超越昨天

积分
343
QQ
发表于 2016-3-24 08:53:50 | 显示全部楼层 |阅读模式
现在是如果在UCOS里运行一个任务,任务(定义为任务1)里采用FATFS显示SD卡的文件信息是正常的,但再开启其它的任务(定义为任务2)时,任务1优先级最高,当任务1中发生任务调度后就再开始死机。任务1代码如下:

  while(1)
   {printf("运行中。。。\r\n");
    if(OnlyOne)
      {OnlyOne=0;
       //CreateNewFile();
       ViewRootDir();      
      }
    AutoRun();
    OSTimeDlyHMSM(0,0,2,1000);  //从这以后就开始死机,前面代码正常执行一次。
   }
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106934
QQ
发表于 2016-3-24 16:00:30 | 显示全部楼层
使用FATFS的多线程调用,要开启重入功能,我们的V5的综合Demo用的uCOS-III,开启重入了,你可以参考。
官方文件说明:
http://elm-chan.org/fsw/ff/en/appnote.html#reentrant

2.png


使用到这个文件:
1.png


回复

使用道具 举报

35

主题

73

回帖

343

积分

高级会员

超越昨天

积分
343
QQ
 楼主| 发表于 2016-3-25 10:27:21 | 显示全部楼层

回 eric2013 的帖子

eric2013:使用FATFS的多线程调用,要开启重入功能,我们的V5的综合Demo用的uCOS-III,开启重入了,你可以参考。
官方文件说明:
http://elm-chan.org/fsw/ff/en/appnote.html#reentrant


....... (2016-03-24 16:00) 
UCOS3的例程用到UCOS2上能行不?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106934
QQ
发表于 2016-3-25 10:29:14 | 显示全部楼层

回 fanyanxi 的帖子

fanyanxi:UCOS3的例程用到UCOS2上能行不? (2016-03-25 10:27) 
相同的地方可以的,比如FatFS的API。
回复

使用道具 举报

35

主题

73

回帖

343

积分

高级会员

超越昨天

积分
343
QQ
 楼主| 发表于 2016-3-25 12:03:06 | 显示全部楼层

回 eric2013 的帖子

eric2013:使用FATFS的多线程调用,要开启重入功能,我们的V5的综合Demo用的uCOS-III,开启重入了,你可以参考。
官方文件说明:
http://elm-chan.org/fsw/ff/en/appnote.html#reentrant


....... (2016-03-24 16:00) 
是V5-610_uCOS-III + emWin + FatFS_综合例子吗?我看没有开启重入。
#define _FS_REENTRANT    0
#define _FS_TIMEOUT        1000
#define    _SYNC_t            HANDLE
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106934
QQ
发表于 2016-3-25 13:08:45 | 显示全部楼层

回 fanyanxi 的帖子

fanyanxi:是V5-610_uCOS-III + emWin + FatFS_综合例子吗?我看没有开启重入。
#define _FS_REENTRANT    0
#define _FS_TIMEOUT        1000
#define    _SYNC_t      & .. (2016-03-25 12:03) 
是这个例子:
http://www.armbbs.cn/forum.php?mod=viewthread&tid=1139
回复

使用道具 举报

35

主题

73

回帖

343

积分

高级会员

超越昨天

积分
343
QQ
 楼主| 发表于 2016-3-25 14:55:27 | 显示全部楼层

回 eric2013 的帖子

我试了一下,用例程的话,缺少OS.H文件,不用例程,发现我的syscall.c文件里提示缺少变量定义。现是UCOS2里什么头文件可以代替UCOS3中的OS.H文件?或者如果有UCOS2的SYSCALL.C文件直接给我一份,谢谢!
编译提示错误.JPG
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106934
QQ
发表于 2016-3-25 14:58:39 | 显示全部楼层

回 fanyanxi 的帖子

fanyanxi:我试了一下,用例程的话,缺少OS.H文件,不用例程,发现我的syscall.c文件里提示缺少变量定义。现是UCOS2里什么头文件可以代替UCOS3中的OS.H文件? (2016-03-25 14:55) 
Fatfs里面已经实现了ucos-ii的相关代码,直接使用syscall实现的就行。
ucos-iii的需要用户去实现。
回复

使用道具 举报

35

主题

73

回帖

343

积分

高级会员

超越昨天

积分
343
QQ
 楼主| 发表于 2016-3-25 15:56:23 | 显示全部楼层

回 eric2013 的帖子

eric2013:Fatfs里面已经实现了ucos-ii的相关代码,直接使用syscall实现的就行。
ucos-iii的需要用户去实现。 (2016-03-25 14:58)
现在关健是我的SYSCALL编译时出现上图中的错误。用的是你们的V5-107a_FatFS文件系统例程(SD卡)(V1.2)中的文件
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106934
QQ
发表于 2016-3-25 17:20:27 | 显示全部楼层

回 fanyanxi 的帖子

fanyanxi:现在关健是我的SYSCALL编译时出现上图中的错误。 (2016-03-25 15:56) 
加上这个头文件
#include <ucos_ii.h>
回复

使用道具 举报

35

主题

73

回帖

343

积分

高级会员

超越昨天

积分
343
QQ
 楼主| 发表于 2016-3-28 11:09:23 | 显示全部楼层

回 eric2013 的帖子

eric2013:

加上这个头文件
#include <ucos_ii.h>
现在有两个问题
1)互斥信号还需不需要定义OS_MUTEX   FILE_MUTEX;       /* óÃóú»¥3a */
2)加了以后经过修改后编译出下如图中错误 编译提示错误4.JPG
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106934
QQ
发表于 2016-3-29 00:44:09 | 显示全部楼层

回 fanyanxi 的帖子

fanyanxi:

现在有两个问题
1)互斥信号还需不需要定义OS_MUTEX   FILE_MUTEX;       /* óÃóú»¥3a */
2)加了以后经过修改后编译出下如图中错误

.......
应该是互斥信号量的使用错误。修改下。
互斥信号量是这样创建的。
1.png
回复

使用道具 举报

35

主题

73

回帖

343

积分

高级会员

超越昨天

积分
343
QQ
 楼主| 发表于 2016-3-29 09:07:49 | 显示全部楼层

回 eric2013 的帖子

eric2013:

应该是互斥信号量的使用错误。修改下。
互斥信号量是这样创建的。


.......
首选对你一直以来的帮助表示感谢!但现在还是需要你的帮助,还请指教。现在情况具体如下:
按照你的指导创建信号量如下:

OS_EVENT   *FILE_MUTEX;       /* óÃóú»¥3a */
int ff_cre_syncobj (    /* 1:Function succeeded, 0:Could not create due to any error */
    BYTE vol,            /* Corresponding logical drive being processed */
    _SYNC_t* sobj        /* Pointer to return the created sync object */
)
{
    INT8U     err;
    int ret;
    FILE_MUTEX = OSMutexCreate(0, &err);    /* uC/OS-II */
    *sobj = *FILE_MUTEX;                 这句 不知道要不要,加上以后编译报错。
    ret = (err == OS_NO_ERR);
    return ret;
}
1)如果加上*sobj = *FILE_MUTEX;  编译报警如下:

Build target 'project'
compiling syscall.c...
user\\FatFS\\src\\option\\syscall.c(40): error:  #7: unrecognized token
user\\FatFS\\src\\option\\syscall.c(40): error:  #29: expected an expression
user\\FatFS\\src\\option\\syscall.c(40): error:  #7: unrecognized token
Target not created
2)如果不加*sobj = *FILE_MUTEX; 编译能通过,系统也能多任务运行,但在打开文件目录时f_opendir(&DirInf, "/");时返时错误码是15
      FR_TIMEOUT,                /* (15) Could not get a grant to access the volume within defined period */
3)互斥信号量不是用于协调共同对一个共享资源的单独访问,但现在我只有一个任务在访问SD卡,而且还是最高优先级的任务,其它任务都没有访问SD卡。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106934
QQ
发表于 2016-3-30 02:24:44 | 显示全部楼层

回 fanyanxi 的帖子

fanyanxi:首选对你一直以来的帮助表示感谢!但现在还是需要你的帮助,还请指教。现在情况具体如下:
按照你的指导创建信号量如下:

OS_EVENT   *FILE_MUTEX;       /* óÃóú»¥3a */
....... (2016-03-29 09:07) 
1. uCOS-II采用这种方式不成功么,*sobj = OSMutexCreate(0, &err);     
2. 只有一个任务的话,不需要重入特性。多任务使用FatFS的API才需要。
回复

使用道具 举报

35

主题

73

回帖

343

积分

高级会员

超越昨天

积分
343
QQ
 楼主| 发表于 2016-3-30 10:33:22 | 显示全部楼层

回 eric2013 的帖子

eric2013:1. uCOS-II采用这种方式不成功么,*sobj = OSMutexCreate(0, &err);    
2. 只有一个任务的话,不需要重入特性。多任务使用FatFS的API才需要。 (2016-03-30 02:24) 
1)*sobj = OSMutexCreate(0, &err); 是可以成功,
2)现在我只有一个任务使用FATFS,为什么开启其它任务,在打开文件时提示报错15呢?能不能帮我分析一下。如果只开启FATFS任务时,读写SD都正常。
回复

使用道具 举报

35

主题

73

回帖

343

积分

高级会员

超越昨天

积分
343
QQ
 楼主| 发表于 2016-3-30 13:17:20 | 显示全部楼层
终于解决了,原来FATFS的任务堆栈定义的太小了。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106934
QQ
发表于 2016-3-30 14:20:44 | 显示全部楼层

回 fanyanxi 的帖子

fanyanxi:终于解决了,原来FATFS的任务堆栈定义的太小了。 (2016-03-30 13:17) 
终于搞好了,可喜可贺[s:142]
回复

使用道具 举报

65

主题

432

回帖

632

积分

金牌会员

积分
632
发表于 2017-2-6 22:43:31 | 显示全部楼层
你不公布下,原来定义的堆栈大小是多少导致错误的,开个帖子给个解决问题的结论,对看帖人也有帮助
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-10 20:00 , Processed in 0.222325 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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