软件实习日记-王玉

更新时间:2024-06-05 17:31:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

实习日记

班级:软升本姓名:学号:

12-1 王 玉 1

1220980122

2014年2月20日

上午,校内嵌入式软件实训今天开始,首先老师带领我们复习以前做过的实验,第一周先做ARM实验,一共12个实验,将在第一周内完成这些实验。

首先熟悉下ADS1.2操作环境,按照实验指导书的引到,我一步步的完成了ADS1.2的配置工作,并新建了一个LCD实验,实验结果为系统启动后,八盏LED灯就会向右点亮。在flash调试时,需要修改RO BASE为0x00000000,其他不用修改,重新编译下载就可运行。在sdram调试时,需要修改RO BASE为0xa0000000,其他不用修改,重新编译下载就可运行。

通过本次上机实验,我掌握了汇编语言程序设计的基础知识。ADS运行环境的使用,通过本次实验也要求我们对于ARM汇编实验要有认真仔细的态度,一个空格就可能导致程序结果的运行错误。

2014年2月21日

这次试验室上机,了解了直入键盘与矩阵键盘的原理,了解键盘寄存器的功能本次实验结合实验二的八段数码管,通过对键盘的操作,实现对八段数码管控制。当按1 键的时候,LED1 数码管就会亮,同理,按相应的键,相应的数码管就会亮。在 EELiod 中,使用了直入键盘与矩阵键盘结合的方式。在 EELiod 中,系统可以支持八个直入键盘,或者六个直入键盘和一个旋转译码器(两个管脚组成一个旋转译码器),或者四个直入键盘和二个旋转译码器。矩阵键盘接口支持自动扫描与手动扫描的方式进行对矩阵键盘按键的检测。最多可以支持八个输入/输出,总共 64 个矩阵键盘。KP-MKINx 自动或者手动发出信号检测矩阵键盘的的按键情况。KPC(Keypad Interface Control register)键盘接口控制寄存器是一个可读写的寄存器,它可实现对键盘的全局控制操作。包括对直入、矩阵键盘的使能、中断、自动扫描等。

2

2014年2月22日

今天,在实验一的基础上进一步了解 ARM 体系结构和编程方法,了解 8 段码的知识本程序在实验一的基础上增加了对 8 段码显示的支持,在系统开机后,会在 4 个八段管上分别显示 1 到 4 的数字,每隔一定的时间,数字递增一次。每个 LED 上升到 9 时回到 0。8 段管是由 8 个 LED 灯(每个灯我们称为一个段)组合成的形状为数字 8 带小数点的图形,通过控制每个段的开启和关闭来形成数字图形 0 到 9。每个段通过一个缓冲器和数据总线相连,在本系统中如果数据为 0 则对应的该段点亮。打开 ADS,执行 Project->Make ,也可以直接用快捷键 F7 进行编译、连接生成映像文件。编译、连接后就生成映像文件,我们可以把它下载到 FLASH 或者 SDRAM 运行和调试。

2014年2月23日

本次实验主要通过 CAN BUS 程序发送特定信息,利用 CAN232MB 智能协议转换器,把发送的信息转换到串口输出。本程序主要为了让读者能够清晰了解 CAN BUS 是如何初始化,发送信息的过程。本程序得到的结果是 CAN BUS 不断向发送数据“11111111”出去,在发送过程中,同时注意CAN232MB 智能协议转换器的显示灯是不断闪亮的。CAN 是 Controller Area Network 的缩写(以下称为 CAN),是 ISO 国际标准化的串行通信协议。通信是通过以下 5 种类型的帧进行的:数据帧、遥控帧、错误帧、过载帧、帧间隔另外,数据帧和遥控帧有标准格式和扩展格式两种格式。标准格式有 11 个位的标识符(Identifier:以下称 ID),扩展格式有 29 个位的 ID。MCP2515 是一款独立 CAN 控制器,可简化需要与 CAN 总线连接的应用。CAN 模块的功能是处理所有 CAN 总线上的报文接收和发送。MCP2515 在 CAN 总线上的数据接收是通过两个接收缓冲器、两个接收屏蔽器、六个接收过滤器的组合来实现的。CAN 总

3

线上的帧只有同时满足至少任意一个接收屏蔽器和一个接收过滤器的条件才可以进入接收缓冲器。MCP2515 可与任何带有 SPI 接口的单片机直接相连,并且支持 SPI 1,1 和 0,0 模式。单片机通过 SPI 接口可以读取接收缓冲器数据。MCP2510 对 CAN 总线的数据发送则没有限制,只要用单片机通过 SPI 接口将待发送的数据写入MCP2515 的发送缓存器,然后再调用 RTS(发送请求)命令即可将数据发送到 CAN 总线上。

2014年2月24日

了解 RTC 应用及相关概念,实际控制使用 Real time clock(RTC),显示系统时间本次例子是一个使用 HZ 时钟来显示系统时间的程序,还利用实验六的串口传输实验的知识,通过串口打印系统的时间。首先设置超级终端的波特率为 38400,数据流控制设为无。打开超级终端,根据选择项进行操作,按 1 时,显示当前的系统时间。按 2 时,会对系统时间重设。Real-timer clock (RTC),RTC 是一个配置时钟的机制,通过从外部的晶振送入时钟信号到 MCPU,利用倍频或分频产生所需的时钟信号。可以通过配置RTC相关的寄存器,让 RTC 提供一个持续不断的频率,用来反映现实世界使用的时、分、秒时间。通常,RTC 还可以设计成产生一个 1HZ 输出(HZ时钟名称的由来)。它的闹钟功能体现在当 RTC 增量到预定时间后便产生中断或唤醒事件。为了能够产生系统时间,RTC 提供了一个 32 位的计数器 RTC Counter Register(RCNR),该计数器在系统复位后为 0,并在外部时钟源的信号上升沿到来时加 1,可在RDCR、RYCR 寄存器写入期望值,然后该计数器便开始递增。另外,通过在另一寄存器 RTC Alarm Register(RTAR)设置数值(也可以说是时间),当 RCNR 增加到 RTAR 时,便可产生中断。具体来说,当 RCNR 与 RTAR 匹配时,还需要以下条件满足时才能产生中断。首先在寄存器 RTC Status Register(RTSR)对中断的允许位必须设为1,RTC 提供了两种可以产生中断的事件:HZ 中断和 RTC Alarm 中断。当 HZ 时钟的上升沿被检测到或RCNR和RTAR 匹配相等时,RTSR 上相应的状态位就会标示 1,该位会被发送到中断控制器,在中断控制器的 Interrupt Controller。

4

2014年2月25日

今天进行了LCD控制器的实验。本次例子是一个使用 LCD 控制器的演示程序,结合了 LCD 控制器和 DMA 控制器的原理,能够将字符集里的字符显示在屏幕上。具体实验步骤如下:配置 GPIO 寄存器,将与 LCD 连接的引脚定义为所需的功能引脚。将帧描述符定义在 SDRAM 里,在 DMAC 被初始化后,供 DMAC 提取。配置 LCD 控制器的各寄存器。建立 LCD 屏幕上的每一象素与 FRAME BUFFER 对应位置的映射关系。将字符位图转换成字符矩阵数据并且写入到 FRAMEBUFFER 里。显示屏的整个显示区域,在系统内会有一段存储空间与之对应,通过改变该存储空间的内容,从而改变显示屏的内容,该存储空间被称为 Frame Buffer,或显存,显示屏上的每一点都必然与 Frame Buffer 里的某一位置对应,所以解决显示屏的显示问题,首先需要解决的是Frame Buffer 的大小以及屏上的每一象素与 Frame Buffer 的映射关系。按照显示屏的性能或显示模式区分,显示屏可以以单色或彩色显示,单色用 1 位来表示(单色并不等于黑与白两种颜色,而只是说只能以两种颜色来表示,通常取允许范围内颜色对比度最大的两种颜色),彩色又分为 2 位色(4 种颜色),4 位色(16 种颜色),8 位色(256 种颜色),16位色(65536 种颜色),24 为色(16777216 种颜色)这些色调代表整个屏幕所有象素的颜色取值范围,究竟应该采取什么显示模式,首先必须根据显示屏的性能,然后再由显示的需要来决定。这些因素会影响 Frame buffer 空间的大小,因为 Frame buffer 空间的计算大小是以屏幕的大小和显示模式来决定的,另外还有另一影响因素,就是显示屏的单/双屏幕模式。单屏幕模式代表屏幕的显示范围是整个屏幕,这种显示模式只需一个 Fame Buffer 来存储整个屏幕的显示内容,并且只需一个通道来将 Fame Buffer 内容传输到显示屏上(Frame Buffer 的内容可能需要被处理后再传输到显示屏)。双屏幕模式则将整个屏幕划分成两部分,上半部和下半部,它有别于将两个独立的显示屏组织成一个显示屏,单看上半部或下半部,它们的显示方式是与单屏幕的方式一致,并且上半部与下半部都是同时扫描,工作方式是独立的,同时这两部分都各自有 Frame Buffer,且他们的地址无需连续(这里指的是下半部的 Frame Buffer 的首地址无需紧跟在上半部 Frame Buffer 的地址末端),并且

5

同时具有独立的两个通道将 Frame Buffer 的数据传输到显示屏。

2014年2月26日

学习编写中断处理程序。本次例子主要使用按键实现外部中断,执行中断服务子程序。系统启动后,按 12345678任意键,相应的八段数码管就会点亮。当异常中断发生时,系统执行完当前指令后,将跳转到相应的异常中断处理程序处执行。处理器能够准确无误地响应中断,是因为 ARM 体系结构里有一个中断向量表,该中断向量表将系统能够响应的 7 种异常中断类型的“入口地址”登记在一块连续的字节空间内,每种异常中断的“入口地址”占据 4 个字节,这里“入口地址”实质是一些跳转指令或者是让 PC指针赋值的指令,通常使用 B 或 ldr 指令。简单地说,异常中断发生首先会跳转到中断向量表,此时跳转的位置会由系统根据中断类型来判断,由于中断向量表实质也是跳转指令所组成的指令序列,所以系统会再进行一次跳转,这次跳转便跳到中断处理程序(中断服务例程)的入口。系统复位后,IRQ 和 FIQ 中断都是被禁止的,所以即使建立了中断向量表,当有中断请求也是不会响应的,因此在系统复位后,必须通过程序控制来打开 IRQ 和 FIQ 中断。

2014年2月27日

本次例子是一个驱动触摸屏控制器芯片 UCB1400BE 的程序,将来自触摸屏输出端的电压值转换为数字量,并将点击的位置通过串口打印出来。触摸屏是一套透明的绝对定位系统,从技术原理来区别触摸屏,可分为四个基本种类:电阻技术触摸屏、电容技术触摸屏、红外线技术触摸屏、表面声波技术触摸屏。本实验使用的触摸屏属于电阻式触摸屏。电阻触摸屏的屏体部分由多层复合薄膜构成,按结构和实现原理来划分可以分为四线、五线、七线和八线式,由于本实验所使用的设备为四线电阻摸屏,故以下内容仅适合 4线电阻触摸屏。电阻触摸屏通常由五层薄膜叠合在一起,最外面两层分别为基层和塑料层,主要是为保护屏体而设计,触摸屏的工作主要是靠在中间两层互相绝缘的导电层来完成。基层是一层玻璃或有机玻璃,塑料层则是一层外表面硬化处理、光滑防刮的塑料,塑

6

料层必须具备一定的弹性,当受到外来挤压时可以出现一定程度的凹陷。而在基层的上面紧贴两层互相绝缘透明导电层(ITO,氧化铟),这两层导电层是通过中间的透明隔离点隔开。当外力施加在塑料层上时,会造成外表面的凹陷,导致两层导电层接触,当触摸屏控制器测得输入端(四线触摸屏的其中一条输出线)的有电压输入时,便知道触摸屏被点击。

2014年2月28日

本次例子是 PXA270 的串口传输程序,并以两种方式实现:程序查询状态寄存器和中断处理。本章例子根据 PXA270 开发板的串口硬件连接,不加入 Moden 传输协议,紧紧利用 UART引脚 TXD 和 RXD 进行数据接收和发送。实验目标是通过配置 FFUART(串口 1),将字符显示在 PC 机上超级终端上,并且将键盘输入内容回显在超级终端上。实现步骤:配置 GPIO 寄存器,实现 CPU 引脚 34,39 接收发送功能。配置寄存器 POWER Manager Sleep Status (PSSR)。配置全功能 UART 的寄存器。编写接收字符和输出字符函数。编写 FFUART 的中断服务例程。PXA270 处理器有四个 UART,分别是:全功能 UART(FFUART),蓝牙 UART(BTUART),标 准 UART ( STUART ) ,硬件 UART ( HWUART ) 。UART 即 universal asynchronous receiver/transmitter 的简写。每个 UART 能将从 RXD 端接收的串行数据转变为并行的数据,并且能够将来自处理器的并行数据转化串行数据,然后通过 TXD 端发送出去。根据UART 是否在 FIFO 模式下执行,发送和接收的数据会有选择的锁存在发送/接收 FIFO。

7

2014年3月1日

本实验重点讲述 ARM 的存储器管理单元 MMU 管理机制,运行该程序后会在串口上打印出“Run in virtual memory mode!”一行字符串,该试验代码启动了 MMU 后,在虚拟地址空间中完成了对串口的初始化,并且打印了以上字符串,串口波特率是 38400。在 ARM 系统中,存储器管理单元 MMU 主要完成以下工作:虚拟存储空间到物理存储空间的映射。在 ARM 中采用了页式虚拟存储管理。它把虚拟地址空间分成一个个固定大小的块,每一块称为一页,把物理内存的地址空间也分成同样大小的页。页的大小分为粗粒度和细粒度两种。MMU 就是从虚拟地址到物理地址的转换。存储器访问权限的控制。设置虚拟存储空间的缓冲的特性。在 ARM 存储系统中,使用 MMU 实现虚拟地址到实际物理地址的映射。页表(Translate Table)是实现上述这些功能的重要手段,它是一个位于内存中的表。表的每一行对应于虚拟存储空间的一个页,该行包含了该虚拟内存页(称为虚页)对应的物理内存页(称为实页)的地址、该页的方位权限和该页的缓冲特性等虚拟存储空间到物理存储空间的映射是以内存为单位进行的。即虚拟存储空间中一块连续的存储空间被映射成物理存储空间中同样大小的一块连续存储空间。在页表中(TLB 中也是一样的),每一个地址变换条目实际上记录了一个虚拟存储空间的存储块的基地址与物理存储空间相应的一个存储块的基地址的对应关系。根据存储块大小,可以有多种地址变换。

2014年3月2日

经过一周的ARM实验后,这周开始了Linux实验,今天开始做Linux常用工具的实验。

首先了解minicom的使用,掌握利用minicom进行传输文件方法,在Linux终端中敲入:“minicom -s”然后按回车键,按照实验指导书的要求规范进行配置。这些都做好之后,开始网络文件系统nfs的配置,网络文件系统nfs可以将PC机上的一部分文件系统作为目标机的资源,这样可以弥补目标机存储空间的

8

不足。在使用网络文件时,应对网络文件配置进行一定的设置。

通过本次的上机实践,对Linux常用工具有了初步了解,熟练掌握了minicom使用。

2014年3月3日

今天继续进行Linux实验,今天做的是Makefile实验,Makefile一般包括包含:显示规则,隐晦规则,变量定义,文件指示和注释等五个内容。

Makefile中定义的变量,与C/C++中的宏一样,代表一个文本字串,在Makefile被执行时候变量会自动地展开在所使用的地方,Makefile中的变量可以使用在“目标”,“依赖目标”,“命令”或Makefile的其他部分中。

一般来说,最简单的就是直接在命令行下输入make命令,GNUmake找寻默认的Makefile的规则是在当前目录下依次找三个文件——“GNUmakefile”,“makefile”和“Makefile”。其按顺序找这三个文件,一旦找到,就开始读取这个文件并执行,也可以给make命令指定一个特殊名字的Makefile。

2014年3月4日

今天做了BootLoader实验,PC机中的引导加载程序由BOIS和位于硬盘MBR中的BootLoader独到系统的RAM中,然后将控制权交给OSBootLoader。BootLoader的主要运行任务就是将内核映象从硬盘上独到RAM中,然后跳转到内核的入口点去运行,也即开始启动操作系统。

嵌入式系统中,通常并没有像BIOS那样的固件程序,隐藏整个系统的加载启动任务完全由BootLoader来完成,BootLoader的主要作用是初始化硬件设备,建立内存空间的映射图,完成内核的加载,为内核设置启动参数。

嵌入式系统中的bootloader的实现完全依赖于CPU的体系结构,因此大多数BootLoader都分为第一阶段和第二阶段两大部分,依赖于CPU体系结构的代码,比如设备初始化代码等,通常都放在阶段1中,而且通常都用汇编语言来实现,以打到短小而精悍的目的。

9

2014年3月5日

今天进行了Linux内核编译实验,一般主机平台的Linux(如红旗Linux)源代码在根目录下的/user/src/linux目录下,内核源代码的文件按树形结构进行组织的,在源代码树最上层的可以看到如下一些目录:arch,include,init,mm,Kernel等。

内核编译过程:1,make mrproper:删除所有以前在够核过程所产生的所有文件,2,make menuconfig:内核配置,3,make dep:寻找依存关系。4,make zlmage:产生压缩的核心映象文件,内核编译完毕之后,生成zimage内核映象文件保存在源代码的arch/arm/boot/目录下。

通过本次上机,让我对内核编译有了初步了解,内核是Linux的核心,是一个相当重要的知识,并不是通过几次上机能学会的,所以要经过不断探索学习才能有所进步。

2014年3月6日

今天上机进行了嵌入式文件系统的创建实验,本次实验主要是了解嵌入式操作系统中文件系统的类型和作用以及JFFS2文件系统的优点及其在嵌入式系统中的作用。

本次实验实验内容:1,根据系统提供的busybox源代码,编译busybox,写出具体编译过程。2,利用配置文件系统实例,配置一个适合开发板的文件系统,写出需要配置文件的功能。3,利用mkfs。Jffs制作文件系统映象,并将文件系统映象下载到开发板,写出系统启动后的结果。

通过本次上机实验,了解了嵌入式文件系统的构建,掌握了嵌入式Linux文件系统的挂在过程。从中学会了很多。

2014年3月7日

学习编写中断处理程序。本次例子主要使用按键实现外部中断,执行中断服

10

务子程序。系统启动后,按 12345678任意键,相应的八段数码管就会点亮。当异常中断发生时,系统执行完当前指令后,将跳转到相应的异常中断处理程序处执行。处理器能够准确无误地响应中断,是因为 ARM 体系结构里有一个中断向量表,该中断向量表将系统能够响应的 7 种异常中断类型的“入口地址”登记在一块连续的字节空间内,每种异常中断的“入口地址”占据 4 个字节,这里“入口地址”实质是一些跳转指令或者是让 PC指针赋值的指令,通常使用 B 或 ldr 指令。简单地说,异常中断发生首先会跳转到中断向量表,此时跳转的位置会由系统根据中断类型来判断,由于中断向量表实质也是跳转指令所组成的指令序列,所以系统会再进行一次跳转,这次跳转便跳到中断处理程序(中断服务例程)的入口。系统复位后,IRQ 和 FIQ 中断都是被禁止的,所以即使建立了中断向量表,当有中断请求也是不会响应的,因此在系统复位后,必须通过程序控制来打开 IRQ 和 FIQ 中断。

2014年3月8日

本次例子是 PXA270 的串口传输程序,并以两种方式实现:程序查询状态寄存器和中断处理。本章例子根据 PXA270 开发板的串口硬件连接,不加入 Moden 传输协议,紧紧利用 UART引脚 TXD 和 RXD 进行数据接收和发送。实验目标是通过配置 FFUART(串口 1),将字符显示在 PC 机上超级终端上,并且将键盘输入内容回显在超级终端上。实现步骤:配置 GPIO 寄存器,实现 CPU 引脚 34,39 接收发送功能。配置寄存器 POWER Manager Sleep Status (PSSR)。配置全功能 UART 的寄存器。编写接收字符和输出字符函数。编写 FFUART 的中断服务例程。PXA270 处理器有四个 UART,分别是:全功能 UART(FFUART),蓝牙 UART(BTUART),标 准 UART ( STUART ) ,硬件 UART ( HWUART ) 。UART 即 universal asynchronous receiver/transmitter 的简写。每个 UART 能将从 RXD 端接收的串行数据转变为并行的数据,并且能够将来自处理器的并行数据转化串行数据,然后通过 TXD 端发送出去。根据UART 是否在 FIFO 模式下执行,发送和接收的数据会有选择的锁存在发送/接收 FIFO。

11

2014年3月9日

本次实验主要使用 GPIO 口进行模拟脉冲信号,来驱动步进电机转动。当系统启动后就会正转起来,一直运行下去。步进电机是将电脉冲信号转变为角位移或线位移的开环控制元件。在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,即给电机加一个脉冲信号,电机则转过一个步距角。这一线性关系的存在,加上步进电机只有周期性的误差而无累积误差等特点。使得在速度、位置等控制领域用步进电机来控制变的非常的简单。虽然步进电机已被广泛地应用,但步进电机并不能像普通的直流电机,交流电机在常规下使用。它必须由双环形脉冲信号、功率驱动电路等组成控制系统方可使用。UCN4202A,它包含低功率 CMOS 逻辑控制部分和达林顿管输出驱动极,最大输出电流为 1.5A,使用单相或双相,半步激励方式,内设续流二极管和过热保护电路。UCN4202A 的控制功能包括 PWM 波输入,电机转动方向,输出使能和复位功能。OE 端使用 GPIO53 控制,为高时,电机没有输出;为低时 UCN4202A 开始工作。DIC 端为方向端,为低时为正向,为高时为反向。

2014年3月10日

本程序主要通过一个简短的 Boot 程序揭示如何编写开发板的启动程序,让我们能够清晰了解系统复位后从 0x0 开始引导,本引导程序驱动底板上的八盏 LED 就会向右点亮,不断循环下去。-ro-base 是用作设置 Region 的执行时位置,执行时位置是指映像执行时在存储空间的位置,因为具有可读写属性的 Area 在执行前会从 FLASH 存储空间拷贝到 RAM 存储。链接参数-rw-base 的使用,用来指定可读写Section 的执行时地址。因为可读写 Section 是由一个或多个可读写的 Area 所组成。-first object(area),可以通过产生一个映像的 Memory Map 文件来观察各 Area 的地址分配。初始化入口点定义了映像的第一条被执行的指令,在编译程序时可以添加参数-entry address(或-entry

12

offset+object(area) )来标示初始入口点,如果没有添加该参数,只要源程序中有唯一的伪操作 ENTRY,则程序就被默认成初始入口点。即当镜像被烧入 FLASH 后,以 ro_base 属性决定的映像位置的第一条指令就是被定义在 ENTRY 标示的段的第一条指令。

2014年3月11日

了解 RTC 应用及相关概念,实际控制使用 Real time clock(RTC),显示系统时间本次例子是一个使用 HZ 时钟来显示系统时间的程序,还利用实验六的串口传输实验的知识,通过串口打印系统的时间。首先设置超级终端的波特率为 38400,数据流控制设为无。打开超级终端,根据选择项进行操作,按 1 时,显示当前的系统时间。按 2 时,会对系统时间重设。Real-timer clock (RTC),RTC 是一个配置时钟的机制,通过从外部的晶振送入时钟信号到 MCPU,利用倍频或分频产生所需的时钟信号。可以通过配置RTC相关的寄存器,让 RTC 提供一个持续不断的频率,用来反映现实世界使用的时、分、秒时间。通常,RTC 还可以设计成产生一个 1HZ 输出(HZ时钟名称的由来)。它的闹钟功能体现在当 RTC 增量到预定时间后便产生中断或唤醒事件。为了能够产生系统时间,RTC 提供了一个 32 位的计数器 RTC Counter Register(RCNR),该计数器在系统复位后为 0,并在外部时钟源的信号上升沿到来时加 1,可在RDCR、RYCR 寄存器写入期望值,然后该计数器便开始递增。另外,通过在另一寄存器 RTC Alarm Register(RTAR)设置数值(也可以说是时间),当 RCNR 增加到 RTAR 时,便可产生中断。具体来说,当 RCNR 与 RTAR 匹配时,还需要以下条件满足时才能产生中断。首先在寄存器 RTC Status Register(RTSR)对中断的允许位必须设为1,RTC 提供了两种可以产生中断的事件:HZ 中断和 RTC Alarm 中断。当 HZ 时钟的上升沿被检测到或RCNR和RTAR 匹配相等时,RTSR 上相应的状态位就会标示 1,该位会被发送到中断控制器,在中断控制器的 Interrupt Controller

13

2014年3月12日

今天老师将我们所有人分了5个小组,并给我们每个小组分配了不同的项目。我们的项目是“诊所管理系统”,因为这个项目其中包含了一些我们不知道的专业医学知识和实际流程等,所以我们必须去诊所进行实地调查,以此来保证我们最终的作品会满足诊所的管理需求。这里也说明了软件需求分析的重要性,这一环节,可以说是整个软件生成的最为重要和关键的环节。如果我们仅仅根据自己的了解就将项目进行下去,开发出的软件却满足不了客户的要求,也就是说这个软件的作用几乎是0,而我们所有的投入最终都是徒劳的。我想,这是所有人都不愿意看到的结果。

这一周,我们上课的时间进行软件需求分析的知识讲解和软件需求分析的文档制作,而课下我们就利用课余时间进行诊所的实地调查。为了节约时间,我们小组每个人各负责一个学校周围的诊所,对其诊所内的医务人员进行询问,并承诺将最后的成品软件免费提供于其诊所的使用,这样大大的提高了医务人员的热情,并最终获得了我们想要的结果。

2014年3月13日

上一周我们做好了项目的需求分析,这一周,我们就可以根据做好的

需求分析文档来制作该项目的概要设计了,本来计划是用一周的时间来完成该软件的概要设计,但由于软件比较小,并且需要的数据并不是很多,所以老师临时决定,这一周,我们将进行软件的概要设计和详细设计两个部分的文档制作。而下一周的项目详细设计,将改为软件的编码制作,将原来一周的项目编码改为两周。这样一来,我们原本稍微宽裕的时间又变得紧缩起来,而为了能更好的完成概要设计文档和详细设计文档的制作,我们下课后更是一起在教室里加班赶工,还好,经过大家的努力,周五上课的时候,我们小组的两份文档,经过老师的检验,全部通过。

概要设计的基本任务包括制度规范主要就是:将系统划分模块,决定而系统的模块划分,在上一周的需求分析力,我们就已经做出了总结,每个模块的功能,调用关系及界面,即模块姐传递的数据。

需要将诊所划为四个模块:医务人员管理模块、药品信息管理模块、病患管理模块、诊疗记录模块。而这四个模块的具体功能,在经过小组成员的共同讨论后,将其模块的功能罗列如下:

14

一、医务人员管理模块 1、 医务人员入职。 2、 医务人员离职。 3、 医务人员的职务变动。 4、 医务人员的查询。

二、药品信息管理模块 1、 药品信息的入库。 2、 药品信息的删除。 3、 药品信息的改动。 4、 药品信息的查询。

三、病患管理模块 1、患者信息添加。 2、患者信息删除。 3、患者信息修改。 4、患者信息查询。 四、诊疗记录模块 1、诊疗记录的增加。 2、诊疗记录的删除。 3、诊疗记录的修改。 4、诊疗记录的查询。

综上所述,可以发现也就是其模块的增删改查,在细化了各个模块的功能后,我们对应的制作了诊所管理系统的数据库,对其模块划分,也定义了四个表的名称及其属性。

表清单:

医务人员表:TB_DOCTOR 药品信息表:TB_MEDICATION 病患人员表:TB_SUFFERER 诊疗记录表:TB_RECORD

概要文档的制作完成,也意味着我们可以进行下一个步骤了:项目的详细

设计。因为其四个模块所要实施的功能大体相似,所以我们决定只制作出其中一个模块的详细设计,其他模块则参考制作完成的模块。在这里,我们采用医务人员管理模块为例,将对其进行详细的分析,为了清晰明确的看出其数据的走向以及逻辑判断,我们采用程序流程图对该模块的数据流程进行描述。而为了使该项目的详细设计可读性好,我们将该模块中涉及的一些复杂的算法用伪代码来进行

15

表示,这样会是我们在变成的时候,将其更容易的转换成实际的程序。

准备工作总算是做完了,几乎花费了我们实习的一半时间。这一周的时间,我们在忙碌中不知不觉的度过了!下一周就会进入到该项目的实际编码当中,这也是我们大家最熟悉的地方了,感觉总算有地方出力了,期待着下一周的到来。

2014年3月14日

终于到了我一直期待着的编码阶段了,从一开始就等着编码,这个期

待的时间有点长,不过还好,总算是到来了。但现在还不能直接去编码,在这之前,我们需要配置我们的编码环境,大家需要拥有一样的环境,这样才能使小组成员之间的文件相互使用。不过这点就不用我们操心了,大公司就是好,把环境变量的配置过程给我们做成了文档,供我们使用,这样,我们大家使用的环境就都一样了。有了这个文档,大家的编码环境很快就搭配起来了,丝毫不费力气。这里提一句,以前也没注意这个问题,如果是团队开发,一样的编码环境是很重要的,也是一个团队所必须的。

软件环境的搭配完成,意味着我们可以进行正式的编码了。这一次的编码和以前相比有些不一样,以前是想到哪编到哪,这次不能再这么蛮干了,这次的编码需要照着文档进行,也就是照着诊所管理系统的详细设计进行编码。

因为该项目有数据库的操作,所以在编码之前,大家将该项目的数据库以及其中的四个表建立了起来,并在每个表内添加了两条简单数据,用于在软件编码测试时使用。

这周我们使用了两天的时间来消化项目的详细设计文档,把老师上课讲的

那些知识点尽量的用到理解文档当中。看完了文档,再让我来编码,突然有种行云流水的感觉,不会有以前那种写到一半不知道该怎么写的感觉。看来这之前的工作一点也没白做啊,算是物有所值啦。

2014年3月15日

由于之前做完了项目的详细设计,所以整个项目的流程很清晰,直接按着

文档的步骤一步一步的进行就可以了。有了项目的详细设计,编码真的很顺手,但并不是就没有问题了。我们还要把他的程序流程图及伪代码等地方转换成真正的代码。程序流程图也有很多地方需要考虑你所需要用到的结果。有的地方仅仅

16

是两个逻辑判断,这就很自然的运用if、else语句来进行转换;有的地方时多个选择的时候,你就要考虑是用if、elseif、else语句来转换还是用swtich、case语句来转换;还有的地方时循环的结构,你就要考虑是for循环还是while语句记忆do while语句,因为有的地方需要先执行一遍再进行判断,那么你要是用了while语句或者for语句,你就惨了,所有要仔细考虑你所要编写的代码。

虽说我们学了很久的编程,但是实际项目中还是有很多很多的问题。当出现问题时,我们首先进行组内消化,如果组内有人能解决就最好了。如果组内解决不了,我们就进行网上搜索,很多问题在csdn论坛上都能得以解决。如果连网上都查不到,我们就只好去请教我们的企业外派老师了。嗯,几乎所有的问题都在这几个步骤中得以解决。而感觉编码方面最大的收获就是编码出错的地方,解决后,我们下次在同样的地方就很少再犯了,并且遇到同样的问题时,也能将其解决,可以说,这就是我们的经验,感觉很宝贵。

2014年3月16日

程序编码的完成,意味着我们要进行下一个步骤:测试。其实,我感

觉整个软件的生命周期无时无刻不在进行测试,从可行性分析、需求分析、概要设计、详细设计、编码、测试、到软件的维护,一直都在进行着测试。

老师在课上给我们的讲解,又一次让我耳目一新。是因为,在软件测试之前,你要制作测试文檔,要进行详细的设计,考虑到各个可能出现的情况,要运用好几种测试方法。本周进行的是白盒测试,测试该项目的内部逻辑结构以及基础的测试,主要考虑如何覆盖程序的内部路径。

这下可苦了我们,之前由于老师怕对我们说的太多,我们会接收不了,并没有说明每周进行的细节,只告诉了我们进行的内容。而当老师告诉我们要进行测试文檔的制作时,课堂一篇“啊”声,看来不只是我自己一个人对此感到有些纳闷。以前测试就是直接进行测试就行了,运行的时候,发现错误再改,哪整过测试文檔啊。

由于大家都不会,所以老师不得不给我们细细的进行讲解,并拿出一份企业用的测试文檔为例,给我们用实际例子来讲解,这样大家都理解的快多了,很快就明白了个大概。就是把所以情况都罗列出来,然后测试的时候,你就照着文檔进行一条条的测试就行了,没有错的话就通过,有错的话你就做个错误的几号就OK。想想也是,这样先把各个情况都罗列出来,并设计出测试用例,会是项目测试进行的比较顺利,测试的时候你就直接照着文檔区测试就可以了,也不用现想测试路径以及测试用例,不仅仅是

17

测试效率的提高,更会使你的测试覆盖比较全面。

2014年3月17日

这是项目操作的最后一周,所以我们需要按测试文档将代码校验完成,还

要对该项目进行整体测试,以确保他的可用性以及可靠性。时间又一次的变得紧密起来,我们必须确保程序内部的正确性,这样才能对其整体测试。因为项目相对而言比较小,所以我们的测试文档还是可以满足我们的测试要求,将几个出错的地方修改后,我们的项目内部测试顺利完工。

测试的顺便让我又一次有了爽快的感觉,拿着测试文档,直接去校验代码就可以了。几乎不用想程序内部的测试流程,因为文档上已经给你写的明明白白了。到这里,我有一种感觉,这埃森哲这种大公司内,文档的重要性比编码本身更为重要。我想,这就是企业派来的老师没有直接给我们进行技术培训,而是让我们来了解软件工程的流程的原因。当然,根据企业的文化不同,对软件工程的生命周期也会有细微的差别, 他们会选择最适合自己公司的方法来进行整个软件的生命周期,并不是一成不变的。

接下来,我们将进行我们最后一项任务了,软件的综合测试。如果综合测又一次干劲十足,大家都想快些完成这个“折磨”了我们六个星期的项目试也能顺利的测试通过,那么就意味着我们制作了快两个月的项目可以完工了。 啦。大家认真的进行着自己的任务,一个半月的团队合作,让我们有了种团队的感觉,配合起来也比当初顺手很多。大家各司其职,周四的上午进行完最后的测试。当企业老师宣布我们通过的时候,小组成员都欢腾的呼唤起来,忙碌了6个星期,从没这么长时间做一个项目,更没有像这次这样,大家为了同一个目标,都积极的付出着自己的努力。当听到老师说通过时,心中除了高兴还有另一样东西,就是欣慰 ,为大家的努力而欣慰。

在中午放学之前,所有小组都通过了各自的项目。所以成员,都在脸上流剩下的一天半,企业老师将我们的这些天遇到的问题给我们一一的点了出到这里,我们的项目真的即将结束了。老师说大家回去后沉淀一下这些日露着高兴的气息,还包含着一种,努力过后可以稍微放松的心态。

来,将整个流程给我们大家又温习了一遍,最后对大家的努力予以了肯定。 子的收获,将在下周进行项目总结,总结将用个人展示的形式展示出来,希望大家好好准备,伴随着老师的讲话结束,我们这一周的实习也结束了。

18

本文来源:https://www.bwwdw.com/article/hnh6.html

Top