在编程中基于事件驱动的好处

发布者:廿由人最新更新时间:2012-08-25 来源: 51hei关键字:编程  事件驱动  指针 手机看文章 扫描二维码
随时随地手机看文章

在这几天的编程里,我发现了一个程序如果是基于事件驱动的,那么编程起来将会很简单。比如在输入命令行遇到回车时向框架发送一个ON_CMD_OK消息,那么框架就会立即处理ON_CMD_OK消息,而无需再去检测命令输入到了什么地方,在框架定时器到达时,框架也会呼叫我们事先约定好的处理程序,为我们省略了很多细节的麻烦。 要编写基于事件的程序,首先需要理解函数指针,和char指针一样,它保存了一个函数的地址,调用指针指向的函数和调用函数一样。例如:(我的例程是这样的) typedef void (*PROC)(MESSAGE_STYLE style,MESSAGE param);// 定义函数类型,形参为MESSAGE枚举; PROC fun; static void nullFunction(MESSAGE_STYLE style,MESSAGE param)// 空函数 { printf("nullFunction is called ."); } void main() { fun = nullFunction;// 将指针指向nullFunction; fun(ON_KEYDOWN,WM_0);// 通过指针调用函数 } 那么,在这个主程序里,nullfunction将收到ON_KEYDOWN和WM_0,意思是按键0被按下,调用nullFunction处理。 ON_KEY_DOWN是一个我们预先定义的消息类型枚举,WM_0也一样。 当然了,在实际的编程里不会像这个那么简单,我们需要一个数组来保存指针,然后将消息逐个派遣,让想知道这个消息的所有程序都能知道这个按键被按下了,然后进行相应的处理。 是否明白点了呢?.... 后来我有个重大发现 一直以来,我都是使用形参来传递消息参数,我的PROC原来是这样定义的:PROC (*fun)(MESSAGE_TYPE type, MESSAGE param); 在我的Delegate里,消息通过send()函数将会历遍所有消息回调,如果我在第一个回调里增加了一个回调,那么在这个回调结束后,新增加的回调也会收到这个消息,这不是我希望的结果(我在菜单里选择了2号菜单,而2号菜单是个命令提示符,那么在增添命令提示符后字符'2'这个消息会传递给CMD,那么在进入CMD程序之前,CMD实际上已经添加了2这个字符在命令行里)。经过我的反复思考,我参考了C#的做法,把后面两个参数改为引用类型,改为:PROC (*fun)(MESSAGE_TYPE &type, MESSAGE ¶m); 那么在第一个回调里增加另外一个回调的同时,把param设置为WM_NULL,就不会发生上面的情况,而且将更加灵活,我增加了WM_HANDLED,在框架检测到这个消息后,会放弃之后的回调,因为框架已经知道这个消息已经不再需要后面的程序处理了。呵呵,总算解决了一个问题。也算是从C#里发现的一个重大收获。经过这样的改造,CPU占用率更低了,而且深度的内存堆栈也少了些,可以使用更多的内存做别的任务。 八卦一下 PT2313。这是我的第二个AVR的作品。我用MEGA8是因为它的功能深深的吸引着我。以前用51的时候,I2C需要单独来编写一个程序来驱动,ADC需要外置。现在好了,MEGA8为我解决了这个问题,使得我现在的版本比以前有了很大的进步,无论是在体积上还是性能上都有显著的提高。让大家来分享一下

关键字:编程  事件驱动  指针 引用地址:在编程中基于事件驱动的好处

上一篇:STC单片机外扩RAM及8255需要注意的问题
下一篇:指针在c语言中的妙用

推荐阅读最新更新时间:2024-03-16 13:06

TI 针对低功耗无线应用推出低于1GHz射频收发器
高集成度器件有助于降低系统成本,实现高性能 2007 年 8 月 20 日,北京讯 日前,德州仪器 (TI) 宣布推出了一款低于 1GHz 的射频 (RF) 收发器,实现了较低功耗、高集成度及出色的 RF 性能。CC1101 可满足多个领域中的低功耗无线应用要求,如警报与安全、自动抄表、工业监控以及家庭和楼宇自动化等。CC1101 的性能得到了显著提升,是 TI 大获成功的低于 1GHz RF 收发器 CC1100 的代码兼容版本。(更多详情,敬请访问: http://focus.ti.com.cn/cn/paramsearch/docs/parametricsearch.tsp?family=analog&familyId=
[新品]
改搭可编程FPGA SoC ADAS系统性故障锐减
基于雷达(RADAR)和摄影机设计的应用正大举进驻汽车驾驶安全领域。最初,自适应巡航控制和道路偏离警报等先进驾驶辅助系统(ADAS)只是一些非常便利的功能,而现在,它们在车辆控制上扮演更积极主动的角色,支持实现车道维持辅助(LKA)等功能。以前的高性能中央处理器(CPU)被认为是最适合这些应用的组件,但车厂须要综合考虑运算性能和低功率消耗,这促使工程师转向采用现场可编程门阵列(FPGA)组件。 ADAS须要满足特殊的功能安全要求。在2011年,ISO发布针对载重3.5吨以下客车的ISO26262标准,以降低系统出现故障后造成危险的风险。这个标准要求采用严密的设计过程,在应用执行过程中探测随机硬件故障,以减少系统性故障。 提升
[嵌入式]
使用AVR-GCC编程Arduino
Arduino是IDE和硬件平台,IDE以Java编写,并使用Processing语言。 这对新手是个好主意,因为简化了开发,但是也比C要弱: C有准确的执行时间,没有隐藏代码,写什么就执行什么 C更容易访问硬件和中断 便于在多种MCU之间移植 本文编译和上传一个简单的纯C程序(使用avr-libc),而不用Arduino IDE。只需要终端、文本编辑器、AVR-GCC工具链。 1 闪耀LED例子 从让Arduino引脚13的LED闪耀开始(实际是闪耀PORTB的所有位)。创建个文件夹来存放项目,并创建文件 blink.c #include avr/io.h #include util/delay.h in
[单片机]
IEEE公布全球前十大最受欢迎编程语言
自从IEEE Spectrum去年发布编程语言的排名以来,今年开始很多都发生了动荡,然而有一件事一成不变,那就是Python的统治地位。 由于无法找出每个程序员所使用的语言,所以此次调查依赖于结合11种指标进行的考量。 受欢迎的编程语言前十 Python继续保持首位,Java和C分别再次排名第二和第三,Arduino跃升很大,从第11变成了第7。
[嵌入式]
IEEE公布全球前十大最受欢迎<font color='red'>编程</font>语言
星战BB-8机器人之父再度发力 推出多功能编程机器人
据悉,来自科罗拉多州的互联玩具公司Sphero已经成功完成了BB-8器人的研发,该机器人可由智能手机所控制。目前,Sphero在Kickstarter上发起众筹活动。 联合创始人兼首席创意官Adam Wilson表示,该公司选择众筹其最新机器人RVR,是为了“获得反馈,确保我们正在打造人们想要的产品。”RVR同时针对儿童和成人设计。与之前的产品不同,这款机器人可以通过其通用扩展端口接收外围设备,这意味着像树莓派、网络摄像头、Arduino微控制器、外部电池或其他用户想要连接的设备都可以被用于编程项目。 此外,RVR还内置了多种传感器,包括颜色传感器、加速度计、环境光线传感器、红外线传感器、磁力计和陀螺仪。它还拥有10个可单独寻址的
[机器人]
用单片机实现SRAM工艺FPGA的加密应用
在现代电子系统设计中,由于可编程逻辑器件的卓越性能、灵活方便的可升级特性,而得到了广泛的应用。由于大规模高密度可编程逻辑器件多采用SRAM工艺,要求每次上电,对FPGA器件进行重配置,这就使得可以通过监视配置的位数据流,进行克隆设计。因此,在关键、核心设备中,必须采用加密技术保护设计者的知识产权。 1 基于SRAM工艺FPGA的保密性问题 通常,采用SRAM工艺的FPGA芯片的的配置方法主要有三种:由计算机通过下载电缆配置、用专用配置芯片(如Altera公司的EPCX系列芯片)配置、采用存储器加微控制器的方法配置。第一种方法适合调试设计时要用,第二种和第三种在实际产品中使用较多。第二种方法的优点在于外围电路非常简单,体积较
[应用]
编程逻辑器件APEX20K的原理及应用
摘要:介绍了Altera公司生产的多核架构可编程逻辑器件APEX20K系列芯片的主要特点和结构功能,给出了APEX20K内含的ClockLock以及ClockBoost电路的典型应用实例。 关键词:可编程逻辑器件 在系统设计 FPGA APEX20K 1 主要特点 APEX20K是Altera公司生产的首款带有多核架构的可编程逻辑器件,密度在30 000到1 500 000门,时钟速度高达822MHz。这种多核结构克服了必须用多个器件来实现系统级设计的麻烦,同时也节省了PCB板的空间。由于APEX20K具有功耗低、体积小、集成度高、速度快、费用低、用户可定义功能及可重复编程和擦写等许多优点,因此,可广泛应用于系统板级设计领
[应用]
在系统可编程通用数字开关ispGDS14的原理及应用
摘要:介绍了Lattice公司生产的在系统可编程通用数字开关芯片ispGDS14的内部结构和性能特点,并通过实例说明了在GDS开发环境下对ispGDS14进行编程的方法。 关键词:可编程;通用数字开关;ispGDS14 在系统可编程通用数字开关ispGDS14(in sys-tem programmable Generic Digital Switch)是Lattice公司生产的一种在系统可编程ISP(In System pro-grammability)开关器件。其中ISP技术是Lattice公司率先推出的一种新型在线可编程技术,该技术允许对器件、电路板、甚至整个电子系统的逻辑功能随时进行调整或重新设计,这种调整或重新设计可
[应用]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
更多每日新闻
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved