嵌入式实时操作系统实验报告

合集下载

精选嵌入式系统实习报告3篇

精选嵌入式系统实习报告3篇

精选嵌入式系统实习报告3篇嵌入式系统实习报告篇1ARM嵌入式系统综合设计一.实习时间和地点安排1.实习时间:20xx年XX月03 日—— 20xx年XX月14日,共两周的时间。

2.每天的实习时间安排:上午:8:30——11:30下午:13:30——15:303.实习地点:校内。

二.实习目的1.掌握电子元器件的焊接原理和方法。

2.掌握ARM7 LPC2132控制程序的编写方法。

3.掌握调试软件和硬件的方法。

三.实习内容与要求1.根据设计要求焊接好电路板并测试焊接无误。

2.绘制流程图并编写程序。

3.编译通过后,将程序下载到LPC2132进行调试。

4.调试成功后编写实习报告。

四.LPC2132芯片介绍LPC2132最小系统图及其介绍概述LPC2132是基于一个支持实时仿真和嵌入式跟踪的32/16 位 ARM7TDMI-STM CPU 的微控制器,并带有 32kB、64kB、512 kB 的嵌入的高速Flash 存储器。

128 位宽度的存储器接口和独特的加速结构使 32 位代码能在最大时钟速率下运行。

对代码规模有严格控制的应用可使用 16 位 Thumb?模式将代码规模降低超过 30%,而性能的损失却很小。

较小的封装和极低的功耗使 LPC2131/2132/2138 可理想地用于小型系统中,如访问控制和 POS 机。

宽范围的串行通信接口和片内 8/16/32kB 的 SRAM 使LPC2131/2132/2138 非常适用于通信网关、协议转换器、软 modem 、声音辨别和低端成像,为它们提供巨大的缓冲区空间和强大的处理功能。

多个 32 位定时器、1 个或 2 个 10 位 8 路 ADC 、10 位 DAC 、PWM 通道和 47 个 GPIO 以及多达9 个边沿或电平触发的外部中断使它们特别适用于工业控制和医疗系统。

特性1.小型 LQFP64 封装的 16/32 位 ARM7TDMI-S 微控制器。

嵌入式操作系统实验报告

嵌入式操作系统实验报告

中南大学信息科学与工程学院实验报告:安磊班级:计科0901 学号: 0909090310 指导老师:宋虹目录课程设计容 ----------------------------------- 3 uC/OS操作系统简介 ------------------------------------ 3 uC/OS操作系统的组成 ------------------------------ 3 uC/OS操作系统功能作用 ---------------------------- 4 uC/OS文件系统的建立 ---------------------------- 6 文件系统设计的原则 ------------------------------ 6 文件系统的层次结构和功能模块 --------------------- 6 文件系统的详细设计 -------------------------------- 8 文件系统核心代码 --------------------------------- 9 课程设计感想 ------------------------------------- 11 附录 -------------------------------------------------- 12课程设计容在uC/OS操作系统中增加一个简单的文件系统。

要求如下:(1)熟悉并分析uc/os操作系统(2)设计并实现一个简单的文件系统(3)可以是存放在存的虚拟文件系统,也可以是存放在磁盘的实际文件系统(4)编写测试代码,测试对文件的相关操作:建立,读写等课程设计目的操作系统课程主要讲述的容是多道操作系统的原理与技术,与其它计算机原理、编译原理、汇编语言、计算机网络、程序设计等专业课程关系十分密切。

本课程设计的目的综合应用学生所学知识,建立系统和完整的计算机系统概念,理解和巩固操作系统基本理论、原理和方法,掌握操作系统开发的基本技能。

《嵌入式操作系统》实验报告

《嵌入式操作系统》实验报告

..
..
..
..
..
思考:如何能在 Linux 系统启动时,输出显示自定义的文本信息,请修改 码,完成此功能。
Linux 核启动代
..
..
..
..
..
5. 实验中遇到的问题及解决方法
在 实 验 中 遇 到 一 些 问 题 , 例 如 在 复 制 的 时 候 我 记 得 原 来 用 cp

a /tmp/linux-2.4.18-br.tar.gz
} module_init(hello_init);
module_exit(hello_exit);
..
..
..
..
..
有关驱动程序的编写规, 请参考课程教材, 本实验只在编写简单的驱动 ( 核 ) 程序并加入 到 Linux 核目录树中,使用户熟悉编译核的过程。该驱动程序是向终端输出相关程序信息。 编写好 helloworld.c 后将其拷贝到核源码树的 drivers/char/ 目录下。
obj-$(CONFIG_PPDEV)
+= ppdev.o
(4) 、运行 make menuconfig 配置核对 helloworld 程序的支持 :
[rootlocalhost linux-2.6.35.7]# make distclean [rootlocalhost linux-2.6.35.7]# make menuconfig
[rootlocalhost
/]#
cp
/UP-Magic210/SRC/kernel/linux-2.6.35.7/drivers/char/
helloworld.c
(2) 、进入实验核源码目录修改 driver/char/ 添加 helloworld 程序的菜单支持

嵌入式系统试验报告

嵌入式系统试验报告

嵌入式系统实验报告学院:计算机科学与工程姓名:___________学号:_______________专业:_______________指导老师:______________完成日期:______________实验一:流水灯案例、8位数码管动态扫描案例一、实验目的1.1 进一步熟悉Keil C51集成开发环境调试功能的使用;1.2 学会自己编写程序,进行编译和仿真测试;1.3 利用开发板下载hex 文件后验证功能。

二、实验原理2.1 :实验原理图030B 〜I ।卜RSI I ™Hi 」 口 UICDR Hr hJJK RR 18q U I. 海水灯电浒周LhE U_EEM^Li > > 第 X > k >n - » =白 L a £0EBS2.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线上,当某段上有一-定的电压差值时,便会点亮该段。

当£3输入为1,也就是LED_ 5£1输入为0时,根据SELO〜SEL2的值确定选中的数码管,即位选,再根据A~H引脚的高低电平,点亮对应段,即段选。

三、实验结果3.1:流水灯对于给出的流水灯案例,下载HEX文件后,在开发板上可观察到L0-L7从左至右依次点亮,间隔300ms。

嵌入式实习报告(共5篇)

嵌入式实习报告(共5篇)

嵌入式实习报告(共5篇)第一篇:嵌入式实习报告一、嵌入式系统开发与应用概述在今日,嵌入式ARM 技术已经成为了一门比较热门的学科,无论是在电子类的什么领域,你都可以看到嵌入式ARM 的影子。

如果你还停留在单片机级别的学习,那么实际上你已经落下时代脚步了,ARM 嵌入式技术正以几何的倍数高速发展,它几乎渗透到了几乎你所想到的领域。

本章节就是将你领入ARM 的学习大门,开始嵌入式开发之旅。

以嵌入式计算机为技术核心的嵌入式系统是继网络技术之后,又一个IT领域新的技术发展方向。

由于嵌入式系统具有体积小、性能强、功耗低、可靠性高以及面向行业具体应用等突出特征,目前已经广泛地应用于军事国防、消费电子、信息家电、网络通信、工业控制等各个领域。

嵌入式的广泛应用可以说是无所不在。

嵌入式微处理器技术的基础是通用计算机技术。

现在许多嵌入式处理器也是从早期的PC 机的应用发展演化过来的,如早期PC 诸如TRS-80、Apple II 和所用的Z80 和6502 处理器,至今仍为低端的嵌入式应用。

在应用中,嵌入式微处理器具有体积小、重量轻、成本低、可靠性高的优点。

嵌入式处理器目前主要有Am186/88、386EX、SC-400、Power PC、68000、MIPS、ARM 等系列。

在早期实际的嵌入式应用中,芯片选择时往往以某一种微处理器内核为核心,在芯片内部集成必要的ROM/EPROM/Flash/EEPROM、SRAM、接口总线及总线控制逻辑、定时/计数器、WatchDog、I/O、串行口、脉宽调制输出、A/D、D/A 等各种必要的功能和外设。

二、实习设备硬件:Embest EduKit-IV实验平台、ULINK2仿真器套件、PC机软件:μVision IDE for ARM集成开发环境、Windows 98/2000/NT/XP三、实习目的1.初步掌握液晶屏的使用及其电路设计方法;掌握S3C2410X处理器的LCD控制器的使用;掌握通过任务调用的方法把液晶显示函数添加到uC/OS-II中;通过实验掌握液晶显示文本及图形的方法与程序设计。

嵌入式_实习报告

嵌入式_实习报告

实习报告一、实习背景与目的随着科技的飞速发展,嵌入式系统已经深入到我们生活的方方面面,从智能手机、智能家居到工业控制、无人驾驶等领域,都离不开嵌入式技术的支持。

本次实习旨在让我深入了解嵌入式系统的原理与实践,掌握嵌入式编程的基本技能,提高实际动手能力,为今后的学习和工作打下坚实的基础。

二、实习内容与过程1. 嵌入式系统理论基础在实习的第一阶段,我学习了嵌入式系统的基本概念、硬件架构、软件设计以及常见的嵌入式操作系统等。

通过学习,我了解到嵌入式系统是将计算机技术应用于特定领域的一种计算机系统,具有体积小、功耗低、成本低、可靠性高等特点。

同时,我还掌握了ARM、MIPS等常见嵌入式处理器的架构与编程方法。

2. 嵌入式编程实践在实习的第二阶段,我进行了嵌入式编程实践。

首先,我学习了基于Linux的嵌入式编程,掌握了交叉编译工具链的使用、Makefile的编写以及Bootloader、Kernel的定制与编译。

随后,我通过实际项目案例,学习了如何使用C、C++等编程语言进行嵌入式软件开发,掌握了模块化编程、驱动开发等技巧。

3. 嵌入式系统项目实战在实习的第三阶段,我参与了嵌入式系统项目实战。

以小组为单位,我们设计了一个基于嵌入式处理器的智能家居系统,包括温度传感器、湿度传感器、指纹识别等模块。

在项目实施过程中,我负责编写温度传感器的驱动程序,通过深入理解硬件原理,成功实现了数据的采集、处理与显示。

在项目调试阶段,我积极参与团队讨论,共同解决了一系列技术难题,最终完成了整个项目的开发。

三、实习收获与体会通过本次实习,我收获颇丰。

首先,我系统地学习了嵌入式系统的理论知识,为今后的工作打下了基础。

其次,通过实际动手实践,我掌握了嵌入式编程的技能,提高了自己的实际操作能力。

最后,在项目实战中,我学会了团队合作、问题解决等综合素质,为今后的工作积累了宝贵的经验。

总之,本次嵌入式实习使我受益匪浅,不仅提高了我的专业技能,还锻炼了我的团队协作能力。

嵌入式实习报告三篇

嵌入式实习报告三篇
在易嵌的这个暑假,我过得充实而快乐。在这里有着同学间的探讨、师生间的互动和魔鬼般的训练!军队通过扎实的训练培养出来一代代革命军人,相信不久的将来,我也会成为一名优秀的嵌入式工程师!
嵌入式实习报告 篇2
此次设计我们采用以LM3S2100为微控制器,并通过硬件和软件两方面设计,结合6位LED数码管,放大整形电路,来实现频率计在嵌入式系统中的开发与应用。
在易嵌短暂的两个月,我们从linux基础入手,强化了c语言编程,学习了linux系统编程和网络编程。时间虽短,但成长很快,无论是理论知识还是实践能力都得到了大幅度的提高。在这里将理论和实践相结合,相互促进,相互补充,使得学习更加透彻。通过用不同方法实现同一个项目,不断深入,层层推进,学以致用!
在易嵌的这个暑假,我过得充实而快乐。在这里有着同学间的探讨、师生间的互动和魔鬼般的训练!在我丰富多彩的人生路上留下了永远亮丽与难忘的记忆!
VF/VHF/UHF频段的频率,也十分方便和准确。PTS2600使用一个12位数字的LCD液晶显示屏来显示所测得的频率、闸口时间(分辨率相关)、菜单功能以及频率表的测量结果。所有这些数值都是同时显示在一个屏幕上的。PTS2600的机箱采用高标准的铝质材料制成,各模块安装在下方有钢板支承的母板上。模块相对独立,维修方便,主要通过更换模块进行。 我国利用相检宽带测频技术设计的高精度频率计也非常具有突破性和实用性。该项新技术及仪器是针对已有测频技术的特点及存在问题,推出完全新颖的检测精度高、便于实施且设备构成又比较经济的一种新技术及仪器。
被测信号经放大整形电路变成计数器所要求的脉冲信号,其频率与被测信号的频率相同。当1s信号来到时,被测脉冲信号进入芯片相关的,计数器开始计数,直到1s信号结束时,停止计数。若在1s时间内计数器计得的脉冲数为N,则被测信号频率fX?Nhz。

实验五(嵌入式实时操作系统实验报告)

实验五(嵌入式实时操作系统实验报告)

学号:08083572班级:信科08-3 姓名:刘俊迪专业:电子信息科学与技术实验五:uC/OS-II内核移植实验1.实验目的:⏹了解uC/OS-II内核的基本原理和主要结构⏹掌握将uC/OS-II内核移植到ARM处理器上的基本方法⏹掌握uC/OS-II下基本多任务应用程序的编写2.实验内容:学习uC/OS-II再ARM处理器上的移植过程编写简单的多任务应用程序,同时实现跑马灯和数码管显示的功能3.实验原理:(1)uC/OS-II的移植1、汇编语言、C语言代码需要移植2、移植工作集中在多任务切换的实现上3、在ARM处理器上的移植,需要完成的工作包括:修改三个和体系结构相关的文件,代码量大约是500行。

这三个文件是OS_CPU_C.c、OS_CPU_C.H以及OS_CPU_A.S(2)OS_CPU.H的移植1、数据类型定义INT8U -> unsigned charINT8S -> signed charINT16U -> unsigned shortINT16S -> signed shortINT32U -> unsigned intINT32S -> signed int2、ARM处理器相关宏定义退出临界区#define OS_ENTER_CRITICAL() ARMDisableInt()进入临界区#define OS_EXIT_CRITICAL() ARMEnableInt()3、堆栈增长方向堆栈由高地址向低地址增长,这个也是和编译器有关的,当进行函数调用时,入口参数和返回地址一般都会保存在当前任务的堆栈中,编译器的编译选项和由此生成的堆栈指令就会决定堆栈的增长方向。

#define OS_STK_GROWTH 1(3)OS_CPU.c的移植1、任务堆栈初始化1、由OSTaskCreate或OSTaskCreateExt调用2、用来初始化任务的堆栈并返回新的堆栈指针stk。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

嵌入式实时操作系统实验报告任务间通信机制的建立系别计算机与电子系专业班级*****学生姓名******指导教师 ******提交日期 2012 年 4 月 1 日一、实验目的掌握在基于嵌入式实时操作系统μC/OS-II的应用中,任务使用信号量的一般原理。

掌握在基于优先级的可抢占嵌入式实时操作系统的应用中,出现优先级反转现象的原理及解决优先级反转的策略——优先级继承的原理。

二、实验内容1.建立并熟悉Borland C 编译及调试环境。

2.使用课本配套光盘中第五章的例程运行(例5-4,例5-5,例5-6),观察运行结果,掌握信号量的基本原理及使用方法,理解出现优先级反转现象的根本原因并提出解决方案。

3.试编写一个应用程序,采用计数器型信号量(初值为2),有3个用户任务需要此信号量,它们轮流使用此信号量,在同一时刻只有两个任务能使用信号量,当其中一个任务获得信号量时向屏幕打印“TASK N get the signal”。

观察程序运行结果并记录。

4. 试编写一个应用程序实现例5-7的内容,即用优先级继承的方法解决优先级反转的问题,观察程序运行结果并记录。

5.在例5-8基础上修改程序增加一个任务HerTask,它和YouTask一样从邮箱Str_Box里取消息并打印出来,打印信息中增加任务标识,即由哪个任务打印的;MyTask发送消息改为当Times为5的倍数时才发送,HerTask接收消息采用无等待方式,如果邮箱为空,则输出“The mailbox is empty”, 观察程序运行结果并记录。

三、实验原理1. 信号量µC/OS-II中的信号量由两部分组成:一个是信号量的计数值,它是一个16位的无符号整数(0 到65,535之间);另一个是由等待该信号量的任务组成的等待任务表。

用户要在OS_CFG.H中将OS_SEM_EN开关量常数置成1,这样µC/OS-II 才能支持信号量。

在使用一个信号量之前,首先要建立该信号量,也即调用OSSemCreate()函数(见下一节),对信号量的初始计数值赋值。

该初始值为0到65,535之间的一个数。

如果信号量是用来表示一个或者多个事件的发生,那么该信号量的初始值应设为0。

如果信号量是用于对共享资源的访问,那么该信号量的初始值应设为1(例如,把它当作二值信号量使用)。

最后,如果该信号量是用来表示允许任务访问n个相同的资源,那么该初始值显然应该是n,并把该信号量作为一个可计数的信号量使用。

µC/OS-II提供了5个对信号量进行操作的函数。

它们是:OSSemCreate(),OSSemPend(),OSSemPost(),OSSemAccept()和OSSemQuery()函数。

图 F6.5说明了任务、中断服务子程序和信号量之间的关系。

图中用钥匙或者旗帜的符号来表示信号量:如果信号量用于对共享资源的访问,那么信号量就用钥匙符号。

符号旁边的数字N代表可用资源数。

对于二值信号量,该值就是1;如果信号量用于表示某事件的发生,那么就用旗帜符号。

这时的数字N代表事件已经发生的次数。

从图 F6.5中可以看出OSSemPost()函数可以由任务或者中断服务子程序调用,而OSSemPend()和OSSemQuery()函数只能有任务程序调用。

2. 优先级反转在本实验中,要体现嵌入式实时内核的优先级抢占调度的策略,并显现由于共享资源的互斥访问而出现的优先级反转现象。

优先级反转发生在有多个任务需要使用共享资源的情况下,可能会出现高优先级任务被低优先级任务阻塞,并等待低优先级任务执行的现象。

高优先级任务需要等待低优先级任务释放资源,而低优先级任务又正在等待中等优先级任务,这种现象就被称为优先级反转。

两个任务都试图访问共享资源是出现优先级反转最通常的情况。

为了保证一致性,这种访问应该是顺序进行的。

如果高优先级任务首先访问共享资源,则会保持共享资源访问的合适的任务优先级顺序;但如果是低优先级任务首先获得共享资源的访问,然后高优先级任务请求对共享资源的访问,则高优先级任务被阻塞,直到低优先级任务完成对共享资源的访问。

3. 优先级继承优先级继承的主要思想是:当高优先级任务因申请某共享资源失败被阻塞时,把当前拥有该资源的、且优先级较低的任务的优先级提升,提升的高度等于这个高优先级任务的优先级。

在μC/OS-II中,在创建管理共享资源的互斥信号量时,可以指定一个PIP(优先级继承优先级),之后可以把拥有共享资源的任务优先级提升到这个高度。

具体过程如下:1. 当任务A申请共享资源S时,首先判断是否有别的任务正在占用资源S,若无,则任务A获得资源S并继续执行;2. 如果任务A 申请共享资源S 时任务B 正在使用该资源,则任务A 被挂起,等待任务B 释放该资源;同时判断任务B 的优先级是否低于任务A 的,若高于任务A,则维持任务B的优先级不变;3. 如果任务B的优先级低于任务A的,则提升任务B的优先级到PIP,当任务B释放资源后,再恢复其原来的优先级。

4. 建立一个信号量, OSSemCreate()程序清单 L6.9是OSSemCreate()函数的源代码。

首先,它从空闲任务控制块链表中得到一个事件控制块[L6.9(1)],并对空闲事件控制链表的指针进行适当的调整,使它指向下一个空闲的事件控制块[L6.9(2)]。

如果这时有任务控制块可用[L6.9(3)],就将该任务控制块的事件类型设置成信号量OS_EVENT_TYPE_SEM[L6.9(4)]。

其它的信号量操作函数OSSem???()通过检查该域来保证所操作的任务控制块类型的正确。

例如,这可以防止调用OSSemPost()函数对一个用作邮箱的任务控制块进行操作[6.06节,邮箱]。

接着,用信号量的初始值对任务控制块进行初始化[L6.9(5)],并调用OSEventWaitListInit()函数对事件控制任务控制块的等待任务列表进行初始化[见6.01节,初始化一个任务控制块,OSEventWaitListInit()][L6.9(6)]。

因为信号量正在被初始化,所以这时没有任何任务等待该信号量。

最后,OSSemCreate()返回给调用函数一个指向任务控制块的指针。

以后对信号量的所有操作,如OSSemPend(), OSSemPost(), OSSemAccept()和OSSemQuery()都是通过该指针完成的。

因此,这个指针实际上就是该信号量的句柄。

如果系统中没有可用的任务控制块,OSSemCreate()将返回一个NULL指针。

值得注意的是,在µC/OS-II中,信号量一旦建立就不能删除了,因此也就不可能将一个已分配的任务控制块再放回到空闲ECB链表中。

如果有任务正在等待某个信号量,或者某任务的运行依赖于某信号量的出现时,删除该任务是很危险的。

程序清单 L6.9 建立一个信号量OS_EVENT *OSSemCreate (INT16U cnt){OS_EVENT *pevent;OS_ENTER_CRITICAL();pevent = OSEventFreeList; (1)if (OSEventFreeList != (OS_EVENT *)0) { (2)OSEventFreeList = (OS_EVENT *)OSEventFreeList->OSEventPtr;}OS_EXIT_CRITICAL();if (pevent != (OS_EVENT *)0) { (3)pevent->OSEventType = OS_EVENT_TYPE_SEM; (4)pevent->OSEventCnt = cnt; (5)OSEventWaitListInit(pevent); (6)}return (pevent); (7)}5. 邮箱邮箱是µC/OS-II中另一种通讯机制,它可以使一个任务或者中断服务子程序向另一个任务发送一个指针型的变量。

该指针指向一个包含了特定“消息”的数据结构。

为了在µC/OS-II中使用邮箱,必须将OS_CFG.H中的OS_MBOX_EN常数置为1。

使用邮箱之前,必须先建立该邮箱。

该操作可以通过调用OSMboxCreate()函数来完成(见下节),并且要指定指针的初始值。

一般情况下,这个初始值是NULL,但也可以初始化一个邮箱,使其在最开始就包含一条消息。

如果使用邮箱的目的是用来通知一个事件的发生(发送一条消息),那么就要初始化该邮箱为NULL,因为在开始时,事件还没有发生。

如果用户用邮箱来共享某些资源,那么就要初始化该邮箱为一个非NULL的指针。

在这种情况下,邮箱被当成一个二值信号量使用。

µC/OS-II提供了5种对邮箱的操作:OSMboxCreate(),OSMboxPend(),OSMboxPost(),OSMboxAccept()和OSMboxQuery()函数。

图 F6.6描述了任务、中断服务子程序和邮箱之间的关系,这里用符号“I”表示邮箱。

邮箱包含的内容是一个指向一条消息的指针。

一个邮箱只能包含一个这样的指针(邮箱为满时),或者一个指向NULL的指针(邮箱为空时)。

从图 F6.6可以看出,任务或者中断服务子程序可以调用函数OSMboxPost(),但是只有任务可以调用函数OSMboxPend()和OSMboxQuery()。

建立一个邮箱,OSMboxCreate()程序清单 L6.14是OSMboxCreate()函数的源代码,基本上和函数OSSemCreate()相似。

不同之处在于事件控制块的类型被设置成OS_EVENT_TYPE_MBOX[L6.14(1)],以及使用.OSEventPtr域来容纳消息指针,而不是使用.OSEventCnt域[L6.14(2)]。

OSMboxCreate()函数的返回值是一个指向事件控制块的指针[L6.14(3)]。

这个指针在调用函数OSMboxPend(),OSMboxPost(),OSMboxAccept()和OSMboxQuery()时使用。

因此,该指针可以看作是对应邮箱的句柄。

值得注意的是,如果系统中已经没有事件控制块可用,函数OSMboxCreate()将返回一个NULL指针。

邮箱一旦建立,是不能被删除的。

比如,如果有任务正在等待一个邮箱的信息,这时删除该邮箱,将有可能产生灾难性的后果。

程序清单 L6.14 建立一个邮箱OS_EVENT *OSMboxCreate (void *msg){OS_EVENT *pevent;OS_ENTER_CRITICAL();pevent = OSEventFreeList;if (OSEventFreeList != (OS_EVENT *)0) {OSEventFreeList = (OS_EVENT *)OSEventFreeList->OSEventPtr;}OS_EXIT_CRITICAL();if (pevent != (OS_EVENT *)0) {pevent->OSEventType = OS_EVENT_TYPE_MBOX; (1)pevent->OSEventPtr = msg; (2)OSEventWaitListInit(pevent);}return (pevent); (3)}等待一个邮箱中的消息,OSMboxPend()程序清单 L6.15是OSMboxPend()函数的源代码。

相关文档
最新文档