硬汉嵌入式论坛

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

[有问必答] 学习FATFS后关于内存的一些疑问

[复制链接]

4

主题

9

回帖

14

积分

新手上路

积分
14
发表于 2016-3-22 12:10:24 | 显示全部楼层 |阅读模式
最近一个星期一直学习FATFS,去年买的STM32F103zet6的板子,今年你们就更新新板子,不知到新版例程是否支持以前的板子呢?去年看我们论坛还是要购买板子才注册的,今年已经对外开放了,希望咱论坛能火起来,说实话,咱的硬件杠杠的,对于学生狗来说基本不用在去买其他模块了,好了话归正传。由于单片机内存管理的书籍不知到参考那本,图书馆又找不到,所以发帖求救,第一次发帖望指教!!!!
先说本人了解的一些单片机基础知识,不对望指教

数据存储区RAM:全局变量 ,静态变量,局部变量 堆栈都在这里
程序存储区FLASH(ROM):ROM作程序存储已经淘汰,放程序,和数字字符常量,所谓立即数就是这里
寄存器:这里面存储的还不太了解
单片机就这个三个地方存储,片外的不说
刚开始是研究原子的代码,因为本人英语的水平又不高,咱的例程注释又都是英文,看起来太费劲。所以一直用咱的板子,看他们开源的[s:132],不过他们是要用malloc,来申请和释放内存,我理解的意思应该是将FATFS占用的内存分配在堆上,不知道在单片机上是否有必要进行分配和释放内存的操作,直接交给编译器在栈操作不就可以了吗?那么堆存在的意义又是什么呢?
之后又在图书馆找到一本ZNFAT的书,然后在网上找代码移植编译成功,初始化读出来的数据也都正确,但是打开文件的时候会进入硬件故障的死循环,但是我单步执行完那个读函数结束后突然跳到那里不知道为什么,不用他的系统读块的数据却没问题,还在研究中。
最后硬着头皮看咱的代码,发现我们没有申请和释放操作 QQ图片20160322113542.png 但是这里设置的却是0,意思应该是不支持长文件名吧,1是放在静态工作区,2是放在栈,3是放在堆,最后还看到给的一句提示说本文件用到局部变量比较多所以将栈调大一点,看到代码里面Stack_Size      EQU     0x00002000 (栈) Heap_Size       EQU     0x00000200(堆);然后我就想既然这里没有用到内存分配,是不是可以把堆的那部分内存清0?还有就是STM32F10ZET6的RAM是64K,而这里堆栈加起来8K多,剩下50多K干嘛去呢?是全部用于程序代码缓存?
还有就是如果再加上程序员分配的堆也在这里,一些变量等都在这里。
那么这里面的内存分配是有两部分组成一种是编译器分配,一种是程序员分配和释放的堆。甴编译器分配的我可以认为他有独特算法可以让分配的内存不会重叠。但是程序员分配的堆,程序员不知道那些地址分配的没有(他建立的表应该只能知道自己分配了那些内存吧),甴程序员建立的地址分配表会不会可编译器分配的地址重叠,而编译器是否也能知道程序员那些地址已经分配过了呢?
最后就是每次编译后都要看堆栈占了多大,然后去分配堆栈大小,那为什么不直接干脆将堆栈设置到最大64K,若不能设置最大,那么干脆设置到极限可以么,或者说RAM这64K应该要怎么分配呢?
本人小白,望大神指教,不甚感激!!!
最后问一下那位大神知道那里有不错的嵌入式培训班,或者课程,或者收徒弟的,收了我吧
回复

使用道具 举报

4

主题

9

回帖

14

积分

新手上路

积分
14
 楼主| 发表于 2016-3-22 12:10:59 | 显示全部楼层
自己顶一下
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106726
QQ
发表于 2016-3-22 21:07:16 | 显示全部楼层
非常感谢楼主的分享精神和对我们论坛的支持,认真的读完了,先置酷。
1.  我们的论坛一直都是对外开放的,没有注册限制,估计你说的是QQ群吧,QQ群是购买了才可以加入。
2.  早期的V3板子我没有参与,现在的V4,V5和V6板子中除了emWin,FatFS,ST固件库等等这些库里面是英文的我们都没有动,
     保证英文原版,其余我们做的应用和BSP驱动全部有详细注释。
3. 堆空间是用于,动态内存申请和释放,即malloc和free,还有部分C库函数也是要使用的,切不可取0,除非基本不使用C库函数。
4. 栈空间主要是局部变量,函数嵌套,中断嵌套,函数形参等都是用的栈空间。
5. 除了堆栈空间,其余的全局变量用处也很多。
6. 强烈建议楼主学习一下MDK生成的.map文件,学习了这个文件,你会对这种变量种类有一个全面的认识。


兄弟还有什么问题,找我交流即可,另外关于.map文件和这些变量种类我有做过视频教程,进行了详细的讲解,楼主可以看一下:
http://www.armbbs.cn/forum.php?mod=viewthread&tid=15408
1.png
回复

使用道具 举报

4

主题

9

回帖

14

积分

新手上路

积分
14
 楼主| 发表于 2016-3-23 18:24:07 | 显示全部楼层

回 eric2013 的帖子

eric2013:非常感谢楼主的分享精神和对我们论坛的支持,认真的读完了,先置酷。
1.  我们的论坛一直都是对外开放的,没有注册限制,估计你说的是QQ群吧,QQ群是购买了才可以加入。
2.  早期的V3板子我没有参与,现在的V4,V5和V6板子中除了emWin,FatFS,ST固件库等等这 .. (2016-03-22 21:07) 
非常感谢楼主耐心的回答,还有个疑问就是现在的例程是否兼容以前的板子呢?
回复

使用道具 举报

4

主题

9

回帖

14

积分

新手上路

积分
14
 楼主| 发表于 2016-3-23 18:27:04 | 显示全部楼层

回 ffsqlove 的帖子

ffsqlove:非常感谢楼主耐心的回答,还有个疑问就是现在的例程是否兼容以前的板子呢? (2016-03-23 18:24) 
看到了你们的目录,虽然没有看到内容,非常棒,希望能推广出去,让别人知道你们这个品牌,因为我也是武汉的学生[s:151][s:151][s:151]
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106726
QQ
发表于 2016-3-24 15:53:55 | 显示全部楼层

回 ffsqlove 的帖子

ffsqlove:看到了你们的目录,虽然没有看到内容,非常棒,希望能推广出去,让别人知道你们这个品牌,因为我也是武汉的学生[s:151][s:151][s:151]
 (2016-03-23 18:27) 
谢谢[s:142]
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-1 18:21 , Processed in 0.174507 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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