系统的消息循环

系统的消息循环,第1张

系统的消息循环

一、 实验目的
学习使用系统的消息循环。掌握如何通过系统的消息循环来响应键盘的消息,同时学会
使用图形模式下的液晶屏文字显示函数。最终实现按不同的键,在屏幕上显示不同的文字;
同时,把键盘的按键号码输出到PC 机的终端显示。
二、实验内容
通常在多任务 *** 作系统中,任务之间的通讯是通过任务之间发送消息来实现的。在本 ***
作系统的Main_Task 任务中,定义了一个消息队列。本次实验将通过使用这个消息队列接收
键盘的按键消息,并把键盘的按键显示在液晶屏和PC 机的终端上。
三、预备知识
1、用ARM SDT 2.5 集成开发环境,编写和调试程序的基本过程。
2、基于 *** 作系统的应用程序的框架结构。
3、会使用Source Insight 3 编辑C 语言源程序
4、 *** 作系统的绘图API 函数和绘图设备上下文(DC)的使用
四、实验设备及工具(包括软件调试工具)
硬件:ARM 嵌入式开发板、用于ARM7TDMI 的JTAG 仿真器、PC 机Pentumn100 以

软件:PC 机 *** 作系统win98、ARM SDT 2.51 集成开发环境、仿真器驱动程序、Source
Insight 3.0、超级终端通讯程序、USB 下载程序
五、实验步骤
1、在ARM SDT 2.51 中,使用实验一中创建好的模板,新建一个项目work1。把 *** 作
系统的所需要的头文件(*.h)和库文件(*.alf)加入工程中。
2、用Source Insight 3 创建一个工程,把work1 中的C 语言源文件文件加入。
3、打开Main.c 文件,仔细阅读Key_Scan_Task 函数——系统的键盘扫描函数。理解系
统中Main_Task 任务消息队列的创建和发送的过程。
void Key_Scan_Task(void *Id)
{
U32 key;
POSMSG pmsg;
for (;;){
key=GetKey();
pmsg=OSCreateMessage(OSM_KEY,(key+1)&0xffff,key>>16);
if(pmsg)
SendMessage(pmsg);
}
}
4、在Main_Task 任务中加入代码,实现消息循环。即:等待消息、处理(响应)消息、
删除消息。具体的流程图如图所示。

系统的消息循环,第2张

提示:
⑴ 使用WaitMessage 接收消息,通常等待时间设置为无限长。
⑵ 如图4-1 所示,系统的消息循环是一个无限循环。
⑶ 系统的消息结构定义如下:
typedef struct {
U32 Message;
U32 WParam;
U32 LParam;
}OSMSG, *POSMSG;
收到消息以后(即,WaitMessage 函数返回),通过判断消息结构中Message 的成
员来判断消息类型。如果是键盘消息,则Message 的值为OSM_KEY,WParam 参数存
储的是按键的号码,LParam 参数存储的是同时系统按下的功能键(如果没有,则为0)。
⑷ 开始等待下一条消息之前必须使用DeleteMessage 删除消息,释放系统的内存
空间。
5、编写键盘消息响应函数,处理键盘的消息。当有键盘消息收到的时候,把按键号码
显示在液晶屏上,同时,发送给PC 机的终端。
提示:
⑴ 使用TextOut 函数在液晶屏的图形方式下绘图。此函数输出的字符数组必须是
基于双字节Unicode 编码的。
⑵ 使用Int2Unicode 函数完成整型变量到Unicode 字符串的转换。
⑶ 通过Uart_SendByte 函数向串行口发送一个字节的数据
6、用ARM SDT 2.5 编译、下载并调试上述程序,检查运行结果
7、生成发行版本的.bin 文件,通过USB 下载到嵌入式开发板中,运行并检查输出结果。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/dianzi/2460651.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-08-04
下一篇 2022-08-04

发表评论

登录后才能评论

评论列表(0条)

保存