GE IS210DRTDH1A(IS200DRTDH1A)
IS210DRTDH1A(IS200DRTDH1A)
IS210DRTDH1A(IS200DRTDH1A)
1. 实时系统内存分配
实时系统分为硬实时系统和软实时系统。硬实时系统是指系统中各任务不仅要执行无误而且要做到准时;软实时系统是指系统中各任务运行的越快越好,并不要求限定某一任务必须在多长时间内完成。
可以看出动态内存分配是绝对不能用于硬实时系统的,因为动态分配具有时间不确定性(分配时间与内存块数量有关),而且动态分配可能产生分配不成功的情况。所以对于硬实时系统,只能采用静态内存分配方式。静态分配是指在编译或链接时将程序所需的内存空间分配好,这样不会出现分配失败的情况。
其实对于大多数实时系统而言,内存分配都是采用两种方式的结合,即动静结合的分配方式。
2. 动静结合内存分配的一种实现
对于整个内存,把它分为4个部分,即中断向量区、系统映射区、系统内存区和用户内存区。如图1所示。
其中中断向量表和系统映射区在编译时已经设定好,即采用静态分区的方式。剩下的两个部分可以按用户要求配置。
2.1 系统内存区分区
对于整个系统内存区,还需要要进行分区操作,使它产生多个分区,每个分区中内存块的大小相等,各个分区之间内存块大小不等。这样来满足多种内存申请需求。
2.1.1 系统分区类结构定义
系统建立了一个内存块结构,它由一个指向下一个内存块的指针构成,因为系统使用单向链表来管理空闲内存块,所以必须用每个内存块的这个指针来让所有的空闲内存块连成一个链表。

图1 内存划分示意图
结构如下:
struct memblock
{
void * next;
};
对于内存分区,采用面向对象的方式,这样减少了全局变量的使用,同时提高了可操作性。系统建立了内存分区类结构。它包含了该分区的信号量、内存区的起始地址、内存块大小、内存块数量、空闲内存块数量、空闲内存块链表和链表尾部等。类结构定义如下:
class mempartition
{
private:
semphore s; //控制该内存分区的信号量
public:
long *start; //块起始位置
void *freeulist; //空闲内存块链表
void *tail; //空闲内存块链表尾部
int unitsize; //内存块大小
short unitnum; //内存块数量
short freeunum; //空闲内存块数量
mempartition(); //初始化链表、信号量
void *GetUnit(); //获取内存块
void PutUnit(void *); //释放内存块
};
因为每个内存分区都是多任务共享的,每次只能有一个任务或中断服务程序进入该内存分区,所以需要设置信号量来管理它,当然也可以采用关中断的方式,关中断可能导致中断响应延迟等问题,所以没有采用这种方式。
07KP93B
07KR228
07KR264dR1
07KR264b
07KR220dR1
07KR220R1
07KR240R2
07KR240bR2
07KR228R2
07KT51
07KR51-A3.6
07KR31
07KT31
07KP96
07KR91
07KT92
07KP90
07KT93
07KP92
07KP92E1
07KP94
07KP95
07KT94
DSAI303
DSAI305
DSAO301
DSAV110
DSAV111
DSBB102
DSBB107
DSBB110
DSBB110A
DSBB170
DSBB175
DSBBN001-0
DSBBN002-0
DSBC110
DSBC111
DSBC170
DSBSN001
DSCA114
DSCA124
DSCA125A
DSCA130
DSCA170
DSCA180B
DSCA190V
DSCA310
DSCA325
DSCI112
DSCL110
DSCL110A
DSCS115
DSCS116
DSCS117
DSCS131
DSCS150
DSDI301
DSDO301
DSDON001
DSHM101
DSHM110
DSHM130
DSHM301
DSHM302
DSIC111
DSIH700
DSIH71
DSIH75VF
DSIH900
DSMB110
DSMB112
DSMB115
DSMB116
DSMB123
DSMB124
DSMB125
DSMB126A
DSMB127
DSMB133
DSMB137
DSMB144
DSMB151
DSMB173
DSMB175
DSMB176
DSMB178
DSMB340
DSMC112
DSMD110
DSMD112
DSMD113
DSPB110
DSPB112
DSPB120
DSPC-150
DSPC154
DSPC155
DSPC157
DSPC170
DSPC170H
DSPC171
DSPC172
DSPC172-2
DSPC172H
DSPC3001
DSPC3121
DSPC3122
DSPC3221
DSPC365
DSRB110
DSRB310
DSRF150
DSRF160
DSRF180A
DSRF180M
DSRF182
DSRF182K13
DSSA165
DSSB110
DSSB120
DSSB140
DSSB145
DSSB146
DSSB170
DSSR 122M
DSSR116
DSSR120
DSSR121
DSSR122
DSSS170
DSTA-121A
DSTA002
DSTA121
DSTA133I
DSTA170
DSTA180
DSTC 121
DSTC 456
DSTC110
DSTC130
DSTC160
DSTD-306
DSTD-W150
DSTD120
DSTD155
DSTDN001
DSTK114
DSTK126
DSTK151V
DSTK152
DSTK155
DSTK176
DSTK179
DSTV110
DSTX 150
DSTX001
DSTX151
DSTX152
DSTXN001-0
QHFG-203
QHFT200F
QHFT201
07KP60R101GJV3074360R101
07KP62GJR5240400R105
07KP64GJR5240600R0101
07KR220 R2G3V30722428R2
07KR240 R1GJV3072402R1, 07KR240b
07KR240 R6GJV3072449R6
07KT228GJV3072417R1, 07KT228dR1
07KT240DR1GJV3072419R1, 07KT240R1
07KT60R101GJV3074381R101
1SAY11 0165R000307KP91
1SBP260010R100107KR51 07KR51-U3.6
1SBP260011R100107KR 51-P30; 07 KR 51-F12,07KR51-Q30
1SBP260012R100107KT51 07KT51-U3.6,07KT51-030,07KT51-e07KT51-R3.3
1SBP260012R200207KT51
1SBP260014R100107KR51-A3.6
1SBP260512R100107KT51
FPR3600227R020407KR31
FPR3600227R020607KR31
FPR3600227R120207KR31
FPR3600228R020407KT31
FPR3600228R020607KT31
FPR3600228R120207KT31
GATS110112R000107KP96
GATS110112R000207KP96
GATS110112R000307KP96
GATS110112R001107KP96
GATS110112R001207KP96
GATS110112R001307KP96
GJR5250000R010107KR91
GJR5250000R015107KR91
GJR5250000R020207KR91, 07KR91D, 07KR91B
GJR5250000R025207KR91
GJR5250000R030307KR91
GJR5250000R035307KR91B
GJR5250500R010107KT92
GJR5250500R020207KT92, 07KT92D 07KT92C
GJR5250500R026207KT92
GJR5250500R090207KT92
GJR5251000R010107KP90
GJR5251000R020207KP90
GJR5251000R030307KP90
GJR5251300R010107KT93
GJR5251300R016107KT93
GJR5251300R017107KT93,07KT93G
GJR5251300R217107KT93-S
GJR5251500R10107KP92
GJR5251500R116107KP92E1
GJR5251700R010107KP94
GJR5252000R010107KP95
GJR5252100R010107KT94
GJR5252100R016107KT94D, 07 KT 94K, 07 KT 94i
GJR5252100R020107KT94
GJR5252100R026107KT94
GJR5252100R316107KT94
GJR5252100R326107 KT 94