嵌入式实验4

合集下载

《嵌入式系统原理与应用》实验报告04-看门狗实验

《嵌入式系统原理与应用》实验报告04-看门狗实验
六、教师评语
签名:
日期:
成绩
WDFEED=0x55;
}
void FeedDog(void)
{
WDFEED=0xaa;
WDFEED=0x55;
}
int main (void)
{
uint32 dly;
PINSEL0=0x00;
PINSEL1=0x00;
IO0DIR=led;
IO0SET=led;
for(dly=0;dly<500000;dly++);
1.实验效果截图
2.源程序
#include "config.h"
#define key (1<<20)//set the button to be P0.20
#define led (1<<7)
void WDT_Init(uint32 time)
{
WDTC=time;
WDMOD=0x03;
WDFEED=0xaa;
二、实验设备(环境)及要求
硬件:PC机;
软件:PC机操作系统windows XP,Proteus软件,ADS1.2
三、实验内容与步骤
实验内容:
运行程序时,LED灯闪烁一下,并启动看门狗;当按键按下时,停止喂狗,此时会引起看门狗复位;复位之后,程序重新运行,此时LED灯又闪烁了一下。
四、实验结果与数据处理
《嵌入式系统原理与接口技术》实验报告
实验序号:4实验项目名称:看门狗实验
学 号
XXXX
姓 名
XXX
专业、班
计算机科学与技术
实验地点
1-416
指导教师
XXX
实验时间

嵌入式实验报告总结

嵌入式实验报告总结

嵌入式实验报告总结嵌入式实验报告总结近年来,嵌入式系统在各个领域中得到了广泛的应用。

嵌入式系统是指将计算机系统嵌入到其他设备或系统中,以实现特定功能的一种计算机系统。

在本次嵌入式实验中,我深入学习了嵌入式系统的原理和应用,并通过实际操作,加深了对嵌入式系统的理解。

实验一:嵌入式系统的基本概念和发展历程在本实验中,我们首先了解了嵌入式系统的基本概念和发展历程。

嵌入式系统的特点是紧凑、高效、实时性强,并且适用于各种各样的应用场景。

通过学习嵌入式系统的发展历程,我们了解到嵌入式系统在不同领域的应用,如智能家居、医疗设备、汽车电子等。

这些应用领域的嵌入式系统都有着各自的特点和需求,因此在设计嵌入式系统时需要根据具体应用场景进行优化。

实验二:嵌入式系统的硬件平台与软件开发环境在本实验中,我们学习了嵌入式系统的硬件平台和软件开发环境。

硬件平台是嵌入式系统的基础,包括处理器、内存、外设等。

而软件开发环境则提供了开发嵌入式系统所需的工具和库函数。

我们通过实际操作,搭建了嵌入式系统的硬件平台,并使用软件开发环境进行程序的编写和调试。

通过这个实验,我深刻理解了硬件平台和软件开发环境对嵌入式系统的影响,以及它们之间的协同工作。

实验三:嵌入式系统的实时操作系统在本实验中,我们学习了嵌入式系统的实时操作系统。

实时操作系统是嵌入式系统中非常重要的一部分,它能够保证系统对外界事件的响应速度和可靠性。

我们通过实际操作,学习了实时任务的创建和调度,以及实时操作系统的中断处理机制。

实时操作系统的学习让我更加深入地了解了嵌入式系统的实时性要求和相关的调度算法。

实验四:嵌入式系统的通信与网络在本实验中,我们学习了嵌入式系统的通信与网络。

嵌入式系统通常需要与其他设备或系统进行通信,以实现数据的传输和共享。

我们学习了嵌入式系统的通信协议和网络协议,如UART、SPI、I2C、TCP/IP等。

通过实际操作,我掌握了这些通信和网络协议的使用方法,以及在嵌入式系统中如何进行数据的传输和处理。

《嵌入式接口技术》实验报告4-LED点阵显示

《嵌入式接口技术》实验报告4-LED点阵显示
这个实验和实验二数码管的实验差不多,只是把接受数据的一段换成了led点阵,所以难度不是很大,复习一下实验二就能够做出来。
六、教师评语
签名:
日期:
日期:
成绩
PINSEL0=0x00000000;
IO0DIR=0x3f;
while(1)
{
screen();
}
return 0;
}
效果图:
五、分析与讨论
这个实验和实验二数码管的实验差不多,只是把接受数据的一段换成了led点阵,所以难度不是很大,复一下实验二就能够做出来。
这个实验和实验二数码管的实验差不多,只是把接受数据的一段换成了led点阵,所以难度不是很大,复习一下实验二就能够做出来。
Senddata_Row(ROW[j+1]);
Senddata_Line(LINE[j+1]);
Delay(50);
Senddata_Row(0xff);
Senddata_Line(0x00);
j=j+2;
Delay(1000);
}
}
int main (void)
{// add user source code
#define DS2 0x08
#define SH_CP1 0x02
#define ST_CP1 0x04
#define SH_CP2 0x10
#define ST_CP2 0x20
uint32 const ROW[]={0xc3,0xdb,0x87,0xb7,0x0f,0x6f,0x87,0xb7,0xc3,0xdb,0xe1,0xed,0xf0,0xf6,0xe1,0xed};
else
IO0SET=DS1;

嵌入式实验四实验报告

嵌入式实验四实验报告

嵌入式实验四实验报告实验四:嵌入式编程设计
实验设计目的:
1. 学习使用嵌入式开发工具进行编程设计;
2. 学习使用C语言编写嵌入式程序;
3. 学习使用GPIO模块进行输入输出;
4. 学习使用中断处理函数。

实验器材:
1. 嵌入式开发板;
2. USB数据线;
3. 电脑;
4. LED灯;
5. 电阻;
6. 蜂鸣器;
7. 其他必要的电路元件。

实验步骤:
1. 连接开发板和计算机,安装开发板驱动程序;
2. 打开嵌入式开发工具,创建一个新的工程;
3. 在工程中添加一个C文件,编写程序;
4. 编写程序实现以下功能:
- 使用GPIO模块控制LED灯的亮、灭;
- 使用GPIO模块读取按键状态;
- 使用GPIO模块控制蜂鸣器的开、关;
- 使用Timer模块计时;
- 使用中断处理函数处理外部中断;
- 其他必要的功能;
5. 编译程序,下载到开发板;
6. 运行程序,测试功能是否正常。

实验结果与分析:
实验结果应当是LED灯、蜂鸣器、按键正常工作,可以通过按键控制LED灯的亮、灭、蜂鸣器的开、关。

实验总结:
通过本次实验,我学会了使用嵌入式开发工具进行编程设计,掌握了使用C语言编写
嵌入式程序的方法。

通过实验,我深入理解了嵌入式系统的原理和实现方法,对嵌入
式系统的应用有了更加深入的了解。

在今后的学习和工作中,我将能够更好地运用嵌
入式技术解决实际问题。

嵌入式实训课实验报告

嵌入式实训课实验报告

一、实验背景嵌入式系统在现代工业、消费电子、智能家居等领域扮演着越来越重要的角色。

为了让学生深入了解嵌入式系统的设计原理和开发过程,提高学生的实践能力和创新精神,我们开设了嵌入式实训课程。

本次实验报告将针对实训课程中的部分实验进行总结和分析。

二、实验目的1. 掌握嵌入式系统的基本原理和开发流程。

2. 熟悉嵌入式开发工具和环境。

3. 熟练使用C语言进行嵌入式编程。

4. 学会调试和优化嵌入式程序。

三、实验内容本次实训课程共安排了五个实验,以下是每个实验的具体内容和实验步骤:实验一:使用NeoPixel库控制RGB LED灯带1. 实验目的:学习使用NeoPixel库控制RGB LED灯带,实现循环显示不同颜色。

2. 实验步骤:(1)搭建实验平台,连接NeoPixel LED灯带。

(2)编写程序,初始化NeoPixel库,设置LED灯带模式。

(3)通过循环,控制LED灯带显示不同的颜色。

实验二:使用tm1637库控制数码管显示器1. 实验目的:学习使用tm1637库控制数码管显示器,显示数字、十六进制数、温度值以及字符串,并实现字符串滚动显示和倒计时功能。

2. 实验步骤:(1)搭建实验平台,连接tm1637数码管显示器。

(2)编写程序,初始化tm1637库,设置显示模式。

(3)编写函数,实现数字、十六进制数、温度值的显示。

(4)编写函数,实现字符串滚动显示和倒计时功能。

实验三:使用ds18x20库和onewire库读取DS18B20温度传感器的数据1. 实验目的:学习使用ds18x20库和onewire库读取DS18B20温度传感器的数据,并输出温度值。

2. 实验步骤:(1)搭建实验平台,连接DS18B20温度传感器。

(2)编写程序,初始化ds18x20库和onewire库。

(3)编写函数,读取温度传感器的数据,并输出温度值。

实验四:使用ESP32开发板连接手机热点,并实现LED1作为连接指示灯1. 实验目的:学习使用ESP32开发板连接手机热点,并通过LED1指示灯显示连接状态。

《嵌入式接口技术》实验报告4-LCD液晶显示

《嵌入式接口技术》实验报告4-LCD液晶显示
*功能:lcd初始化函数
******************************************/
void lcd_init(void)
{
WrOp(0x38);
WrOp(0x06);//光标加1WBiblioteka Op(0x0c);//开显示}
/***************************************************
《嵌入式系统接口技术》实验报告
实验序号:4实验项目名称:LCD液晶显示实验
X
XXXX
姓 名
XXX
专业、班
11计算机
实验地点
1-318
指导教师
XXXX
实验时间
2013-11-1
一、实验目的
1.熟悉proteus仿真软件的使用。
2.熟悉ADS1.2编译器的使用。
二、实验设备(环境)及要求
硬件:PC机;
软件:PC机操作系统windows XP,Proteus软件,ADS1.2
int main(void)
{
lcd_init();
Time0Init();
IODIR=0x7ff;//设置为输出
IOCLR=0x7ff;
DisText(0x86,time);//初始显示时间
while(1);
}
五、分析与讨论
定时器的内容都忘光光了~~起初是不知道为什么要把它变为ASCII码即time[j]这部分的内容不太能理解,只是大概懂得。
/*************************************
*名称Timer0_ISR()
*功能:中断服务程序,显示时间
*************************************/

嵌入式实验4(中断处理程序设计)

嵌入式实验4(中断处理程序设计)

北华航天工业学院《嵌入式系统基础》课程实验报告实验名称编号:实验4 中断处理程序设计作者所在系部:计算机科学与工程系作者所在专业:计算机科学与技术作者所在班级:B09513作者学号:20094051329作者姓名:康建云教师姓名:李建义一、实验内容1.本实验涵盖实验手册《ARM嵌入式系统设计及接口编程实验教程》中的实验9 中断处理程序设计。

2.修改程序,使得当四个中断源中断时分别调用实验二跑马灯实验的实验内容第二项中编写的一个函数,即不同中断将控制四个跑马灯的闪烁顺序。

二、实验要求1.了解ARM处理器中断处理过程。

2.掌握S3C2440下进行中断编程的方法,包括中断设置、中断服务子程序的编写。

3.理解实验手册中的实验9的实验程序。

4.编程实现实验内容中第2项任务。

5.撰写实验报告描述实现上述个要求的情况。

三、实验思路在SinoSys-M3中,已经将EINT0、EINT1、EINT2、EINT19、EINT11作为外部中断源和开发板上位号为SW1、SW2、SW3、SW4的这四个小按键相连。

在实验的过程中,在运行之后,按下开关板上这四个按钮,将触发处理器的四个外部中断,处理器转而去执行相应的中断服务程序,在中断服务程序中,向串口打印中断信息,并输出到开发主机的串口终端工具上。

因为key=1、key=3、key=5、key=7分别对应SW1、SW2、SW3、SW4四个按钮。

所以改程序时只需控制key值在不同值下的灯亮情况即可,修改程序实现跑马灯不同亮的次序并循环五次,所修改的程序如下:四、实验程序static void __irq Key_ISR(void){ int i; U8 key;if(rINTPND==BIT_EINT8_23) {ClearPending(BIT_EINT8_23);if(rEINTPEND&(1<<11)){ Uart_Printf("eint11\n");rEINTPEND |= 1<< 11; }if(rEINTPEND&(1<<19)) {Uart_Printf("eint19\n"); rEINTPEND |= 1<< 19; }}if(rINTPND==BIT_EINT0){//Uart_Printf("eint0\n");ClearPending(BIT_EINT0); } if(rINTPND==BIT_EINT2) {Uart_Printf("eint2\n");ClearPending(BIT_EINT2); }key=Key_Scan();if(key==1)//从左到右依次亮{ for(i=0;i<5;i++){ rGPFDAT=rGPFD AT&0x0F|0xE0;Delay(1000);rGPFDAT=rGPFDAT&0x0F|0xD0;Delay(1000);rGPFDAT=rGPFDAT&0x0F|0xB0;Delay(1000);rGPFDAT=rGPFDAT&0x0F|0x70;Delay(2000); }}if(key==3) //从右到左依次亮{ for(i=0;i<5;i++){ rGPFDAT=rGPFD AT&0x0F|0x70; Delay(1000);rGPFDAT=rGPFDAT&0x0F|0xB0; Delay(1000);rGPFDAT=rGPFDAT&0x0F|0xD0;Delay(1000);rGPFDAT=rGPFDAT&0x0F|0xE0;Delay(2000); }}if(key==5) //从左边两个到右边两个到两边的两个到中间两个依次亮{ for(i=0;i<5;i++){ rGPFDAT=rGPFD AT&0x0F|0xC0; Delay(1000);rGPFDAT=rGPFDAT&0x0F|0x30; Delay(1000);rGPFDAT=rGPFDAT&0x0F|0x90; Delay(1000);rGPFDAT=rGPFDAT&0x0F|0x60; Delay(2000); }}if(key==7) //从中间两个到两边两个到右边的两个到左边两个依次亮{ for(i=0;i<5;i++){rGPFDAT=rGPFDAT&0x0F|0x60; Delay(1000);rGPFDAT=rGPFDAT&0x0F|0x90; Delay(1000);rGPFDAT=rGPFDAT&0x0F|0x30; Delay(1000);rGPFDAT=rGPFDAT&0x0F|0xC0; Delay(2000); }}五、实验结果及实验问题分析1.实验结果更改代码后,分别按下sw1、sw2、sw3、sw4按钮,主函数调用keyscan.c文件,继而调用中断服务子程序,根据相应key==1、key==3、key==5、key==7,按实验要求分别实现了使四个灯的闪烁顺序依次为左1灯亮→左2灯亮-→左3灯亮-→左4个灯亮-→四个灯全灭的中断控制;左4灯亮→左3灯亮-→左2灯亮-→左1个灯亮-→四个灯全灭;左1、2灯亮→左3、4个灯亮-→两边两个灯亮-→中间两灯亮-→四个灯全灭;左3、4灯亮-→左1、2个灯亮-→中间两个灯亮-→两边两个灯亮-→四个灯全灭。

北邮研究生嵌入式系统实验课程——第4-4节 VxWorks网络编程

北邮研究生嵌入式系统实验课程——第4-4节 VxWorks网络编程
12
VxWorks网络组件
basic network initialization components: 基本的网络初始化组件
– VxWorks基本网络支持 – 网络设备的启动
network devices:网络设备
– 网络设备的类型
networking protocols:网络协议
– TCP/IP组件 – 应用及路由协议
2
1、网络基础
OSI七层协议 TCP/IP协议 路由 Internet Protocol(IP)
– 数据报(Datagram)通信协议 – 是一种尽力而为业务(Best-effort ) 数据丢失(Loss) 重新排序(Reordering) 数据重复(Duplication) 延时(Delay) – 主机到主机的数据传送
Block until connection established
Socket() Connect()
Connection establishment
send()
Communication message (request)
recv()
Process request
send()
Communication message (reply)
传输协议(Transport Protocols)
用户数据报协议( User Datagram Protocol (UDP))
– 对数据进行校验 – 仍然是尽力而为的服务
传输控制协议(Transmission Control Protocol (TCP))
– 对数据进行校验 – 可靠的字节流传送 – 流量和拥塞控制
3
IP地址
32-bit的识别符 (IPv4, IPv6=128 bits) 点分方式的四个十进制数来表示: 192.118.56.25 -> 167.208.101.28
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

南昌航空大学实验报告二0一一年 10月 26日课程名称:嵌入式系统实验名称: MiniGUI的简单程序设计班级: 080611 学生姓名:曹启斌学号: 08061107 指导教师评定:签名:一、实验目的1了解 MiniGUI的基本结构。

2了解 MiniGUI程序设计的基本方法。

3了解 MiniGUI应用程序的编译和运行。

二、实验内容1 分析并了解 MiniGUI应用程序 helloworld。

2 在开发板上运行 helloworld程序。

三、预备知识1 掌握在ARMLinux集成开发环境中编写和调试程序的基本过程。

2 了解 ARM应用程序的框架结构。

3 掌握 Linux下的程序编译与交叉编译。

四、实验设备及工具硬件:UP-NETARM2410-S嵌入式实验仪,PC机 pentumn500以上,硬盘 40G以上,内存大于 128M。

软件:PC机操作系统REDHAT LINUX 9.0 +MINICOM + AMRLINUX开发环境五、实验原理MiniGUI是一个著名的自由软件项目,项目的目标是为基于 Linux的实时嵌入式系统提供一个轻量级的图形用户界面支持系统。

MiniGUI为应用程序定义了一组轻量级的窗口和图形设备接口。

利用这些接口,每个应用程序可以建立多个窗口,而且可以在这些窗口中绘制图形且互不影响。

用户也可以利用 MiniGUI建立菜单、按钮、列表框等常见的 GUI元素。

MiniGUI具有良好的软件架构,通过抽象层将 MiniGUI 上层和底层操作系统隔离开来。

如图3-1所示所示,基于 MiniGUI 的应用程序一般通过 ANSI C 库以及 MiniGUI 自身提供的 API 来实现自己的功能;MiniGUI 中的“可移植层”可将特定操作系统及底层硬件的细节隐藏起来,而上层应用程序则无需关系底层的硬件平台输出和输入设备。

图3-1 MiniGUI软件架构另外,MiniGUI 特有的运行模式概念,也为跨操作系统的支持提供了便利。

一般而言,MiniGUI-Standalone 模式的适应面最广,可以支持几乎所有的操作系统,甚至包括类似 DOS 这样的操作系统;MiniGUI-Threads 模式的适用面次之,可运行在支持多任务的实时嵌入式操作系统,或者具备完整 UNIX 特性的普通操作系统;MiniGUI-Lite 模式的适用面较小,它仅适合于具备完整 UNIX 特性的普通操作系统。

不论采用哪种运行模式,MiniGUI 为上层应用软件提供了最大程度上的一致性;只有少数几个涉及初始化的接口在不同运行模式上有所不同。

六、实验步骤1分析 MiniGUI应用程序 helloworld该程序的源代码在 mg-sample-1.6.0/src目录下。

1) 头文件helloworld.c的开始所包括的四个头文件是所有 MiniGUI应用程序都必须包括的头文件。

common.h 包括 MiniGUI常用的宏及数据类型的定义。

minigui.h包含了全局的和通用的接口函数以及某些杂项函数的定义。

window.h 包含了窗口有关的宏、数据类型、数据结构的定义以及函数接口声control.h 包含了 libminigui中所有内建控件的接口定义。

2) 程序入口点一个 c程序的入口点为 main函数,而一个 MiniGUI程序的入口点为 MiniGUIMain,该函数的圆型如下:int MiniGUIMain (int argc, const char* argv[])main函数已经在 MiniGUI的函数库中定义了,该函数在进行一些 MiniGUI的初始化工作之后调用 MiniGUIMain函数。

所以,每个 MiniGUI应用程序(无论是服务器端程序 mginit 还是客户端应用程序)的入口点均为 MiniGUIMain函数。

参数 argc和 argv与 C程序 main 函数的参数 argc和 argv的含义是样的,分别为命令行参数个数和参数字符串数组指针。

3) 创建和显示主窗口hMainWnd = CreateMainWindow(&CreateInfo);每个MiniGUI应用程序的初始界面一般都是一个主窗口,你可以通过调用CreateMainWindow函数来创建一个主窗口,其参数是一个指向 MAINWINCREATE结构的指针,本例中就是 CreateInfo,返回值为所创建的主窗口的句柄。

MAINWINCREATE结构描述一个主窗口的属性,你在使用 CreateInfo创建主窗口之前,需要设置它的各项属性。

CreateInfo.dwStyle = WS_VISIBLE | WS_BORDER | WS_CAPTION;设置主窗口风格,这里把窗口设为初始可见的,并具有边框和标题栏。

CreateInfo.deExStyle = WS_EX_NONE;设置主窗口的扩展风格,该窗口没有扩展风格。

CreateInfo.spCaption = “HelloWorld”设置主窗口的标题为”HelloWorld”。

CreateInfo.hMenu = 0;设置主窗口的主菜单,该窗口没有主菜单。

CreateInfo.hCursor = GetSystemCursor(0);设置主窗口的光标为系统缺省光标。

CreateInfo.hIcon = 0;设置主窗口的图标,该窗口没有图标。

CreateInfo.MainWindowProc = HelloWinProc;设置主窗口的窗口过程函数为 HelloWinProc,所有发往该窗口的消息由该函数处理。

CreateInfo.lx = 0;CreateInfo.ty = 0;CreateInfo.rx = 320;CreaetInfo.by=240;设置主窗口在屏幕上的位置,该窗口左上角位于(0, 0),右下角位于(320, 240)。

CreateInfo.iBkColor = PIXEL_lightwhite;设置主窗口的背景色为白色,PIXEL_lightwhite是 MiniGUI预定义的象素值。

CreateInfo.dwAddData = 0;设置主窗口的附加数据,该窗口没有附加数据。

CreateInfo.hHosting = HWND_DESKTOP;设置主窗口的托管窗口为桌面窗口。

ShowWindow(hMainWnd, SW_SHOWNORMAL);创建完主窗口之后,还需要调用 ShowWindow函数才能把所创建的窗口显示在屏幕上。

ShowWindow的第一个参数为所要显示的窗口句柄,第二个参数指明显示窗口的方式(显示还是隐藏),SW_SHOWNORMAL说明要显示主窗口,并把它置为顶层窗口。

4) 进入消息循环在调用 ShowWindow函数之后,主窗口就会显示在屏幕上。

和其他 GUI一样,现在是进入消息循环的时候了。

MiniGUI为每一个 MiniGUI程序维护一个消息队列。

在发生事件之后,MiniGUI将事件转换为一个消息,并将消息放入目标程序的消息队列之中。

应用程序现在的任务就是执行如下的消息循环代码,不断地从消息队列中取出消息,进行处理:while (GetMessage(&Msg, hMainWnd) {TranslateMessage(&Msg);DispatchMessage(&Msg);}Msg变量是类型为 MSG的结构,MSG结构在 window.h中。

GetMessage函数调用从应用程序的消息队列中取出一个消息:GetMessage(&Msg, hMainWnd);该函数调用的第二个参数为要获取消息的主窗口的句柄,第一个参数为一个指向 MSG结构的指针,GetMessage函数将用从消息队列中取出的消息来填充该消息结构的各个域,包括:hwnd 消息发往的窗口的句柄。

在 helloworld.c程序中,该值与 hMainWnd相同。

message 消息标志符。

这是一个用于标志消息的整数值。

每一个消息均有一个对应的预定义标志符,这些标志符定义在 window.h头文件中,以前缀 MSG开头。

wParam 一个 32位的消息参数,其含义和值根据消息的不同而不同。

lParam 一个 32位的消息参数,其含义和值取决于消息的类型。

time 消息放入消息队列中的时间。

只要从消息队列中取出的消息不为MSG_QUIT,GetMessage就返回一个非 0值,消息循环将持续下去。

MSG_QUIT消息使 GetMessage返回 0,导致消息循环的终止。

TranslateMessage(&Msg);TranslateMessage函数把击键消息转换为 MSG_CHAR消息,然后直接发送到窗口过程函数。

DispatchMessage(&Msg);DispatchMessage函数最终把消息发往该消息的目标窗口的窗口过程,让他进行处理,在本例中,该窗口过程就是 HelloWinProc。

也就是说,MiniGUI在 DispatchMessage函数中调用主窗口的窗口过程函数(回调函数)对发往该主窗口的消息进行处理。

处理完消息之后,应用程序的窗口过程函数将返回到 DispatchMessage函数中,而 DispatchMessage函数最后又将返回到应用程序代码中,应用程序又从下一个 GetMessage函数调用开始消息循环。

5) 窗口过程函数窗口过程函数是 MiniGUI程序的主体部分,应用程序实际所作的工作大部分都发生在窗口过程函数中,因为 GUI程序的主要任务就是接受和处理窗口收到的各种消息。

在 helloworld.c程序中,窗口过程是名为 HelloWinProc的函数。

窗口过程函数可以由程序员任意命名,CreateMainWindow函数根据 MAINWINCREATE结构类型的参数中指定的窗口过程创建主窗口。

窗口过程函数总是定义为如下形式:static int HelloWinProc(HWND hWnd, int message, WPARAM wParam, LPARAM lParam) 窗口过程的 4个参数与 MSG结构的前四个域是相同的。

第一个参数 hWnd是接受消息的窗口的句柄,它与 CreateMainWindow函数的返回值相同,该值标识了接受该消息的特定窗口。

第二个参数与 MSG结构中的 message域相同,它是一个标识窗口所收到消息的整数值。

最后两个参数都是 32位的消息参数,它提供和消息相关的特定信息。

程序通常不直接调用窗口过程函数,而是由 MiniGUI进行调用;也就是说,它是一个回调函数。

窗口过程函数不予处理的消息应该传给 DefaultMainWinProc函数进行缺省处理,从DefaultMainWinProc返回的值必须由窗口过程返回。

相关文档
最新文档