系统的消息循环
一、 实验目的
学习使用系统的消息循环。掌握如何通过系统的消息循环来响应键盘的消息,同时学会
使用图形模式下的液晶屏文字显示函数。最终实现按不同的键,在屏幕上显示不同的文字;
同时,把键盘的按键号码输出到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 任务中加入代码,实现消息循环。即:等待消息、处理(响应)消息、
删除消息。具体的流程图如图所示。
提示:
⑴ 使用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 下载到嵌入式开发板中,运行并检查输出结果。
RISC,诸神乱斗的时代!
索尼4K液晶电视X9000F,给您带来全新的智能体验
电缆护层保护器接线方法详解
苹果生产的首批新iPhone手机,已交付给苹果美国总部
电力系统的组成
系统的消息循环
大屏旗舰手机荣耀Note10搭载着哪些黑科技?
基于Zynq SoC增强CCD图像传感器性能
微软Edge浏览器将推全新分享链接页面
第1部:RepRap社区的介绍
苹果的5G iphone预计将在2020年发布
中信国际电讯利用 VMware 一致的云基础架构为客户提供广泛的服务
E拆解:三星 Galaxy S22+(上)
Redmi将首发天玑旗舰芯新平台
极致魅力热情四溢,华为荣耀V9红蓝CP图赏
OpenAI发生严重故障 GPT-4 Turbo模型太火爆 ChatGPT停服两小时
【节能学院】南京大学无菌动物房改造项目消防应急照明和疏散指示系统的研究与应用
美光:尔必达债权人放弃逾3千亿债权
《移动物联网通用模组技术需求和应用场景》标准制定完成
减速机速比和扭矩如何计算