高级会员
- 积分
- 901
- 金钱
- 901
- 注册时间
- 2015-12-24
- 在线时间
- 197 小时
|
之前一直苦于在MDK5下STM32不能使用Malloc进行动态内存操作,很多程序写和移植起来不太方便,恰巧前阵子看到原子哥的解决办法,参照原子哥的实现思路和网上很多内存操作的实力参考,自己写了一组MMUAPI。
相较原子哥的代码,改进和优化如下。
1、重写了realloc方法,内存重分配时会检查后续空间,如果充足则在原地址上进行拓展而不用重新申请,接口名为mmu_realloc()。
2、重写和优化了memset和memcpy方法,接口名为mmu_memset()和mmu_memcpy(),参考《Cortex M3权威指南》中,关于数据转移指令都是以16位数据为单位进行操作,故在memset和memcpy方法中均使用了基于16位数据的指针进行移动,提升处理效率。
3、新增了和mmu_memcpy2()方法,此方法为和mmu_memcpy()方法的拓展与补足,此方法没有使用16位数据对其的方式,但针对在地址空间交叠的情况下可能产生数据污染的问题进行了处理,可以保证任意地之间的无污染复制。
附件中的MMU.zip为我基于Codeblocks写的一个测试例程,大家可以自行下载CodeBlocks软件然后打开压缩包中的工程查看,在测试工程中我还编写了一个显示内存图表的小函数,方便查看所有内存块的状态。另外,LOG可以输出到文件中,以免LOG过多,在控制台中先出的LOG被冲掉的尴尬。
另一个附件是我基于之前发布的FATFS 0.12b范例工程,使能LFN后,内存分配模式选择3(Heap mode)后,使用此MMU模块进行内存管理的例程,目前测试正常,供参考。
以上,如果发现什么问题或有啥建议,还请不吝赐教。
MMU.zip
(11.93 KB, 下载次数: 355)
|
|