finenesszhang 发表于 2009-9-17 22:30:52

请教傻孩子,你的抢占调度器

请教傻孩子,你的抢占调度器Nonepreemptive_Scheduler.h中

struct Process
{
    uint8_t StructMask
      [sizeof(struct _Process            
            {
                PROC_FUNCTION       *fnProcess;            
                volatile PROC_STATE State;
                void                *pArgument;
                ES_FLASH uint8_t*   pKey;
            })
      ];
};

sizeof是不是结构体字节宽度, StructMask是个数组吗?不理解,请傻孩子讲解一下

Gorgon_Meducer 发表于 2009-9-18 14:57:18

这是一个 掩码结构体,当一个模块需要为外部提供对某个结构体的引用,同时又不希望
泄漏结构体的内容时,就可以使用掩码结构体。掩码结构体拥有和原来结构体相同的大小
StructMask就是一个数组,sizeof里面的内容就是原始的结构体,这样我们就获得了一个
和原来结构体相同大小的掩码结构体。

这种技术类似于C++里面的类私有成员(private)。这种方法可以防止外界对模块的恶意
访问。实际上,Windows里面的“内核对象”使用的也是类似的技术。

另外,这个调度器仍然是合作式的,不是抢占式的。

snoopyzz 发表于 2009-9-18 16:04:24

傻孩子
为什么不用typedef,这样看得有点累...

Gorgon_Meducer 发表于 2009-9-18 17:26:05

用了啊……
以下是完整内容

/*-----------------------------*
*type definitions         *
*----------------------------*/
typedef struct Process PROCESS;
typedef enum
{
    PROC_NULL,
    PROC_READY,
    PROC_BLOCK,
    PROC_TERMINATE
}PROC_STATE;
typedef enum
{
    PROC_RELEASE_WHEN_TERMINATED,
    PROC_RELEASE_IMMEDIATELY
}PROC_RELASE_MODE;
typedef PROC_STATE PROC_FUNCTION(volatile PROCESS *pPROC);

/*-----------------------------*
*structure,union and enum   *
*----------------------------*/
struct Process
{
    uint8_t StructMask
      [sizeof(struct _Process
            {
                PROC_FUNCTION       *fnProcess;            
                volatile PROC_STATE State;
                void                *pArgument;
                ES_FLASH uint8_t*   pKey;
            })
      ];
};

snoopyzz 发表于 2009-9-18 17:41:14

我的意思是
typedef struct
{
                PROC_FUNCTION       *fnProcess;            
                volatile PROC_STATE State;
                void                *pArgument;
                ES_FLASH uint8_t*   pKey;
}    PROCESS_MASK;

typedef struct
{
                uint8_t StructMask;
}    PROCESS;

finenesszhang 发表于 2009-9-18 20:05:56

谢谢傻孩子,
你的合作调度器和《时间触发嵌入式系统设计模式-8051系列微控制器开发可靠应用》合作调度器有什么不同,有哪方面改进?
你的时标,也可以说是定时器是怎样的工作的,只有一个时标吗?只有时标定时器才可以中断,其他的都不可以?
页: [1]
查看完整版本: 请教傻孩子,你的抢占调度器