随笔分类 - 嵌入式软件架构设计
摘要:heap2.c的内存管理机制会导致内存碎片的问题,系统运行久后会出现无法分配大块内存的情况,heap4.c中的管理机制提供了解决方法,它是在heap2.c的基础上添加了地址相邻空闲块间合并的功能,而heap5.c是对heap4.c的进一步扩展,它能够支持多块不连续分布的RAM空间作为堆使用,本篇将对heap4.c、heap5.c中的管理机制进行分析。
阅读全文
摘要:本篇文章将会对FreeRTOS源码中第二种内存管理机制heap2.c进行讲解,在heap2.c中同样使用一个全局静态数组ucHeap来表示内存,heap2.c内存管理机制较heap1.c而言增加了内存释放的功能,通过使用链表对内存进行有效管理。
阅读全文
摘要:近几年来,FreeRTOS在嵌入式操作系统排行榜中一直位居前列,作为开源的嵌入式操作系统之一,它支持许多不同架构的处理器以及多种编译工具链,具有轻量级、容易移植和使用的特点。本篇文章将会对FreeRTOS提供的几种内存分配策略进行介绍,FreeRTOS允许开发者根据自己的项目实际需要选择不同的内存分配策略或者自定义分配内存策略。
阅读全文
摘要:嵌入式固件的系统区(system disk,SD)包括操作系统、驱动、中间件、应用和字库、UI资源等文件,本文讲述SD区的文件系统设计。文件系统最主要的目标是为了实现单个文件的定位和读写。因为一般代码都是不可自修改的,即量产之后不会有写操作,所以嵌入式系统的SD文件系统就是为了能够简单、高效地定位某个文件和读取文件中的数据。本文将阐述SD文件系统的设计要点。
阅读全文
摘要:在嵌入式系统中,驱动都是以API的方式提供给应用进行调用。这里介绍嵌入式系统的API设计和管理实现方法。
阅读全文
摘要:本节讲述内存紧缺型嵌入式系统中基于代码分块(Bank)管理思想对可执行文件的重构,即对程序编译后的可执行文件进行重新组织、打包,以在加载阶段获得最高的执行效率,减少内存占用。要使执行效率高,意味着可执行文件的格式尽可能简单,解析执行文件的流程简单,相应地,解析过程代码量少,即能够减少内存的占用。
阅读全文
摘要:本文继续阐述基于低端控制器CPU的SoC固件架构设计。这一节讲述内存空间的具体规划分配,包括嵌入式固件系统软件层次、程度段组成、物理内存分块设计和具体的程序内存空间分配原则。
阅读全文
摘要:代码数据分Bank管理的思想是:不同的代码块链接到不同的地址段,但会被加载到同样的内存空间块上运行。即虚拟运行地址不同,而实际加载物理地址是相同的。不同的代码块之间的调用可以通过两种思路来解决:一种是在编译时主动插入管理切换的引导代码,一种是通过硬件(如上一节介绍的MMU设计方法)来实现无缝的切换。同时,两种方式都需要链接脚本的精心设计来支持。
阅读全文
摘要:处理器系列的芯片(如X86、ARM7以上、MIPS)一般都会有MMU,跟操作系统一块实现虚拟内存管理,MMU也是Linux、Wince等操作系统的硬件要求。而控制器系统的芯片(面向低端控制领域,ARM1,2,MIPS M系列,80251等)一般都没有MMU,或者其只有单一的线性映射机制。本文要谈的是控制器领域SoC的内存管理单元的硬件设计,其重要的理念同样是代码和数据分时复用物理内存空间,在保障系统功能和性能的基础上最大限度地节省物理内存的目的。
阅读全文
摘要:内存是SoC(System on Chip,片上系统)集成设计的重要模块,是SoC中成本比重较大的部分。内存管理的软硬件设计是SoC软件架构设计的重要一环,架构设计师必须要在成本和效率中取得平衡,做到在节省内存的同时保证整个系统的性能。系统内存需求评估是对嵌入式软件架构师的最基本要求,同时也是其最重要的技能之一。一般在SoC项目立项的时候,架构师就要完成系统内存需求评估。
阅读全文
摘要:本文讲述内存资源紧缺型嵌入式系统中节省内存的软件设计方法。一般主控是单片机控制器的电子产品的成本跟内存的关系可是成正比的,尤其在SOC芯片设计时是固件开发需要重点关注的。大量量产前要确定内置SRAM的大小,而且是在满足功能需求的情况下越小越好。这就需要考究软件系统的设计和编程开发的技能。
阅读全文
摘要:我们都知道MIPS架构体系是32位精简指令集(MIPS32),事实上MIPS在进入控制器市场时还推出了MIPS16e指令集模式,号称能够使编译后的代码减少30%左右,类似于ARM架构中是arm32指令(32位)和thumb(16位)指令。内存资源紧缺型系统一般会使用MIPS16e模式进行编译,以...
阅读全文
摘要:FAT32文件系统在嵌入式中被广泛使用,但其最多可以支持单个文件大小到4GB。NTFS和EXFAT两种文件系统能够支持超过4GB的文件,都是微软制定的协议标准。但两者面向的场景是不一样的,这里谈谈两个文件系统在嵌入式系统中的适用性。 文件系统主要的操作就是读写操作,而嵌入式系统一般使用...
阅读全文
摘要:一、引言 本文介绍运行时库实现的功能,你会看到在main函数执行之前都做了什么。先来理解以下代码:#include void init(void) __attribute__((constructor));void init(void){ printf(“before enter main!\...
阅读全文
摘要:现在新买的安卓千元机都是2G内存的了,我们还要绞尽脑汁地省内存?是的,那是高端处理器的特色,咱们这里讲的是资源紧缺型的嵌入式系统设计方法。一般主控是单片机控制器的电子产品的成本跟内存的关系可是成正比的,尤其在SOC芯片设计时是固件开发需要重点关注的。大量量产前要确定内置SRAM的大小,而且是在满足...
阅读全文

浙公网安备 33010602011771号