OpenEdv-开源电子网

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

ucos+fatfs+TF卡碰到的文件系统不稳定问题,求救。

[复制链接]

4

主题

13

帖子

0

精华

新手上路

积分
49
金钱
49
注册时间
2013-9-4
在线时间
0 小时
发表于 2015-3-6 10:02:26 | 显示全部楼层 |阅读模式
5金钱
我的问题这里询问过一次,昨天测试了,在发一个求救贴。还请版主手下留情。
http://www.openedv.com/posts/list/0/47326.htm?privmsg=14442&&sysid=4#272187

做了一个新工程
ucosII + fatfs(0.09b) + TF卡 +lpc1788

现在碰到的问题是,文件系统测试,在任务中使用就不稳定,会导致类似文件系统崩溃的情况。
比如:文件不能打开和删除,文件夹不能打开删除,创建了很多同名文件,tf卡不能打开只能格式化,tf卡不能格式化等。

现在怀疑是ucos对文件系统有干扰,因为测试代码放在main函数中OSStart();之前就一切正常,放在任务中,哪怕是单任务只跑测试代码都会出问题。

[mw_shl_code=c,true]int main(void) { SystemInit(); OSInit(); DriverInit();//各硬件初始化 OSTaskCreate(OS_TASK_SCANANDOUTPUT,(void *)0,(OS_STK *)&ScanAndPutStk[4*TASK_STK_SIZE-1],(INT8U)(3)); OSTimeSet(0); // sdwritetest(); //运行没有问题 OSStart(); } void OS_TASK_SCANANDOUTPUT( void *p_arg ) { sdwritetest(); //运行会出错 } //测试代码 void sdwritetest() { while(1) { //写一个文件 。。 //for 循环延时 。。 } }[/mw_shl_code]



有人说要加临界域保护,我按照原子的例子加了
[mw_shl_code=c,true]extern void ff_enter(void); extern void ff_leave(void); #define ENTER_FF(fs) {ff_enter();}//{OS_ENTER_CRITICAL();}//进入FATFS,关闭中断,防止相互干扰 #define LEAVE_FF(fs, res) {ff_leave();return res;}//{OS_EXIT_CRITICAL();return res;}//离开FATFS,开启中断,任务继续执行[/mw_shl_code]
[mw_shl_code=c,true]OS_CPU_SR cpu_sr=0; void ff_enter(void) { OS_ENTER_CRITICAL();//进入临界区(无法被中断打断) } void ff_leave(void) { OS_EXIT_CRITICAL(); //退出临界区(可以被中断打断) }[/mw_shl_code]



还有建议是说要保证可重入。我打开了_FS_REENTRANT,按照syscall.c添加了互斥量,还是不行。
考虑到在单任务中运行不行,在main中运行可以,所以怀疑是ucos有干扰。而不是其他比如硬件中断之类的。(我屏蔽了除了tf卡意外的所有中断初始化也不行)。
但是对ucos没有很深的认识,不知道从哪里下手。
求大神指点。

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

使用道具 举报

10

主题

561

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1839
金钱
1839
注册时间
2014-6-27
在线时间
982 小时
发表于 2015-3-6 14:06:27 | 显示全部楼层
可以的,我TF一边读一边串口输出,而且是大数据量都没有问题,是你的程序问题,多检查看看。
回复

使用道具 举报

4

主题

13

帖子

0

精华

新手上路

积分
49
金钱
49
注册时间
2013-9-4
在线时间
0 小时
 楼主| 发表于 2015-3-6 16:49:48 | 显示全部楼层
回复【2楼】TinyBoy:
---------------------------------
我也觉得奇怪。但是在main函数里面就没有任何问题,写入最大的一次有380字节。反复写了一晚上都没问题。

但是一旦在任务中就出问题。

现在不知道从哪里查起啊!!还请指点。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-3-6 22:51:55 | 显示全部楼层
任务堆栈有没有8字节对其?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

4

主题

13

帖子

0

精华

新手上路

积分
49
金钱
49
注册时间
2013-9-4
在线时间
0 小时
 楼主| 发表于 2015-3-9 09:38:11 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
原子大神,这个怎么说?
我没这个概念啊。ucos移植是已经做好的。
ScanAndPutStk[4*TASK_STK_SIZE-1]
你是指这个么?
TASK_STK_SIZE = 512
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-3-9 23:01:27 | 显示全部楼层
[mw_shl_code=c,true]//START 任务 //设置任务优先级 #define START_TASK_PRIO 10 //开始任务的优先级设置为最低 //设置任务堆栈大小 #define START_STK_SIZE 64 //任务堆栈,8字节对齐 __align(8) static OS_STK START_TASK_STK[START_STK_SIZE]; //任务函数 void start_task(void *pdata);[/mw_shl_code]

我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

4

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
51
金钱
51
注册时间
2016-9-8
在线时间
11 小时
发表于 2017-1-25 11:36:23 | 显示全部楼层
我也遇到同一问题,堆栈8字节对齐也不行呀
回复

使用道具 举报

20

主题

134

帖子

0

精华

高级会员

Rank: 4

积分
550
金钱
550
注册时间
2016-7-26
在线时间
90 小时
发表于 2017-5-10 17:15:54 | 显示全部楼层
TinyBoy 发表于 2015-3-6 14:06
可以的,我TF一边读一边串口输出,而且是大数据量都没有问题,是你的程序问题,多检查看看。

我就只是在例程中加入了文件读写的语句
回复

使用道具 举报

20

主题

134

帖子

0

精华

高级会员

Rank: 4

积分
550
金钱
550
注册时间
2016-7-26
在线时间
90 小时
发表于 2017-5-10 17:17:24 | 显示全部楼层
正点原子 发表于 2015-3-9 23:01
[mw_shl_code=c,true]//START 任务
//设置任务优先级
#define START_TASK_PRIO                              10 //开始任务 ...

同样遇到这个问题,用原子哥的EMWIN或者UCOSIII例程,在任务中加入文件读写的语句,就会进入hardfault
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手上路

积分
35
金钱
35
注册时间
2016-6-11
在线时间
8 小时
发表于 2017-12-22 09:37:28 | 显示全部楼层
wanyingwe 发表于 2017-5-10 17:17
同样遇到这个问题,用原子哥的EMWIN或者UCOSIII例程,在任务中加入文件读写的语句,就会进入hardfault

hartfault有可能是你堆栈设置太小,而任务中设置的局部变量占内存太大,如果这样可以改成全局变量
回复

使用道具 举报

11

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
195
金钱
195
注册时间
2013-6-19
在线时间
42 小时
发表于 2018-12-23 21:31:14 | 显示全部楼层
正点原子 发表于 2015-3-6 22:51
任务堆栈有没有8字节对其?

本人也遇到同样问题,767、743均无法使用,还得我在项目中只能去掉ucos,原子哥可否帮忙解决
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-22 17:14

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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