清雨影 发表于 2013-2-27 22:00:37

基于事件驱动的51"操作系统"(STEP1)

看到了吧,操作系统上打了引号,其实这个只是对最小操作系统的一个扩展,通过定时扫描事件的方式,实现对用户控制良好体验的实现.
这个程序不但可以放到定时中断实现,也可以将事件扫描作为一个task插入系统.
希望各位能够斧正一下.
本人第一个编程语言是VB,VB的编程对我的编程有了很大的影响,第一个是模块化,VB里写一个BAS文件以后都可以随意调用.
还有一个就是事件触发.
比如按钮Cmd1点击时会发生Private Sub Cmd1_Click()事件
在这个子程序里面编程就可以了.
今天课上脑子一发热,想在单片机里实现一下事件驱动.所以一晚上就轰轰烈烈的搞出来了

而不是一个无线超级循环,在循环里加一些扫描代码,如果程序正在执行某些量大或者占用时间的任务,那操作就蛋疼了.
如果在int里写程序,程序结构就会不清晰.
为了结构清晰:
struct ctrl_map{
        void(*pfun)();
        uchar event_code;
        unsigned short is_lock;
};

struct ctrl_map code lst_code={
        on_click_0,0,FALSE,
        on_click_1,1,FALSE,
        on_click_2,2,FALSE,
        on_click_3,3,FALSE
};
就有了这么个东西,使用一个数组存储所有的消息地图.
使用指向函数的指针来防止程序的混乱.
定时的中断我定义了大约20ms
其实100ms也可以.
扫描键盘的程序设计的好,对后台的程序没有什么影响.
但是这个是"及时执行"式的操作,就是一收到信号就立刻响应.
下一步计划,不再及时执行,而是将其插入消息队列,消息队列询问相应的时间更长,比如500ms,但是对后台的压力就更小了.

源代码下载(执行环境:11.0592Mhz,12T,STC90C516RD+)





Sullivan 发表于 2013-2-28 08:39:29

哦?      

leiwen_ourdev 发表于 2013-2-28 08:48:35

不错呀,有时间看看

cqfeiyuxmj 发表于 2013-2-28 08:56:29

希望能继续完善

dreampet 发表于 2013-2-28 09:03:51

适合做界面,之前有个采用触屏做交互的项目就是用这种思路做的

hcambridge 发表于 2013-2-28 09:23:00

坛子里有个叫都江堰的操作系统,你可以看看,完整的实现了事件驱动。

duanll 发表于 2013-2-28 09:44:27

51下不太适合用函数指针,因为麻烦事太多。

清雨影 发表于 2013-2-28 12:15:35

hcambridge 发表于 2013-2-28 09:23 static/image/common/back.gif
坛子里有个叫都江堰的操作系统,你可以看看,完整的实现了事件驱动。

哦~我得抽空拜读一下

清雨影 发表于 2013-2-28 12:20:07

duanll 发表于 2013-2-28 09:44 static/image/common/back.gif
51下不太适合用函数指针,因为麻烦事太多。

是的,貌似就在晶振频率逐步提到27Mhz的时候,开始出现了系统不稳定.
请教一下这是为什么?

duanll 发表于 2013-2-28 22:37:42

不是所有51都能稳定跑27M的。

AIHHLI 发表于 2013-2-28 22:44:58

标记一下先。对事件驱动比较感兴趣,前段时间看了一个消息驱动模块,可惜没看懂。

清雨影 发表于 2013-2-28 22:53:07

AIHHLI 发表于 2013-2-28 22:44 static/image/common/back.gif
标记一下先。对事件驱动比较感兴趣,前段时间看了一个消息驱动模块,可惜没看懂。 ...

嘻嘻,这个够EASY了吧

mcuprogram 发表于 2013-2-28 23:04:11

接着搞下去      
页: [1]
查看完整版本: 基于事件驱动的51"操作系统"(STEP1)