邝坚_北邮嵌入式实验报告
嵌入式实验报告
目录
实验一跑马灯实验 (1)
实验二按键输入实验 (3)
实验三串口实验 (5)
实验四外部中断实验 (8)
实验五独立看门狗实验 (11)
实验七定时器中断实验 (13)
实验十三 ADC实验 (15)
实验十五 DMA实验 (17)
实验十六 I2C实验 (21)
实验十七 SPI实验 (24)
实验二十一红外遥控实验 (27)
实验二十二 DS18B20实验 (30)
实验一跑马灯实验
一.实验简介
我的第一个实验,跑马灯实验。
二.实验目的
掌握STM32开发环境,掌握从无到有的构建工程。
三.实验内容
熟悉MDK KEIL开发环境,构建基于固件库的工程,编写代码实现跑马灯工程。通过ISP 下载代码到实验板,查看运行结果。使用JLINK下载代码到目标板,查看运行结果,使用JLINK在线调试。
四.实验设备
硬件部分:PC计算机(宿主机)、亮点STM32实验板、JLINK。
软件部分:PC机WINDOWS系统、MDK KEIL软件、ISP软件。
五.实验步骤
1.熟悉MDK KEIL开发环境
2.熟悉串口编程软件ISP
3.查看固件库结构和文件
4.建立工程目录,复制库文件
5.建立和配置工程
6.编写代码
7.编译代码
8.使用ISP下载到实验板
9.测试运行结果
10.使用JLINK下载到实验板
11.单步调试
12.记录实验过程,撰写实验报告
六.实验结果及测试
源代码:
两个灯LED0与LED1实现交替闪烁的类跑马灯效果,每300ms闪烁一次。
七.实验总结
通过本次次实验我了解了STM32开发板的基本使用,初次接触这个开发板和MDK KEILC 软件,对软件操作不太了解,通过这次实验了解并熟练地使用MDK KEIL软件,用这个软件来编程和完成一些功能的实现。作为STM32 的入门第一个例子,详细介绍了STM32 的IO口操作,同时巩固了前面的学习,并进一步介绍了MDK的软件仿真功能。
北邮嵌入式实验报告
北京邮电大学嵌入式系统开发实验报告
学院:
班级:
姓名:
学号:
序号:
目录
一、实验目的 (1)
二、实验设备 (1)
三、基础实验(实验一~实验七) (1)
1.实验五 (1)
2.实验六 (1)
3.实验七 (1)
四、驱动程序 (5)
1.设备驱动程序的概念 (5)
2.驱动程序结构 (6)
3.设备注册和初始化 (7)
4.设备驱动程序的开发过程 (8)
五、基本接口实验 (8)
1.实验十二简单设备驱动程序 (9)
2.实验十三CPU GPIO驱动程序设计 (9)
3.实验十四中断实验 (10)
4.实验十五数码管显示实验 (12)
5.实验十六LED点阵驱动程序设计 (19)
6.实验十七AD驱动实验 (23)
7.实验十八DA驱动实验 (26)
六、实验中遇到的问题及解决方法 (30)
七、实验总结及心得 (31)
一、实验目的
通过实验熟悉Linux环境,并掌握一些基本接口驱动的写法和用C语言编写简单的实验程序。学习LINUX开发环境的搭建,通讯配置等。并熟练掌握LINUX驱动程序的编写及开发流程。对嵌入式系统有进一步的了解。
二、实验设备
1.一套PXA270EP嵌入式实验箱
2.安装Redhat9的宿主PC机,并且配置好ARM Linux的开发环境
三、基础实验(实验一~实验七)
实验一~七为基础实验,目的是为后续实验搭建好软、硬件环境,配置好相关的协议、服务,并通过编写最简单的HelloWorld程序进行测试。由于后面的实验都要依靠前面实验的配置,故本段只着重叙述实验七的具体实现。
1.实验五
实验五为宿主PC机配置了TFTP服务。TFTP(Trivial File Transfer Protocol)是简单文件传输协议,由于特定开发环境的制约,这一服务是必须的。在配置完成后,每次重启宿主PC机时,都须先输入命令:service xinetd restart,以启动TFTP服务。
嵌入式实训报告范文2篇
嵌入式实训报告范文
嵌入式实训报告范文精选2篇(一)
嵌入式实训报告
一、实训目的和背景
嵌入式实训的目的是通过设计和实现一个嵌入式系统,培养学生的嵌入式系统开发才能和团队协作才能。本次实训的背景是为了满足社会对嵌入式系统开发人才的需求,进步学生的实际动手才能。
二、实训内容
1. 硬件平台的选择和搭建:选择了一款ARM开发板作为硬件平台,并搭建了相应的开发环境。
2. 系统设计和分析:根据实训要求,我们团队设计了一个智能门锁系统,包括用户认证、门锁控制和远程监控功能。
3. 软件开发:使用C语言和嵌入式开发工具进展软件开发,实现了用户认证、门锁控制和远程监控等功能。
4. 硬件连接和调试:将开发板和相关传感器、执行器等硬件设备进展连接和调试,确保系统可以正常运行。
5. 功能测试和调优:对系统进展全面测试,发现并修复了一些问题,并对系统进展了性能优化。
三、实训心得和体会
通过本次实训,我深入认识到嵌入式系统开发的复杂性和挑战性。在实训过程中,我
们团队遇到了许多问题,比方硬件和软件的兼容性、性能优化等方面。但是通过团队
的努力和合作,我们成功解决了这些问题,并完成了一个功能完善的嵌入式系统。
此外,我还学到了许多软件开发和硬件调试的技巧,进步了自己的实际动手才能。在
团队协作方面,我们团队成员之间互相配合,共同解决问题,形成了良好的协作机制。
总结起来,本次嵌入式实训让我受益匪浅,学会了许多实际应用的技能和知识,并进
步了自身的综合才能。
四、实训成果展示
在实训完毕后,我们团队成功完成了一个智能门锁系统,具备用户认证、门锁控制和
嵌入式技术及应用实验中断实验报告
实验步骤与结果分析1、建立工程
1)、在工程文件中包含如下文件(int、doc、user、lib、start)
2)、选择STM32F103VB芯片
3)、分别添加如下文件
2、运行过程
(1) 使用Keil uVision3 通过ULINK仿真器连接EduKit-M3实验平台,打开实验例程NVIC_test子目录下的NVIC.Uv2
例程,编译链接工程;
(2) 点击MDK 的Debug菜单,选择Start/Stop Debug Session项或Ctrl+F5键,远程连接EduKit-M3实验平台并下载
调试代码到目标系统的RAM中;
(3) 程序正常启动运行后,会有以下结果:
当第一次发生EXTI9 中断后(按下EduKit-M3实验平台上Key按钮),SysTick 中断的优先级比EXTI0中断
优先级高。因此当EXTI0中断发生时(按下Wakeup按钮),将先执行
主要程序代码分析
/* Configure one bit for preemption priority */
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
主从优先级的选择Group_1,有先占优先级1位,从优先级3位
//配置一个比特为抢占优先级
/* Enable the EXTI0 Interrupt */ //使能EXTI0中断
NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQChannel;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = PreemptionPriorityValue;
北邮研究生嵌入式系统实验课程——第4-4节 VxWorks网络编程
18
实例
19
3. VxWorks虚拟网卡介绍
Simulator网络仿真 安装相关驱动 Simulator的配置 示例演示
20
Simulator网络仿真
21
Network Daemon安装
Network Daemon安装
– 用途:连接多个simulator,不能与主机通信 – 32bit/64bit – 管理员方式运行: installDir/vxworks-6.x/host/x 86-win32/bin/vxsimnetds_inst.exe (安装) – 管理员方式运行: installDir/vxworks-6.x/host/x 86-win32/bin/vxsimnetds_inst.exe /u(删除) – 启动方式:控制面板-》服务-》Wind River Networ k Daemon for VxWorks Simulator – 默认地址:192.168.200.0
F:\tftp_course\vxworks.txt
30
4. 基于VMWare搭建网络环境
安装VMWare虚拟机软件 创建多个VMWare虚拟机 定制VxWorks操作系统
– Image Project工程 – 定制组件 – 基于Pentium的Bsp
系统启动与配置 Workbench与VxWorks的连接
– 增强的可配置和可伸缩性 – 支持其他兼容的Internet特性
嵌入式实习报告7篇
嵌入式实习报告7篇
嵌入式实习报告篇1
蓝牙技术概述
蓝牙(Bluetooth)是目前比较流行的一种短距离无线通讯技术,其主要目的就是要在全世界范围内建立一个短距离的无线通信标准。设计者的初衷是用隐形的连接线代替线缆。它取代目前多种电缆连接方案,通过统一的短程无线链路,在各信息设备之间可以穿过墙壁或公文包,实现方便快捷、灵活安全、低成本小功耗的话音和数据通信。“蓝牙”技术的目的是使特定的移动电话、便携式电脑以及各种便携式通信设备的主机之间在近距离内实现无缝的资源共享。
一、实践目的
了解处理器的发展
掌握WinCE嵌入式系统开发方法和开发流程。
掌握WinCE嵌入式C#编程方法。
掌握WinCE嵌入式络通信技术。
掌握Bluetooth编码技术
二、实践要求
1. 了解WinCE操作系统的裁剪及定制;
2. 设计蓝牙广播系统(包括服务器端和客户端);
3.设计蓝牙文件传输系统(包括服务器端和客户端);
4. 应用程序安装和部署。
三、实践内容
(1)了解Wince平台
了解处理器的发展,什么是嵌入系统,嵌入式系统的应用,以及窗体与控件的概念,掌握WinCE嵌入式C#编程方法,对实验平台有一定的认识,更进一步的认识蓝牙。了解编写应用程序的流程,理解了Windows 窗体,学会了使用基本控件如标签、文本、按钮、列表框和组合框,掌握窗体的常用属性和方法。
(2)蓝牙搜索、浏览与发送,蓝牙设备列表,配对设备清空,删除。
四、原理介绍
1.嵌入式系统:
嵌入式系统是以应用为中心,以计算机技术为基础,并且软硬件可裁剪,适用于应用系统对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统。
邝坚-北邮嵌入式实验报告
嵌入式系统期末实验
一、实验要求
题目:支持消息驱动模式的实时软件框架
目的:在充分理解嵌入式处理器特点、RTOS 及强实时嵌入式系统软件设计规范的基础上,构建自己的实时系统软件框架基本功能,并在其上自拟应用(如部分模拟TCP 的C/S两端通信流程),测试软件框架的相关功能。
环境:VxWorks 的VxSim 仿真环境或2440(ARM920T)
内容:
必选功能:
1. 消息驱动的Task 统一框架,包含统一消息格式定义及使用规范;
2. 支持消息驱动模式的软定时器的机制;
3. Task 启动同步功能;
4. 体现前次实验中实现的自定义内存管理机制,最大限度降低外部碎片对系统可靠性的威胁。
可选功能(加分):
其它有利于实时处理的有效机制,如:无信号量(互斥)支持的临界资源访问方式,zero copy 等;
二、实现的功能
1. 消息驱动的Task 统一框架,包含统一消息格式定义及使用规范;
STATUS Task()
{
Initialization(MBox, Data Structure, Timer, etc.)
Forever{
MsgReceive
If(…)
{
……
}else if(…)
{
……
}
……
}
}
typedef struct _MESSAGE
{
int mType; /* 消息类型 0:timer->client
*1:client->server 2:server->client*/
int mSendId; /* 发送任务的MESSAGE ID */
int mRecvId; /* 接收任务的MESSAGE ID */
北邮 嵌入式 实验报告
北邮嵌入式实验报告
北邮嵌入式实验报告
一、引言
嵌入式系统是将计算机技术与其他工程领域相结合的一种综合应用技术,广泛应用于各个领域。本实验旨在通过对北邮嵌入式系统的学习与实践,深入了解嵌入式系统的原理和应用。
二、实验背景
北邮嵌入式实验是计算机科学与技术专业的一门重要实践课程。通过该实验,学生可以掌握嵌入式系统的基本原理、设计方法和调试技巧,提高对计算机硬件和软件的综合应用能力。
三、实验内容
1. 硬件平台
本实验使用的硬件平台为北邮嵌入式系统开发板,该开发板集成了ARM Cortex-M3内核的处理器,具有丰富的外设接口和扩展能力。
2. 软件开发环境
本实验使用的软件开发环境包括Keil MDK-ARM集成开发环境和ST-Link调试工具。Keil MDK-ARM提供了一套完整的软件开发工具链,包括编译器、汇编器、链接器和调试器等,方便学生进行嵌入式软件的开发和调试工作。
3. 实验任务
本实验主要包括以下几个任务:
(1) 学习嵌入式系统的基本原理和架构,了解处理器的工作原理和寄存器的使用方法。
(2) 学习嵌入式软件开发的基本流程,包括编译、烧写和调试。
(3) 编写简单的嵌入式应用程序,实现对外设的控制和数据处理功能。
(4) 调试和测试嵌入式应用程序,验证程序的正确性和稳定性。
四、实验过程
1. 学习嵌入式系统的基本原理和架构
在实验开始前,我们首先学习了嵌入式系统的基本原理和架构。了解了处理器
的工作原理,包括指令执行过程、寄存器的使用方法等。同时,我们还了解了
嵌入式系统的外设接口和扩展能力,为后续的实验任务做好准备。
嵌入式系统课程设计报告实验报告
- - -. 嵌入式系统课程设计必做部分
学院:电控学院
专业:通信工程
设计名称:IIC同步串行通讯
1、设计的目的:
1.掌握S3C44B0IIC控制器的编程方法
2.编程实现串行EEPROM存储器24C16的数据存储和访问。
2、设计的内容:
1.学习S3C44B0 IIC控制器的原理与编程方法;
2.学习IIC存储器24C16的编程方法;
3.理解IIC存储器24C16的与S3C44B0的电路连接原理;
4.掌握C语言中断程序设计方法;
5.编程实现对24C16的数据存储和访问。
3、设计思路、遇到的问题及解决方法:
此次试验,我们结合《嵌入式系统原理及应用》教材以及老师提供的各种pdf和word资料,了解到了各种寄存器的配置方法,如IICDS等。对于例程中的各种函数,如Wr24C16(), Rd24C16(),__irq IicInt()等,通过对程序的仔细研读,最终了解了它们的各自用途,并在此基础上,编写了主函数。实现了从0-255共256个字节的写入及读取操作。
这次实验我们遇到了不少的难题,像开始使用ARM-Project Manager平台一开始,由于对此平台的不了解,我们走了许都弯路。像对于头文件的配置问题,总是配置不对,后来发现头文件为程序自主生成,无需配置。还有关于程序中的一些.s文件,开始并不知道是有何作用,后来在老师的指点下,发现有必要将其加入到sourse文件栏中调用,同时调用的同时,由于不理解调用的路径问题,多次编译失败,后来发现了问题,是路径配置不当,最终更改了路径,解决了问题。
【免费下载】嵌入式实验报告各实验答案
}
void dummyOs(void) {
while (1) {
LED_CS4 = 0xff;
for (i = 1; i <8; i=i+2) {
LED_CS4 = (LED_VALUE << i) -1; Delay(200); } for (i = 7; i > 1; i=i-2) { LED_CS4 = (LED_VALUE << i) -1; Delay(200); } }
}
2、先从左到中,后从右到中,不断循环
#define LED_CS4 (*((volatile unsigned char *)(0x10500000)))
#define LED_VALUE (0xff)
int i;
void Delay(unsigned int x) {
unsigned int i, j, k; for (i =0; i <=x; i++)
for (j = 0; j <0xff; j++) for (k = 0; k <0xff; k++);
}
void dummyOs(void) {
嵌入式实时操作系统实验报告
嵌入式实时操作系统实验报告
一、实验目的
本实验的目的是让学生了解嵌入式实时操作系统的基本概念和特点,并能够运用实时操作系统编写嵌入式程序。同时,通过本实验让学生对实时性和可靠性的要求有更深入的理解。
二、实验内容
本实验的内容包括以下几个方面: 1. 实时操作系统的概念和基本特点; 2. 实时操作系统的任务调度机制; 3. 实时操作系统的信号量和消息队列; 4. 在实时操作系统上编写一个简单的示例程序。
三、实验原理
1. 实时操作系统的概念和基本特点
实时操作系统是一种以时间为基础的操作系统,它具有两个主要特点:可预测性和可靠性。可预测性是指系统可以在规定时间内完成特定的任务,同时提供精确的响应时间。可靠性是指系统能够保证任务的正确性和可靠性。
2. 实时操作系统的任务调度机制
实时操作系统的任务调度有两种方式:一种是基于优先级的抢占式调度,另一种是基于时间片的轮询式调度。在优先级抢占式调度中,系统会根据任务的优先级来决定任务的执行顺序。而在时间片轮询式调度中,系统会为每个任务分配一个时间片,当时间片用完后会切换到下一个任务。
3. 实时操作系统的信号量和消息队列
信号量是操作系统中一种用于同步和互斥的机制,信号量可以用来保护共享资源,从而避免多个任务同时访问共享资源导致的冲突。消息队列是一种用于任务之间通信的机制,它可以保证任务之间传递的消息的可靠性和有序性。
4. 编写示例程序
在实时操作系统上编写程序时,需要首先定义任务,并对任务的优先级进行设置。然后在任务中编写对共享资源的读/写操作,同时使用信号量或消息队列来实现任务之间的通信。
嵌入式系统实训报告范文3篇
嵌入式系统实训报告范文
嵌入式系统实训报告范文精选3篇(一)
以下是一份嵌入式系统实训报告范文,供参考:
实训报告
课程名称:嵌入式系统实训
姓名:XXX
学号:XXXX
日期:XXXX年XX月XX日
一、实训目的和背景
嵌入式系统是一种专门用于控制和执行特定任务的计算机系统。本次实训旨在通过设计、搭建并测试一个简单的嵌入式系统,帮助学生理解嵌入式系统的根本原理和应用,并提供理论时机来加深对嵌入式系统的理解和应用才能。
二、实训内容
1. 系统设计
本实训的目的是设计一个简单的温度监测系统。该系统包括一个传感器用于检测环境
温度,并将温度值传输到单片机上进展处理。单片机再将处理后的数据显示在LCD屏幕上。
2. 硬件搭建
根据系统设计,我们首先需要准备以下硬件器件:传感器、单片机、LCD屏幕、电等。实际搭建时,我们按照电路图连接各个硬件器件,并进展电接入和信号连接的测试。
3. 软件编程
完成硬件搭建后,接下来需要进展软件编程。我们使用C语言来编写嵌入式系统的程序。主要编程内容包括读取传感器数据、对数据进展处理和计算、将计算结果显示在LCD屏幕上等。
4. 系统测试
完成软件编程后,我们进展系统测试。主要测试内容包括:检测传感器是否能准确读
取温度数据、单片机是否能正确处理数据、LCD屏幕是否正常显示等。通过测试,可
以评估系统的稳定性和可靠性。
三、实训收获
通过参与本次实训,我收获了以下几点:
1. 对嵌入式系统的理解更加深化:通过实操,我对嵌入式系统的原理和应用有了更深
化的理解。
2. 掌握了硬件搭建和连接的技能:我学会了如何搭建和连接硬件器件,进步了理论操
嵌入式系统 各实验实验报告
嵌入式系统设计实验报告
班级: XXXXXXXXXX
学号: XXXXXXXXXX
姓名: XXXXXXX
成绩:
指导教师: XXXXXXXXXXX
1. 实验一
1.1 实验名称
博创UP-net3000实验台基本结构及使用方法
1.2 实验目的
熟悉UP-net3000实验平台的核心硬件电路和外设
通过操作系统自带的通讯软件超级终端,检验各个外设的工作状态
1.3 实验环境
硬件:ARM 嵌入式开发平台、用于ARM7TDMI 的JTAG 仿真器、PC 机Pentium100 以上。
软件:PC 机操作系统Windows、ADS1.2 集成开发环境、仿真器驱动程序、超级终端通讯程序。
1.4实验内容及要求
一、内容
①嵌入式系统开发流程概述
②熟悉UP-net3000实验平台的核心硬件电路和外设
③ARM JTAG的安装与使用
④通过操作系统自带的通讯软件超级终端,检验各个外设的工作状态
二、要求
通过本次课程对各个外设的了解,为今后各个接口实验打下基础。
1.5实验设计与实验步骤
一、JTAG 的驱动程序的安装:
执行armJtag 目录下armJtagSetup.exe 程序,选择安装目录,安装JTAG 软件。
二、通过通讯软件超级终端来检验外设的工作状态:
①运行Windows 系统下的超级终端(HyperTerminal)应用程序,新建一个通信终端。为所建超级终端取名为arm,可以为其选择第一个图标。单击“确定”按钮。
②在接下来的对话框中选择ARM 开发平台实际连接的PC 机串口(如COM1),按确定按钮后出现属性对话框,设置通信的格式和协议。波特率为115200,数据位8,无奇偶校验,停止位1,无数据流控制。按确定完成设置。
北邮研究生嵌入式系统实验课程——第4-1节 VxWorks任务的基本原理
实时性(Real-Time)
实时性使得一个控制系统能够及时响应对该系统 的控制。 如果一个系统的响应时间是可以预测的,则它就 是一个具有确定性的系统。 从一个事件发生到它被响应之间的时间称为Late ncy。 确定性响应是实时系统性能关键因素。
对实时系统的要求
能够控制多种外部部件
– 独立的部件 – 同步的部件 – 异步的部件
执行速度要快
– 快速响应 – 开销小
确定性要求
– 迟到的响应就是错误的响应
如何选择一个设计方案
如何设计一 个系统来控 制机械手
采用单个任务的方法
如果以单个任务的方式来设计系统 一个任务在一个循环中控制所有的部件 arm() { for(; ;) {if (shoulder needs moving) moveShoulder(); if (elbow needs moving) moveElbow(); if (wrist needs moving) moveWrist(); …} }
如果函数执行成功,则返回任务标识(id), 否则返回错误号。 例如
– NewTid=taskSpawn(“tMyTask”,150,0,2000, myRoutine(),arg1,arg2,0,0,0,0,0,0,0,0)
任务标识(task id)
内核在任务创建时分配给任务的 对每个任务是唯一的 在任务退出后可以重用 相关的taskLib例程
嵌入式系统实验报告
嵌入式系统实验报告
学院:计算机科学与工程
姓名:
学号:______________
专业:
指导老师:
完成日期:
实验一:流水灯案例、8位数码管动态扫描案例
一、实验目的
1.1进一步熟悉Keil C51集成开发环境调试功能的使用;
1.2学会自己编写程序,进行编译和仿真测试;
1.3利用开发板下载hex文件后验证功能。
二、实验原理
2.1:实验原理图
2.2:工作原理
2.2.1:流水灯
电路中有LO,1,L2,L3,4,L5,L6,L7 共八个发光二极管,当引脚LED_ SEL输入为1,对于A、B、C、D、E、F、G、H引脚,只要输入为1,则点亮相连接的发光二极管。A~H引脚连接STM32F108VB芯片的PE8~PE15,程序初始化时,对其进行初始设置。引脚LED_ SEL 为1时,发光二极管才工作,否则右边的数码管工作。注意,LED SEL 连接于PB3,该引脚具有复用功能,在默认状态下,该引脚的I0不可用,需对AFIO_ MAPR寄存器进行设置,设置其为10可用。
2.2.2:8位数码管
数码管中的A~G、DP段分别连接到电路图中的A~G、H线上,当某段上有一-定的电压差值时,便会点亮该段。当E3输入为1,也就是LED_ SEL输入为0时,根据SELO~SEL2的值确定选中的数码管,即位选,再根据A~H引脚的高低电平,点亮对应段,即段选。
三、实验结果
3.1:流水灯
对于给出的流水灯案例,下载HEX文件后,在开发板上可观察到L0-L7从左至右依次点亮,间隔300ms。当全部点亮八个发光二极管后,八个发光二极管同时熄灭,间隔300ms后,发光二极管再次从左至右依次点亮。如此反复循坏。
嵌入式实验报告
实验模块一
说明:该模块分为3个子实验,每个实验均为设计性实验,实验设计的内容由简到繁,系统功能在前序实验基础上逐渐增加。
实验一
实验目的:掌握输出设备程序控制的原理
实验设备:TCP-I实验箱,文祥500台式电脑
实验内容:采用8086与8255组成系统,8个发光二极管为输出,编程实现控制8个发光二极管一盏灯循环点亮。
实验步骤:1、将输出端口引脚与LED相连
2、编程实现对8个LED的输出控制
将实验箱中的8255片选信号连接到218H~21FH,将8255的4个寄存器地址(A、B、C端口及控制字寄存器端口)设置为218H~21BH。将8255的端口A的8个引脚:PA0~PA7与8个LED对应相连,然后打开实验箱电源,最后编程对8个LED进行显示控制。程序如下:
程序清单:
CODE SEGMENT
ASSUME CS:CODE
START:
MOV DX,21BH
MOV AL,80H
OUT DX,AL;工作方式初始化
MOV DX,218H
MOV AL,0FEH;设置输出数据,即显示模式
MOV CX,80;设置循环次数
XH:OUT DX,AL
ROL AL,1
CALL DELAY;调用延迟程序
LOOP XH
MOV AH,4CH
INT 21H;返回dos
DELAY PROC;延迟子程序
PUSH CX
MOV BX,2000
A0:MOV CX,3000
A1:LOOP A1
DEC BX
JNZ A0
POP CX
RET
DELAY ENDP
CODE ENDS
END START
实验总结:主要包括对实验结果、调试过程、错误及产生的原因的分析,以及本次实验的重要收获等。此项为实验成绩评定的重要依据。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
嵌入式系统期末实验
一、实验要求
题目:支持消息驱动模式的实时软件框架
目的:在充分理解嵌入式处理器特点、RTOS 及强实时嵌入式系统软件设计规范的基础上,构建自己的实时系统软件框架基本功能,并在其上自拟应用(如部分模拟TCP 的C/S两端通信流程),测试软件框架的相关功能。
环境:VxWorks 的VxSim 仿真环境或2440(ARM920T)
内容:
必选功能:
1. 消息驱动的Task 统一框架,包含统一消息格式定义及使用规范;
2. 支持消息驱动模式的软定时器的机制;
3. Task 启动同步功能;
4. 体现前次实验中实现的自定义内存管理机制,最大限度降低外部碎片对系统可靠性的威胁。
可选功能(加分):
其它有利于实时处理的有效机制,如:无信号量(互斥)支持的临界资源访问方式,zero copy 等;
二、实现的功能
1. 消息驱动的Task 统一框架,包含统一消息格式定义及使用规范;
STATUS Task()
{
Initialization(MBox, Data Structure, Timer, etc.)
Forever{
MsgReceive
If(…)
{
……
}else if(…)
{
……
}
……
}
}
typedef struct _MESSAGE
{
int mType; /* 消息类型 0:timer->client
*1:client->server 2:server->client*/
int mSendId; /* 发送任务的MESSAGE ID */
int mRecvId; /* 接收任务的MESSAGE ID */
int mData; /* 消息中传递的数据 */
}MESSAGE;
2. 支持消息驱动模式的软定时器的机制;
/* timer(id)向客户端消息队列定时发送的定时器*/
STATUS timer(int id)
{
MESSAGE* txMsg;/* 用于从消息队列中接收消息 */
int tick;/*创建一个定时,用于提醒发送者任务定时发送消息*/
tick=sysClkRateGet();
semTake(semSynStart,WAIT_FOREVER);
FOREVER
{
taskDelay((int)(tick*DELAY_SECOND));
txMsg = (MESSAGE*)memMalloc(MAX_MSG_LEN);
txMsg->mType = 0;
txMsg->mSendId = MID_TIMER(id);
txMsg->mRecvId = MID_CLIENT(id);
txMsg->mData = 0;
printf("tTimer%d send message to tClient%d!\n",id,id);
if(msgQSend(msgQIdClient[id],(char*)&txMsg,MAX_MSG_LEN,WAIT_FOREVER,MSG_ PRI_NORMAL) == ERROR )
{
return (ERROR);
}
}
return (OK);
}
3. Task 启动同步功能;
由manager()创建的任务优先级最高,先创建timer()、server()、client()的任务,让他们都在等待信号量semSynStart而被阻塞,最后创建manager()的任务,占据CPU,等待其他所有任务都被阻塞,解锁所有等待信号量的任务,让它们同时启动。
/* progStart()启动实例程序*/
STATUS progStart(void)
{
int id; /* 用来区分不同的定时器或者客户任务 */
mallocPtr=&sysMalloc;
mallocPtr->frontBlock = 0;
initialPtr = initial();
tidServer = tidManager = 0;
for (id = 0; id < NUM_CLIENT; id++)
{
tidClient[id] = 0;
}
for (id = 0; id < NUM_TIMER; id++)
{
tidTimer[id] = 0;
}
/* 创建消息队列 */
msgQIdServer = msgQCreate(MAX_MSGS, MAX_MSG_LEN,
MSG_Q_FIFO|MSG_Q_EVENTSEND_ERR_NOTIFY);
if (msgQIdServer == NULL)
{
return (ERROR);
}
for (id = 0; id < NUM_CLIENT; id++)
{
msgQIdClient[id] = msgQCreate(MAX_MSGS, MAX_MSG_LEN, MSG_Q_FIFO|MSG_Q_EVENTSEND_ERR_NOTIFY);
if (msgQIdClient[id] == NULL)
{
return (ERROR);
}
}
semSynStart = semBCreate(SEM_Q_FIFO |
SEM_EVENTSEND_ERR_NOTIFY,SEM_EMPTY);
semMalloc = semBCreate(SEM_Q_PRIORITY,SEM_FULL);
semFree = semBCreate(SEM_Q_PRIORITY,SEM_FULL);
/* 创建任务 */
tidServer = taskSpawn("tServer", 220, 0,
STACK_SIZE,(FUNCPTR)server,0,0,0,0,0,0,0,0,0,0);
for (id = 0; id < NUM_CLIENT; id++)
{
char tempName[20];
sprintf(tempName, "tClient%d", id);
tidClient[id] = taskSpawn(tempName, 210, 0, STACK_SIZE,