rt-thread下调试elmfat 问题记录

硬件平台:stm32f107   SPI flash:w25q32

RTT版本:v2.1

w25q32的驱动大神们已经写好(w25qxx.c),我只需要照猫画虎的实现相应SPI的驱动程序即可(bsp例程都有),如此spi flash就可以读写了。查看device列表如下:

接着启用DFS功能和ELMFAT类型文件系统,并挂载文件系统名为“elm”的文件系统到介质为flash0的根目录下,如下图:

#define RT_DFS_ELM_MAX_SECTOR_SIZE  4096  //spi flash的扇区大小是4096

但是会提示挂载失败,原因时flash里边的文件系统分区数据不存在,所以需要格式化一下spi flash,命令如下:

这里截图显示的是理想的情况,在我调试的时候mkfs/mkdir/open都会导致系统卡死或者崩溃,但是在单步仿真的时候,又会一步步正常运行,很是郁闷。

后来发现当全速运行异常后(仿真时不会崩溃,但是程序停止运行,却不知程序指针指在哪里),多次按F10后,程序指针忽然运行到函数get_fattime()中,然后再次全速就正常了,文件打开成功了,目录创建正常了。看样子问题和这个函数有关系了。

深入跟踪get_fattime(),发现该函数可用宏_FS_NORTC来控制是否使用,并说明该函数和RTC相关,如图

原来如此,在调试的硬件上,没有按照RTC的驱动框架实现RTC功能,而是使用I2C自己控制的片外RTC,所以get_fattime()调用RTC驱动框架接口函数失败可能是导致异常的原因。

禁止文件系统使用时间戳功能后(#define _FS_NORTC 1),一切恢复正常了。

时间: 2024-10-06 02:13:02

rt-thread下调试elmfat 问题记录的相关文章

RT Thread学习历程(1):串口乱码问题

因为学习实时系统,最近接触到RT Thread. 把RT Thread官网上的示例代码烧录到STM32的板子上之后,在串口软件上接收到的全是乱码,一开始以为是串口软件的问题,换了2个软件之后情况都一样,最后发现是晶振的问题,我用的是STM32F407VGT6,晶振要设为8MHz,代码相应的设置晶振的部分也要修改.

linux下MySQL5.6安装记录

MySQL下载地址: ftp://mirror.switch.ch/mirror/mysql/Downloads/MySQL-5.6/http://mirrors.sohu.com/mysql/ 1.查看服务器版本: [[email protected] ~]# cat /etc/redhat-releaseCentOS release 6.4 (Final) [[email protected] ~]# rpm -qa|grep mysql mysql-libs-5.1.66-2.el6_3.

VC下调试内存泄漏的办法

VC的控制台程序不会跟踪内存泄漏,如果需要调试控制台程序的内存情况,需要_CrtSetDbgFlag 详细原理我也不太懂,我也是从网上摘过来的,直接帖代码 // 内存泄漏跟踪 #ifdef WIN32 #include <SDKDDKVer.h> #ifdef _DEBUG #define _CRTDBG_MAP_ALLOC #include <stdlib.h> #include <crtdbg.h> #define VC_MemLeakCheck() _CrtSet

前端利器,如何使用fiddle拦截在线css进行先下调试

fiddle的功能相当的强悍,用户也非常广,不过今天我就教大家用fiddle进行前端调试. 首先下载软件fiddle,点击对应的版本下载安装. 安装成功后打开看到右侧的导航栏: 点击AutoResponder 接下来出现的三个选项全部都要勾选,具体什么意思就是英文翻译了. 然后: 添加一个rule 在rule editor中第一个文本框里粘贴你要替换的原地址,比如: 然后进行下一步,在第二个框中点击选择find a file,具体意思你懂得,找个本地的文件替换上个url文件: 接下来就是最后一步

使用ffmepg的lib库调试,debug版本下调试无问题,但release版本会出现跑飞的现象

如题(“使用ffmepg的lib库调试,debug版本下调试无问题,但release版本会出现跑飞的现象”). 今天使用ffmpeg进行宿放和颜色格式转换,很简单的代码,却折腾了我一天,这里说来就气啊,全是一顿的蛋疼,这里记下来,防止以后再蛋疼.呵呵 开始的时候,我以为是我的代码问题,然后我把我的代码很多地方都注释了,发现debug没问题,release还是不断跑飞,啥原因? 于是我从新建了一个测试工程,很简单,就调用一句话. 整个工程的代码如下: 1 // ffmpegtest.cpp : 定

(转)&lt;Unity3D&gt;Unity3D在android下调试

转自:http://blog.csdn.net/zuoyamin/article/details/11827309 一.工具准备 1.JDK——由于android是基于Java平台开发的,jdk是必须要安装的.下载地址:http://www.java.net/download/jdk6/6u10/promoted/b32/binaries/jdk-6u10-rc2-bin-b32-windows-i586-p-12_sep_2008.exe 2.Android SDK——这个就不多说了,要开发a

VS2005--设置Release模式下调试

今天初略看了下,所谓Release和Debug只是大家和编译器约定的一些生成规则而已,所以调试是无所谓Release和Debug的,只是由于生成的规则不同,可能Release的一些调试结果没Debug精确详细而已. 下面是设置在Release模式下调试的方法: 1.工程项目上右键 -> 属性 2.c++ -> 常规 -〉调试信息格式    选  程序数据库(/Zi)或(/ZI), 注意:如果是库的话,只能(Zi) 3.c++ -> 优化 -〉优化            选  禁止(/Od

VS调试过程中不可理解的问题----release下调试的悲剧

昨天晚上到现在,一直在调试一个代码,结果发现进入一个类的成员函数中以后,某些变量不能显示观察,什么局部变量,自动变量,监视窗口,都看了,就是某些变量不显示,程序不按照自己想要的步骤执行,竟然出现紊乱状态,头大啊!  实在不行,请大神指点,结果发现自己竟然是在release状态下调试的,所以各种不可理喻就都出来了,转成Debug版本下调试,终于程序可控了.真的是教训啊!写此博客以做警戒!

android下调试unity3d应用

原地址:http://blog.csdn.net/armoonwei/article/details/7032455 目前貌似不支持断点调试,但可以通过日志打印(logcat)来跟踪. 在android SDK中有个adb工具,使用此工具来跟踪运行的android应用: adb logcat 启动logcat,并将设备上运行的android应用的运行时信息全部打印出来. adb logcat -s Unity 如果只想打印Unity的输出信息,使用此命令. adb logcat -d > log