ABB DI818(3BSE069052R1)
系统提供了Mem_Alloc/Mem_Free两个函数来支持系统分区的申请和释放。申请的算法很简单,采用***适配方法从分区链表中找到合适内存分区,如果该区空闲内存链表不为空,则返回该链表***个内存块地址,否则查看下一个分区。如果找不到合适的内存块,则返回空指针。
释放算法稍微复杂一些,它需要先检查该内存块属于哪个分区。这样做非常必要,如果把一个小块放到大块的内存分区中,一个任务申请了该空间,则该空间的一部分将跨越到另一个内存块,对该内存块的操作可能覆盖另一个内存块的数据。如果把一个大块放到了小块的分区中,则在分配的时候将分配了多余的空间,造成了内存空间的浪费。找到所 图2创建内存分区流程图属分区后,直接把该块放到该区空闲内存链表的尾部。
上述系统分区的方式其实是小范围动态分区上实现的静态方式。因为每个内存块大小是固定的,这样不可避免地要浪费一部分空间。对于这个问题的解决,系统还提供了一种纯动态的解决办法,就是调用malloc/free函数来申请内存块。
2.1.3 内存用户区的动态内存分配
从内存划分图中可以看到有一块用户内存区,这是一块内核不会使用的内存区。该区留给用户使用,对于这块区域的申请和释放不调用系统提供的Mem_Alloc/Mem_Free函数,而是直接调用c语言提供的malloc/free函数。malloc具有不确定性,因为它的执行时间和空闲内存块的数量有关,而且多次使用malloc/free调用和释放内存块,可能产生大量的内存碎片。所以这种方式的调用要谨慎。由于用户内存区大小是可配置的,所以用户可以控制该区大小以减少碎片产生的问题。同时对于系统调用,例如任务堆栈分配,不会因为碎片太多而导致分配失败的问题。
3. 小结
动静结合的方式给用户提供了比较大的自由度,用户可以从系统分区中申请内存块,也可以从用户内存区申请内存块。这样增加了系统的灵活性,同时也限制了大量碎片产生的可能(在不频繁删除建立系统内存分区的前提下)。也增加了部分c代码的可移植性。
DSQC 539 DSQC 358C DSQC 346C
DSQC 346E DSQC 327A DSQC 509
DSQC 504 DSDI 130 DSQC 351
DSQC 101 DSQC 107 DSQC 202
DSQC 227 DSQC 236A DSQC 236K
DSQC 257 DSQC 266A DSQC 316
DSQC 328A DSQC 334 DSQC 345A
DSQC 345B DSQC 345C DSQC 345D
DSQC 345E DSQC 346B DSQC 346C
DSQC 346U DSQC 352A DSQC 358C
DSQC 358E DSQC 358F DSQC 358G
DSQC 363 DSQC 365 DSQC 500
DSQC 501 DSQC 503 DSQC 505
DSQC 506 DSQC 508 DSQC 518A
DSQC 518B DSQC 522 DSTD 160
YXX 157A YXZ 149A YYE 109A
YYT 102E DSQC539 DSQC358C
DSQC346C DSQC346E DSQC327A
DSQC509 DSQC504 DSDI130
DSQC351 DSQC101 DSQC107
DSQC202 DSQC227 DSQC236A
DSQC236K DSQC257 DSQC266A
DSQC316 DSQC328A DSQC334
DSQC345A DSQC345B DSQC345C
DSQC345D DSQC345E DSQC346B
DSQC346C DSQC346U DSQC352A
DSQC358C DSQC358E DSQC358F
DSQC358G DSQC363 DSQC365
DSQC500 DSQC501 DSQC503
DSQC505 DSQC506 DSQC508
DSQC518A DSQC518B DSQC522
DSQC604 DSQC 604 DSTD160
YXX157A YXZ149A YYE109A
YYT102E 3HAB2245-1 3HAC14363-1
ABB 3E042759U ABB 3HAC020079-001
ABB 3HAC020633-001 ABB 3HAC022313-001
ABB 6369901-614 ABB 6369901-615
ABB 6369901-625 ABB 6369901-640
ABB 3E041775 ABB 3E041776
ABB 3E041926 ABB 3E042760U
ABB 3HAC11530-1 ABB 3HNE00955-1
ABB 6369901-639 ABB 3E041250
ABB 3HAC14864-1 ABB 3HNM11971-1
ABB 3HNE8101-1 ABB 3E041460
ABB 6369901-617 ABB 6369901-383
ABB 6369901-454 ABB 6369901-467
ABB 3HAC022104-001 ABB 3E033864
ABB 3E041278 ABB 3HAC17971-1
ABB 3HAB8101-1 ABB 3HAC1620-1
ABB 3E042759 ABB 3E041927U
ABB 3HAC6546-1 ABB 3HAC14265-1
ABB 3HAC023447-001 ABB 3HAC18159-1
ABB 3HAC14279-1 CCBM-X4-DSQC-X4 3E041579
DSQC 224 YB560103-BE DSQC256A 3HAB2211-1
DSQC 266H 3HAB8800-1 DSQC257D 3HAB2208-1
DSQC 331 3HAB7215-1 DSQC266T 3HAB8802-1
DSQC 340 3HAB6914-1 DSQC361 3HAC0373-1
DSQC 320 3HAB7231-1 DSQC317 3HAB2220-1
DSQC 253 3HAA3563-AMA DSQC345C 3HAB8101-3
DSQC 346A 3HAB8101-5 DSQC325 3HAB2241-1
DSQC 350 3HNE00025-1 DSQC354 3HNE00065-1
DSQC 266A 3HAB8796-1 DSQC266B 3HAB8797-1******************************
DSQC 266C 3HAB8798-1 DSQC266K 3HAB8799-1
DSQC 266G 3HAB8801-1 DSQC266U 3HAB8803-1
DSQC 371 3HAC2480-1 DSQC236D 3HAB2207-1
DSQC 315 3HAB2214-1 DSQC330 3HAB6372-1
DSQC 369 3HAC2424-1 DSQC370 3HAC2425-1
DSQC 372 3HAC2481-1 DSQC344 3HAB7686-1
DSQC 508 3HAC5393-2 DSQC301 3HAA3573-ABA
DSQC 324 6369901-331 DSQC266T 6369901-353
DSQC 314A 3HAB2215-1 DSQC314B 3HAB2216-1
DSQC314C 3HAB2231-1 DSQC345D 3HAB8101-4
DSQC346C 3HAB8101-7 DSQC346G 3HAB8101-8
DSQC363 3HAC1462-1 DSQC365 3HAC1620-1
DSQC517 3HAC7055-1 DSQC336 3HNE00001-1
DSQC224 6369901-179 DSQC208A YB560103-AS
DSQC248 3HAA3563-AAA DSQC249B 3HAA3563-AHA
DSQC226 YB560103-BH DSQC252 3HAA3563-ALA
DSQC223 6369901-178 DSQC252 6369901-236
DSQC260 3HAB2206-1 DSQC563 3HAC16035-1
DSQC328A 3HAC17970-1 DSQC345A 3HAB8101-1
DSQC346B 3HAB8101-6 DSQC504 3HAC5689-1
DSQC501 3HAC3617-1 DSQC108 YB161102-AN
DSQC210 YB560103-AM DSQC255 3HAA3563-ARA
DSQC317 6369901-308 DSQC345E 3HAB8101-14
DSQC321 V DSQC116 YB161102-BE
DSQC239 YB560103-CH DSQC254 3HAA3563-APA
DSQC307 3HAA3573-AJA DSQC249A 6369901-237
DSQC323 6369901-330 DSQC315 6369901-332
DSQC243 YB161102-CT DSQC221 YB560103-BA
DSQC229 YB560103-BM DSQC232 YB560103-BR
DSQC241 YB560103-CL DSQC358C 3HAB8101-10
DSQC358E 3HAB8101-12 DSQC102 YB161102-AC
DSQC259 3HAB2205-1 DSQC345B 3HAB8101-2
DSQC500 3HAC3616-1 DSQC503 3HAC3619-1
DSQC358G 3HAB8101-16 DSQC230 6369901-120
DSQC253 6369901-218 DSQC346C 6369901-421
DSQC122 YB161102-BH DSQC230 YB560103-BN
DSQC302 3HAA3573-ACA DSQC266A 6369901-349
DSQC266G 6369901-352 DSQC327 6369901-455
DSQC539 6369901-574 DSQC308 3HAA3573-AKA
DSQC266B 6369901-350 DSQC266C 6369901-351
DSQC334 6369901-395 DSQC331 6369901-418
DSQC114 YB161102-BD DSQC136 YB161102-CK
DSQC138 YB161102-CM DSQC139 YB161102-CN
DSQC204 YB560103-AE DSQC118 YB161102-BL
DSQC258 3HAA3563-AUA DSQC346E 3HAB8101-11
DSQC209 6369901-102 DSQC249B 6369901-217
DSQC248 6369901-226 DSQC100 YB161102-AA
DSQC112 YB161102-BC DSQC209 YB560103-AL
DSQC257 3HAA3563-ATA DSQC358F 3HAB8101-15
DSQC373 3HAC3180-1 DSQC504 3HAC5689-1
DSQC346U 3HAB8101-13 DSQC202 6369901-100
DSQC211 6369901-104 DSQC228 6369901-117
DSQC241 6369901-216 DSQC335 6369901-327
C 6369901-425 DSQC346E 6369901-464
DSQC219 YB560103-AY DSQC233 YB560103-BS
DSQC564A 3HAC022104-001 DSQC540A 6369901-610
DSQC105 YB161102-AF DSQC508 3HAC5393-2
DSQC323 3HAB5956-1 DSQC324 3HAB5957-1
DSQC539 3HAC14265-1 DSQC505 3HA***296-1
DSQC230 3E041456 DSQC244 3HAA3563-AKA
DSQC115 YB161102-BS DSQC129 YB161102-BV
DSQC351 3HNE00006-1 DSQC126 YB161102-BM
DSQC359 3HAC0261-1 DSQC524 3HAC10846-1
DSQC600 3HAC12814-1 DSQC601 3HAC12815-1
DSQC611 3HAC13389-2 DSQC561 3HAC16036-1
DSQC332A 3HAC17973-1 DSQC127 YB161102-BY
DCQC355 3HNE00554-1 DSQC237 YB560103-CF
DSQC626 3HAC020465-001 DSQC249A 3E041641
DSQC334 3HA***45-1 DSQC352 3HNE01590-1
DSQC377 3HNE01586-1 DSQC266H 6369901-354
DSQC223 YB560103-BD DSQC368 3HAC2183-1
DSQC313 6369901-339 DSQC661 3HAC026253-001
DSQC633 3HAC022286-001 DSQC210 6369901-103
DSQC129 6369901-33 DSQC314B 6369901-335
DSQC332 6369901-403 DSQC113 YB161102-BB
DSQC119 YB161102-BF DSQC121 YB161102-BN
DSQC125 YB161102-BR DSQC124 YB161102-BU
DSQC130 YB161102-CA DSQC135 YB161102-CH
DSQC137 YB161102-CL DSQC200 YB560103-AA
DSQC201 YB560103-AB DSQC205 YB560103-AD
DSQC206 YB560103-AG DSQC212 YB560103-AP
DSQC218 YB560103-*** DSQC220 YB560103-AZ
DSQC225 YB560103-BG DSQC322 3HAB5960-1
