搜索
bottom↓
回复: 5

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

[复制链接]

出0入0汤圆

发表于 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是个数组吗?不理解,请傻孩子讲解一下

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入296汤圆

发表于 2009-9-18 14:57:18 | 显示全部楼层
这是一个 掩码结构体,当一个模块需要为外部提供对某个结构体的引用,同时又不希望
泄漏结构体的内容时,就可以使用掩码结构体。掩码结构体拥有和原来结构体相同的大小
StructMask就是一个数组,sizeof里面的内容就是原始的结构体,这样我们就获得了一个
和原来结构体相同大小的掩码结构体。

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

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

出0入0汤圆

发表于 2009-9-18 16:04:24 | 显示全部楼层
傻孩子
为什么不用typedef,这样看得有点累...

出0入296汤圆

发表于 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;
            })
        ];
};

出0入0汤圆

发表于 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[sizeof(PROCESS_MASK)];
}    PROCESS;

出0入0汤圆

 楼主| 发表于 2009-9-18 20:05:56 | 显示全部楼层
谢谢傻孩子,
你的合作调度器和《时间触发嵌入式系统设计模式-8051系列微控制器开发可靠应用》合作调度器有什么不同,有哪方面改进?
你的时标,也可以说是定时器是怎样的工作的,只有一个时标吗?只有时标定时器才可以中断,其他的都不可以?
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-27 19:26

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表