本帖最后由 hjz007 于 2014-6-28 19:21 编辑
and 发表于 2014-6-28 17:23
砸场子来了,
32字节的时候,各模块是什么配置?
32个字节的时候是指静态占用。运行时的动态堆栈不算,比如一个函数调用R0~R7的堆栈需求。
所有功能全有,只是任务数和内存占用有关,这个系统不采用配置方式来裁剪模块的。
占用内存计算:
一个任务控制块8个字节
任务链表4个字节(一个任务的时候,链表头尾自指向)
一个阻塞任务链表,四个优先级READY任务链表5*4=20个字节
以上是必须的。
一个事件对象4个字节,一个句柄1个字节(如果不需要事件同步,则不占内存)。
如果系统配置成2个任务的话,需要的RAM非常小的,因为其中一个为IDLE任务,是不需要任务控制块的,也不需要链表管理。
typedef struct HOST_LISTPOOL
{
U16 u16TaskMap; //任务调度的所有数据和关系保存在此表之中
U8 u8Head;
U8 u8Tail;
} HOST_LISTPOOL;
typedef struct HOST_TCB
{
HOST_STK *pxStk;
U32 u32Delay;
U8 u8Head;
U8 u8Tail;
unsigned int u4EventId :4;
unsigned int u2Flag :2;
unsigned int u1TOE :1; //time out of event
unsigned int u2State :2;
unsigned int u2Prio :2;
unsigned int u1Block :1;
unsigned int u4TaskId :4;
} HOST_TCB,*PHOST_TCB;
|