网站公告列表

  没有公告

加入收藏
设为首页
联系站长
您现在的位置: 61IC中国电子在线 >> EDA >> HDL >> 文章正文
  linux-fpga系列文章之—-ppc开发中的内存分配           ★★★ 【字体:
linux-fpga系列文章之—-ppc开发中的内存分配
作者:风雷的技…    文章来源:风雷的技术天地    点击数:    更新时间:2008-1-3    

在FPGA嵌入式开发过程中,有的朋友可能会遇到这样一个情况,要用嵌入式内核做大数据量应用的工程,Bram肯定容量是不够的,需要用到外置DDR内存并在程序中进行内存分配。本文就针对PowerPC嵌入式开发中的内存分配做一个简单的讨论,大部分内容适用于MicroBlaze的开发。

不管是BSB默认成的工程,还是自己定制的工程,一般来讲程序的所有部分都是放在bram上的,很显然,这是一个不适用于大数量IO的情况。如果牵涉到大量的数据的存储,转移等操作,一种比较通用的办法就是用malloc家族的函数进行内存分配。


说到这个malloc,很多朋友可能一下子就想到了xil_malloc。而在使用之后,大部分人遇到的都是分配错误。实际上,在Xilinx EDK文档中就已经说到,The xil_* 家族所有的函数都只能对64KB的缓存进行操作,包括分配内存的函数。这个大小是固定的,目前没有办法改变。换句话说是一种固定的限制。但是malloc/calloc系列函数就没有这种限制。虽然C标准库在嵌入式平台中很多都不要拿来直接用,比如printf这些,没有经过特别的优化,但是在这种特殊时刻……建议完全可以试一下它,因为在大数据量处理中,时间的瓶颈应该是数据处理过程,而不是空间开辟,读取,存储的过程。

光使用malloc还是不够的。我们还要修改ld文件,这样就能自由控制heap和stack的大小。在使用malloc的前提下,把heap和stack都放在内存上,然后就可以自由调整大小了。注意一点的是malloc能分配的最大空间要比实际heap的size小一些,比如heap的size是4000(16384B),那么实际能够给你的空间就是16356B,因为总是有28B是用处来存储分配信息的,这是个人猜想,如果不对欢迎各位朋友指出。

对相关情况做一个总结。实现大数据量内存分配的方法包括:

1. 静态分配你的内存,如果你不嫌麻烦的话。

2. 使用PPC405 + 外部 SDRAM + malloc。

3. 自己实现一个能够处理大于64KB内容的malloc。虽然代码不是很复杂,不过MicroBlaze用户就要注意,它没有MMU,内存碎片的处理是一个问题。

4. 使用像uClinux这样的操作系统。

5. 使用其它基于C的malloc库。

6. 如果有志于在没有MMU的系统上自己实现malloc,可以参考这篇文章

最后再罗嗦两句,这两天感觉到,嵌入式系统中很多程序的错误都是stack溢出引起的,而不是heap的问题。特别是那些从PC端移植过来的程序,因为很多程序在PC端根本就不需要考虑内存管理以及stack、heap的分布。对于PC程序员来说,stack总是那么大,而对于embedded程序员来说,stack总是那么小……

               欢迎点击进入:TI德州中文网   (国内唯一针对TI应用的中文技术网站)    文章录入:admin    责任编辑:admin 
  • 上一篇文章:

  • 下一篇文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关文章
    没有相关文章
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    站长:61IC 湘ICP备05002478号