4

关于投票
模拟器资源汇总

       在学习单片机知识的时候,我最苦恼的事情就是没有一个调试环境,因为我没有开发板,所以自己想开发一个数字钟之类的东西都很困难,要跑到实验室,求老师借一个仿真器~~,所以当时,我一直在找51的仿真平台,实际上也就是51模拟器。当时找到的几个模拟器比较丑陋,功能比较弱,而且只有51的模拟,没有其他硬件的模拟,所以我用的很不爽。后来,由于从事硬件方面的东西,条件好了,模拟器也就被我淡忘了。

      
       时至今日,我与计算机体系结构和操作系统走的更近了,软件开发成为我工作中的一部分,所以又提出了很强的模拟器需求。研究体系结构离不开模拟器,设计开发操作系统也离不开模拟器。在操作系统中开发一些软件,在模拟器上测试,发现早期的一些问题,并且与硬件系统的开发进行了很好的切分,所以模拟器对于软件开发人员或者是硬件体系结构开发人员都非常重要。


    在此,我整理了一些模拟器的资源,供大家参考。没有整理进去的我会在后期补充,大家还有什么好的模拟器,也可以在本页发布。

1.         bochs,历史悠久的X86模拟器(Vmware还久),也就是原来的Plex86。可运行Windows/Linux/*BSD/DOS,最大的优点是:OpenSourceFree。开源站点:http://bochs.sourceforge.net/

2.         VMips(指令模拟器)只能支持Mips指令集,有点过时,也有点局限。开源站点:http://www.dgate.org/vmips/index.shtml

3.         SPIMspim提供了一个更好的用户界面,并且能够运行在Unix/Windows/Dos下,同样完整地实现了MIPS R3000指令集,图形界面就如同大多数的调试工具一样使用,可以直接读取和解释MIPS R3000汇编指令。http://pages.cs.wisc.edu/~larus/spim.html

4.         PearPC -PowerPC 模拟器。开源站点:http://pearpc.sourceforge.net/

5.         VirtualPCVmware目前和将来最强大的竞争对手。开源站点:http://www.microsoft.com/windowsxp/virtualpc/

6.         dongfeng,(developed by chinese)一个正在处于开发阶段的mips功能模拟器,目前发布第一版,代码和功能都比较简单,可以进行思想的学习。开源站点:http://dongfeng.sourceforge.net/

7.         simos一个非常不错的模拟器,龙芯开发团队使用过的一个mips模拟器。开源站点:http://simos.stanford.edu/

8.         mips模拟器收藏室。该站点收藏了很多mips的模拟器项目,非常不错http://www.linux-mips.org/wiki/Emulators

9.    skyeye嵌入式系统模拟器。这是一个嵌入式系统的模拟器,能够在这个系统中运行uc/os、uclinux,可以模拟ARM7TDMI, ARM720T,StrongARM, XScale, Blackfin CPU核,并且模拟了多种外围设备。这个模拟器诞生在清华大学,在此推荐一下。开源站点:http://www.skyeye.org/index.shtml


系统分类: 嵌入式
用户分类: 嵌入式系统设计
标签: 嵌入式操作系统,模拟器
来源: 原创
发表评论 阅读全文(700) | 回复(7)

3

关于投票
嵌入式系统中内存管理方法

    内存管理在嵌入式系统中是一个比较重要的问题,如果处理不好内存资源的管理,那么系统的鲁棒性将会大大降低,更严重的话系统将会无法正常运行。过去我在DSP平台上开发过tcp/ip协议栈,遇到过此类情况,所以在此我想对嵌入式系统中的内存管理方法进行总结,重点说明为什么不能在嵌入式系统中应用malloc函数。

 

malloc在嵌入式系统中应用的问题

       在嵌入式系统中采用静态内存分配的方法比较可靠,但是,很多应用需要进行内存的动态分配。提起动态内存分配,大家不约而同的会想到malloc函数,该函数是C语言中定义的标准内存分配函数,一般的C语言编译器都会提供该函数,例如在嵌入式应用中常用的编译开发环境Keil CCCS以及ADS都会提供此类内存分配函数。

 

       编译器提供的malloc内存分配函数的实现基于堆算法。动态内存区域是一个堆空间,分配内存时总是从堆的头部向后查找,分配一块满足大小的一段空间,释放资源时检查是否可以与堆空间中的临近空闲资源合并成大块,如果可以合并,那么堆空间中的连续资源将会增加,否则将会产生一个新块链接在堆空间中的链表中。用于内存管理的堆空间链表示意如下图:

    在系统初始化时,动态分配的堆空间为一整块资源,随着内存资源的不断分配、释放,堆空间将会被不断切分,切分成很多细粒度的空闲块资源。当堆空间被切分成很多小块时,系统就不可能再为大块需求分配资源了。虽然细粒度的块聚合起来能够满足应用需求,但是,堆算法已经无能为力了,就会出现malloc分配失败的情况。

 

       从堆算法的本质出发,我们就可以认识到malloc在嵌入式系统中应用存在的问题。当系统长时间运行之后,内存资源将会变得越来越零散,运行之初大块的内存已经不复存在,可能只剩下很多小块的资源。所以在大块内存需求的情况下,系统将会出错,所以系统的鲁棒性将会随着系统运行时间的增长而下降。因此,在嵌入式应用中不建议使用malloc进行内存分配。

 

内存分配的堆算法参考程序:rar

 

小型嵌入式系统中的内存管理方法

       小型嵌入式系统中经常采用分块的内存管理方法。其思想比较简单,即将内存资源分成若干块,当需要内存资源时,获取一个块资源,使用完毕之后再将块资源释放,归还给系统。采用分块算法的一个问题是:如何确定块大小?因为系统中的应用对块大小需求不一样,如果块过大,那么利用率下降,如果块过小,那么无法满足分配需求。

 

       针对该问题,提出了块资源池的概念,每个池中的块大小都不一样。应用提出内存资源需求后,系统根据需求到合适的池中得到资源块;释放资源时,再将资源块释放到对应的池中。在实际的uc/os操作系统中,就采用了这种块资源算法的内存管理方法。虽然,分块算法在效率上不是十分高效,存在块内碎片,但是,对于简单、小型的嵌入式应用,这种管理算法已经足够了。

 

大型嵌入式系统中的内存管理方法

       目前,最有效的内存管理方法是虚拟内存技术,通过虚拟内存技术可以将逻辑内存和物理内存分开,程序运行在逻辑内存空间,对于每个任务而言都能看到一个很大的内存空间,逻辑内存和实际的物理内存通过页表进行动态映射。由于虚拟内存技术涉及到页表的映射查找,所以如果采用纯软件的手段,那么实现效率将十分低下,因此往往需要硬件的加速。这个硬件加速单元就是MMUmemory management unit),其本质上就是一个lookup table。因此,采用虚拟内存技术的嵌入式系统都需要CPU集成MMU,否则该套机制很难实现。

      

       关于虚拟内存技术的具体原理或者Linux中的实现可以查看其它文献,或者等待本站的后继Blog~~
 

系统分类: 嵌入式
用户分类: 嵌入式系统设计
标签: 嵌入式操作系统
来源: 原创
发表评论 阅读全文(290) | 回复(0)

1

关于投票
嵌入式操作系统开源项目列表

<!--[if !supportLists]-->目前,网上有很多开源的嵌入式OS项目,对嵌入式RTOS感兴趣的朋友不妨关注一下:)


1.         t-kernel。这是目前嵌入式领域应用最为广泛的开源实时内核,为日本开发,开源站点为:http://www.t-engine.org/

2.         uc/oshttp://www.micrium.com/ micrium公司的站点,站点上有很多uc/os相关的资料,是开发uc/os系统的官方站点。

3.         uclinux。在通用linux平台的基础上,去除了MMU内存管理单元,精简了glibc等应用程序库,适合在无需虚拟内存的嵌入式环境下应用。官方站点:http://www.uclinux.org/

4.         ecosEcos是一个开源,完全免费的实时嵌入式操作系统,官方站点:http://ecos.sourceware.org/

5.         rtlinux。在同用linux平台的基础上构建的实时Linux系统,在实时性较强的环境中应用。开源站点为:http://en.wikipedia.org/wiki/RTLinuxhttp://www.rtlinuxfree.com/

6.         lxRTOS。爱好者自己开发的开源微系统实时内核,只能用于学习,不可商用。官方站点:http://www.lx-rtos.com/

7.         Nucleus Plus。美国源代码操作系统商ATI公司推出的新一代嵌入式操作系统,属于抢先式实时多任务操作系统内核, 95%的代码使用ANSI C编写,非常便于移植于各种处理器。相关站点:http://en.wikipedia.org/wiki/Nucleus_RTOS

8.        Windows CE。这是微软开源的嵌入式操作系统,http://en.wikipedia.org/wiki/Windows_CE

9.         tinyos。应用于无线传感器网络领域的嵌入式操作系统,由美国伯克利分校完成。相关资源:http://www.tinyos.net/http://en.wikipedia.org/wiki/TinyOS

系统分类: 嵌入式
用户分类: 嵌入式系统设计
标签: 嵌入式操作系统
来源: 整理
发表评论 阅读全文(296) | 回复(3)

1

关于投票
usb_d12固件程序共享
    到目前为止,接触pdiusbd12程序已经接近5年多了,差不多6年光景了。前一段时间搞了一个usb开发的小项目,又将usb的固件等程序整理了一遍,该程序的源码如下:
点击下载(欢迎大家下载使用!!!!!!!)

       

        pdiusbd12固件程序主要分成如下几部分:

1、  应用层。该层主要在main.c文件中实现,实现usb设备固件程序的具体功能。

2、  协议处理层。该层又可以分为标准协议层、自定义协议层以及usb事务处理层。主要在usb_protocol.cvendor_request.cd12_isr.c文件中实现。

a)