Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
RT-Thread一般讨论
RT-Thread的文件系统问题
发布于 2013-11-04 16:46:39 浏览:3758
订阅该版
环境:RT-1.2.0RC 系统2个任务:1个idle,1个SD卡读写的线程。 SD卡线程:优先级17,堆栈8192 ```void thread_entry_sd(void* parameter) { int fd; char buffer[80]; int line_size; //fd = open("/BLACK.Csv", O_RDONLY,0); for(;;) { //frame_parse("/BLACK.Csv"); fd = open("/BLACK.Csv", O_RDONLY,0); rt_thread_delay(30); close(fd); rt_thread_delay(30); } }``` 导致的错误: 系统死机 ![截图00.png](https://oss-club.rt-thread.org/uploads/5575_611c40de4a78aa2a01e264ca770f59e1.png) ![截图01.png](https://oss-club.rt-thread.org/uploads/5575_8da87b663fd5aad3422c94ba3307db22.png)
查看更多
9
个回答
默认排序
按发布时间排序
gongjian32
2013-11-04
这家伙很懒,什么也没写!
系统在rt_malloc里面挂起
gongjian32
2013-11-04
这家伙很懒,什么也没写!
如果把open拿到for(;;)上面,可以将1个文件的内容全部的读出来,read_line(),没有问题。 可是:我的任务中,要打开N个文件,将里面的配置参数提取出来。不可能1个任务打开1个文件。
gongjian32
2013-11-04
这家伙很懒,什么也没写!
我挂载了2个文件系统 : sd0是“/",下面的"/spiflash"挂载了spiflash0 ``` void rt_init_thread_entry(void* parameter) { #ifdef RT_USING_COMPONENTS_INIT /* initialization RT-Thread Components */ rt_components_init(); #endif rt_platform_init(); rt_kprintf("I'am here! "); /* Filesystem Initialization */ #ifdef RT_USING_DFS { #ifdef RT_USING_DFS_ELMFAT /* mount sd card fat partition 1 as root directory */ if (dfs_mount("sd0", "/", "elm", 0, 0) == 0) { rt_kprintf("File System initialized! "); } else rt_kprintf("File System initialzation failed! "); #if 0 /* mount sd card fat partition 1 as root directory */ if (dfs_mount("flash0", "/spiflash", "elm", 0, 0) == 0) { rt_kprintf("flash0 mount to /. "); } else { mkfs("elm","flash0"); if (dfs_mount("flash0", "/spiflash", "elm", 0, 0) == 0) { rt_kprintf("flash0 mount to /. "); } else { rt_kprintf("flash0 mount to / failed. "); } } #endif #endif } #endif /* do some thing here. */ usr_thread_init(); } ``` 用户线程: ``` void usr_thread_init(void) { rt_err_t result; result = rt_thread_init( &thread_sd, "sdcard",thread_entry_sd, (void*)RT_NULL, &thread_sd_stack[0], sizeof(thread_sd_stack), THREAD_PRIORITY_SD, THREAD_TIMESLICE_SD); if (result == RT_EOK) rt_thread_startup(&thread_sd); //else //tc_stat(TC_STAT_END | TC_STAT_FAILED); } ``` 如果去掉flash0的挂载,就不会出现sd卡里面的问题。 只要挂载2个文件系统,在创建任务的时候就会出现问题。
prife
2013-11-04
这家伙很懒,什么也没写!
>如果把open拿到for(;;)上面,可以将1个文件的内容全部的读出来,read_line(),没有问题。 >可是:我的任务中,要打开N个文件,将里面的配置参数提取出来。不可能1个任务打开1个文件。 --- 我在simulator里没有复现这个bug。测试代码如下: ``` #include
static int read_line(int fd, char *line, int line_size) { char *pos, *next; int length; length = read(fd, line, line_size); if (length > 0) { pos = strstr(line, " "); if (pos != NULL) { *pos = ' '; next = pos + 1; /* move back */ lseek(fd, -(length - (next - line)), SEEK_CUR); length = pos - line; } else length = 0; return length; } return -1; } static void rt_test_thread_entry(void *parameter) { int fd; static char buffer[1024]; int line_size; //fd = open("/BLACK.Csv", O_RDONLY, 0); for(;;) { //frame_parse("/BLACK.Csv"); fd = open("/disk/sd/BLACK.Csv", DFS_O_RDONLY, 0); if (fd < 0) { rt_kprintf("open file failed! "); return; } read_line(fd, buffer, sizeof(buffer)); rt_kprintf("readd:%s ", buffer); rt_thread_delay(30); close(fd); rt_thread_delay(30); } } #include <finsh.h> int test() { rt_thread_t tid; tid = rt_thread_create("test", rt_test_thread_entry, RT_NULL, 2048, RT_THREAD_PRIORITY_MAX * 3 / 4, 20); if (tid != RT_NULL) rt_thread_startup(tid); return 0; } FINSH_FUNCTION_EXPORT(test, test !) ```
gongjian32
2013-11-04
这家伙很懒,什么也没写!
我把init线程的stack改到8192就不会出现上面的那些问题了! 为什么呢?怎么需要那么大的stack空间?
prife
2013-11-04
这家伙很懒,什么也没写!
>我把init线程的stack改到8192就不会出现上面的那些问题了! >为什么呢?怎么需要那么大的stack空间? --- 执行list_thread()看看sd卡线程最大耗费的栈空间,以进一步分析。
bernard
2013-11-04
这家伙很懒,什么也没写!
看起来很像是内存越界的问题
stephenking
2013-11-05
这家伙很懒,什么也没写!
栈空间应该进行最坏测试后,提供一个参考值,否则使用者很难确定如何开辟空间
撰写答案
登录
注册新账号
关注者
0
被浏览
3.8k
关于作者
gongjian32
这家伙很懒,什么也没写!
提问
10
回答
17
被采纳
0
关注TA
发私信
相关问题
1
有关动态模块加载的一篇论文
2
最近的调程序总结
3
晕掉了,这么久都不见layer2的踪影啊
4
继续K9ii的历程
5
[GUI相关] FreeType 2
6
[GUI相关]嵌入式系统中文输入法的设计
7
20081101 RT-Thread开发者聚会总结
8
嵌入式系统基础
9
linux2.4.19在at91rm9200 上的寄存器设置
10
[转]基于嵌入式Linux的通用触摸屏校准程序
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
rt-thread 小内存算法源码分析
2
env中添加lvgl软件包后,keil编译包--c99错误
3
【NXP-MCXA153】 定时器驱动移植
4
GD32F450 看门狗驱动适配
5
【NXP-MCXA153】看门狗驱动移植
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
UART
WIZnet_W5500
ota在线升级
PWM
freemodbus
flash
cubemx
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
编译报错
Debug
rt_mq_消息队列_msg_queue
SFUD
keil_MDK
msh
ulog
C++_cpp
MicroPython
本月问答贡献
踩姑娘的小蘑菇
7
个答案
2
次被采纳
a1012112796
18
个答案
1
次被采纳
红枫
5
个答案
1
次被采纳
Ryan_CW
5
个答案
1
次被采纳
张世争
4
个答案
1
次被采纳
本月文章贡献
YZRD
3
篇文章
6
次点赞
catcatbing
3
篇文章
6
次点赞
lizimu
2
篇文章
11
次点赞
qq1078249029
2
篇文章
2
次点赞
xnosky
2
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部