【安富莱】【RTX操作系统教程】第18章 内存管理 ãRTXæä½ç³»ç»æç¨ã第18ç« å å管ç.pdf (969.74 KB, 下载次数: 45) 2016-2-3 14:51 上传 点击文件名下载附件 % z# E2 y9 \5 S第18章 内存管理 + [/ A# G6 F) A! y" {% ]4 Y. Y+ F 本章节为大家讲解RTX支持的内存管理。 本章教程配套的例子含Cortex-M3内核的STM32F103和Cortex-M4内核的STM32F407。18.1 内存管理介绍18.2 内存管理API函数18.3 实验例程说明(4字节对齐)18.4 实验例程说明(8字节对齐)18.5 总结 ' x* M$ V3 N" m- x* L7 F* E 18.1 内存管理介绍 在ANSIC中,可以用malloc()和free()2个函数动态的分配内存和释放内存,但是,在嵌入式实时操作系统中,调用malloc()和free()却是危险的,因为多次调用这两个函数会把原来很大的一块连续内场区域逐渐地分割成许多非常小而且彼此又不相邻的内存块,也就是内存碎片。由于这些内存碎片的大量存在,使得程序到后来连一段非常小的连续内存也分配不到。另外,由于内存管理算法上的原因,malloc()和free()函数的执行时间是不确定的。 在RTX中,操作系统把连续的大块内存按分区来管理。每个分区中包含整数个大小相同的内存块。如图18.1所示: 图18.1 内存分区利用这种机制,就可以得到和释放固定大小的内存块。这样内存的申请和释放函数的执行时间就是确定的了。 在一个系统中可以有多个内存分区,这样,应用程序就可以从不同的内存分区中得到不同大小的内存块。但是特定的内存块在释放时,必须重新放回到它以前所属于的内存分区。显然,采用这样的内存管理算法,上面的内存碎片文件就得到了解决。 其实RTX的内存管理也非常好理解,可以理解成一个二维数组,比如我们定义一个二维数组为:uint8_t mpool[10][32]。对应到RTX的内存管理上就是定义了10个内存块,每块大小是32字节。如果还需要其它大小的内存块,还可以多定义几个其它大小的。 % ?# X1 V6 b- H
18.2.1 函数_declare_box
18.2.2 函数_declare_box8
18.2.3 函数_init_box
; K; l W3 K$ H% O
18.2.4 函数_init_box8
0 z2 g: H/ s' S/ ]
18.2.5 函数_alloc_box
18.2.6 函数_free_box
2 Y- Y6 s9 a6 T
18.3.1 STM32F103开发板实验
# d! z- V7 c: e, q! s# V! h u3 a& |
( Q; p. R& T! K' M
18.4.1 STM32F103开发板实验
, F- [ O) A. g
* y2 P1 U, }' k E7 z