课程设计论文基于实时操作系统的单片机多任务应用程序设计

上传人:仙*** 文档编号:45643414 上传时间:2021-12-08 格式:DOC 页数:28 大小:122KB
返回 下载 相关 举报
课程设计论文基于实时操作系统的单片机多任务应用程序设计_第1页
第1页 / 共28页
课程设计论文基于实时操作系统的单片机多任务应用程序设计_第2页
第2页 / 共28页
课程设计论文基于实时操作系统的单片机多任务应用程序设计_第3页
第3页 / 共28页
点击查看更多>>
资源描述
重庆科技学院重庆科技学院课程设计报告课程设计报告 院(系):_电气与信息工程学院_ 专业班级: 计科普 2008-02学生姓名: 学 号: 设计地点(单位)_ _ I515_ _ _ 设计题目:_ 基于实时操作系统的单片机多任务应用程序设计_ 完成日期: 2011 年 7 月 4 日 指导教师评语: _ _ _ _ _ 成绩(五级记分制):_ _ _ 指导教师(签字):_ _ _ 重庆科技学院重庆科技学院课程设计任务书课程设计任务书设计题目:基于实时操作系统的单片机多任务应用程序设计学生姓名课程名称实时操作系统(ucos-II)专业班级计科普 2008地 点I313起止时间2011 年 6 月 27 日-2011 年 7 月 8 日设计内容及要求1、 充分消化 ucos-II 内核,理解其内核架构。体会相关数据结构的设计。2、 在第 1 步的基础上,消化 Small RTOS51 内核。弄清其为了实现在 128 个字节的单片机环境下在内核的数据结构做了如何优化设计。3、 将 Small RTOS51 移植到 MCS-51 单片机的最小系统板上,使在上面进行正常运行。4、 基于 Small RTOS51 平台的 MCS-51 单片机上,编写:(1)LED 显示驱动程序。(2)键盘扫描驱动程序。(3)串口通信接收和发送驱动程序5、 在前面的基础上完成一个基于 Small RTOS51 的多任务应用程序,并在 MCS-51最小系统板上调试通过。设计参数1、 写出 ucos-II 内核的架构2、 比较 Small RTOS 与 ucos-II 实时操作系统的异同,及各自优缺点。3、 实现 Small RTOS 在 MCS-51 最小系统板上的移植,写清移植原理和步骤。4、 至少实现设计要求中的三个驱动程序中的二个及以上。5、 结合自已在课程中、平时或竞赛中涉及的题目,改用基于 small RTOS 进行实现(系统必须实现的多任务应用程序在 MCS-51 上应能稳定的运行) 。进度要求6 月 27 完成 ucos-II 内核架构剖析,6 月 27 日-29 日完成 Small RTOS51 内核的分析。6 月 30 日完成 Small RTOS51 向 MCS-51 单片机最小系统板的移植。7 月 1 日-7月 2 日完成相关驱动程序的编写和调试。7 月 3 日-7 月 6 日完成相应在多任务应用程序的编写,并集成到 MCS-51 最小系统板上,使其稳定运行。7 月 7 日设计志成果汇报和答辩。7 月 8 日完成设计报告。参考资料其它说明.本表应在每次实施前一周由负责教师填写二份,院系审批后交院系办备案,一份由负责教师留用。.若填写内容较多可另纸附后。3.一题多名学生共用的,在设计内容、参数、要求等方面应有所区别。教研室主任: 指导教师: 年 月 日摘要嵌入式系统是软件和硬件的综合体,嵌入式系统是与应用紧密结合的,具有很强专用性,必须结合实际系统需求进行合理的裁减利用。 本设计任务是基于实时操作系统的单片机多任务应用程序设计。通过深入剖析 C/OS-内核架构,之后理解和读懂 small RTOS 微型嵌入式操作系统的内核。实现多任务的驱动程序,实现 LED 驱动、串口驱动和键盘驱动。关键词:嵌入式系统 实时 多任务 驱动目目 录录1 系统需求分析.11.1 设计内容与目的 .11.2 设计的实现方案.12.总体设计.22.1 设计模块图.22.2 UCOS-II 内核架构 .22.3 SMALL RTOS 与UC/OS-II 的异同.52.4 SMALL RTOS 移植到单片机.52.4 SMALL RTOS 驱动程序.93 详细设计.103.1LED 驱动程序 .103.2 键盘驱动程序 .143.3 串口收发驱动程序 .173.4 功能实现 .204. 设计总结.215 致谢.226 参考文献.231 1 系统需求分析系统需求分析1.1 设计内容与目的本课程完成的主要内容有:本课程完成的主要内容有:(1)写出 C/OS-内核的架构。(2)比较 Small RTOS 与 C/OS-实时操作系统的异同,及各自优缺点。(3)实现 Small RTOS 在 MCS-51 最小系统板上的移植,写清移植原理和步骤。(4)至少实现设计要求中的三个驱动程序中的二个及以上。本课程设计的目的是:本课程设计的目的是:通过该课程设计学习,深入理解嵌入式操作系统的作用,C/OS-内核的架构。深入理解 small RTOS 内核架构,学会移植 small RTOS 到单片机上,并在单片机上运行应用程序。1.2 设计的实现方案 本设计在 51 单片机上移植小系统,并且在小系统上编写多任务驱动程序。驱动程序包括:LED 驱动、串口驱动和键盘驱动。 驱动的设计可以用多任务实现,这样可以让系统更加稳定,减少开发时间。2.2.总体设计总体设计 2.1 设计模块图该设计的功能模块如下图所示: 微型操作系统 small RTOS移植 small RTOS 到 51 单片机上编写LED驱动程序编写键盘驱动程序编写串口收发程序图 2.1 功能模块图2.2 ucos-II 内核架构作为一个轻量级的操作系统,C/OS-提供的功能包括:任务管理、中断管理、时间管理、信号量、邮箱、消息队列、互斥信号量等,可基本满足较小系统的需要。C/OS-内核支持优先级调度算法,每个任务可根据重要程度的不同被赋予一定的优先级,CPU 总是让处于就绪态的、优先级最高的任务先运行。C/OS-的实时内核都是可剥夺型内核。最高优先级的任务一旦就绪,总能得到 CPU 的控制权。当一个运行着的任务使一个比它优先级高的任务进入了就绪态,当前任务的 CPU 使用权就被剥夺了,或者说被挂起了,那个高优先级的任务立刻得到了 CPU 的控制权。如果是中断服务子程序使一个高优先级的任务进入就绪态,中断完成时,中断了的任务被挂起,优先级高的那个任务开始运行。1.C/OS-1.C/OS-的特点的特点可移植性可移植性C/OS-绝大部分的源码是用移植性很强的 ANSI C 写的。和微处理器硬件相关的那部分是用汇编语言写的。汇编语言写的部分已经压到最低限度,使得C/OS-便于移植到其他微处理器上。可裁剪可裁剪可以只使用 C/OS-中应用程序需要的那些系统服务。这样可以减少产品中的 C/OS-所需的存储空间(RAM 和 ROM),这种可裁剪性是靠条件编译实现的。占先式占先式C/OS-完全是占先式的实时内核。这意味着 C/OS-总是运行就绪条件下任务级最高的任务。多任务多任务C/OS-最多只能管理 64 个任务,包括空闲任务和统计任务。同时赋予每个任务的优先级必须是不同的,C/OS-不支持时间片轮转法。任务栈任务栈每个任务有自己单独的栈,C/OS-允许每个任务有不同的栈空间。以便压低应用程序对 RAM 的需求。系统服务系统服务C/OS-提供一些系统服务,例如消息队列、信号量、互斥信号量、时间相关函数等。中断管理中断管理中断可以使正在执行的任务暂时挂起。如果优先级更高的任务被该中断唤醒,则高优先级的任务在中断嵌套全部退出后立即执行,中断嵌套层数可达255 层。实时性实时性C/OS-对实时任务有很强的支持能力,能完成多任务并且有较短的中断响应时间,从而使内部的代码和实时内核心的执行时间减少到最低限度。2.uC/OS-II2.uC/OS-II 组成部分组成部分uC/OS-II 大致可以分成系统核心(包含任务调度)、任务管理、时间管理、多任务同步与通信、内存管理、CPU 移植等部分。(1) 核心部分(OSCore.c) :uC/OS-II 处理核心,包括初始化、启动、中断管理、时钟中断、任务调度及事件处理等用于系统基本维持的函数。(2) 任务管理(OSTask.c) :包含与任务操作密切相关的函数,包括任务建立、删除、挂起及恢复等,uC/OS II 以任务为基本单位进行调度。(3) 时钟部分(OSTime.c) :uC/OS-II 中最小时钟单位是 timetick(时钟节拍),其中包含时间延迟、时钟设置及时钟恢复等与时钟相关的函数。(4) 多任务同步与通信(OSMbox.c, OSQ.c, OSSem.c, OSMutex.c, OSFlag.c):包含事件管理函数,涉及 Mbox、msgQ、Sem、Mutex、Flag 等。(5) 内存管理部分(OSMem.c):主要用于构建私有的内存分区管理机制,其中包含创建 memPart、申请/释放 memPart、获取分区信息等函数。(6) CPU 接口部分:uC/OS-II 针对特定 CPU 的移植部分,由于牵涉到 SP等系统指针,通常用汇编语言编写,包括任务切换、中断处理等内容。3.uC/OS-II 任务调度任务调度uC/OS-II 采用基于优先级的调度算法,总是选择当前处于就绪状态的优先级最高的任务进行调度。uC/OS-II 是可抢占性的强实时性 OS,在完成中断后允许进行新的任务调度。uC/OS-II 有两种调度方式:任务级任务调度、中断级任务调度。有两种调度方式:任务级任务调度、中断级任务调度。(1)任务级任务调度指在非中断返回时进行任务调度,一般发生在当前任务因时间延迟或等待某事件而阻塞或被挂起,或有更高优先级的任务处于就绪状态。任务的基本信息: CPU 的 PC 寄存器:任务当前执行的位置; CPU 的通用寄存器:任务当前执行涉及的临时数据; CPU 的状态寄存器:存储当前 CPU 的状态。任务级任务切换:从一个任务直接切换至另一个任务,不涉及 CPU 状态的切换,OS_TASK_SW()既保存当前任务上下文,又恢复新任务上下文。过程:OS_Sched()- OS_TASK_SW()(2)中断级任务调度在中断处理完成后,通过 OSIntExit()判断是否有更高优先级就绪任务。如果有,调用 OSIntCtxSW()恢复新任务上下文。在中断处理中,已经保存了被中断任务的上下文,所以这里仅仅恢复。过程:OSIntExt() OSIntEnter() - ISR OSIntExit() - OSIntCtxSW()2.3 Small RTOS 与uC/OS-II的异同1.Small RTOS 和 uC/OS-II 的相同点有:(1)都是抢占式微型操作系统。(2)调度算法都是基于优先级的调度算法。(3)两种调度方式:任务级别任务调度和中断级别任务调度。(4)任务间可以进行消息通信。(5)可以实现调度器上锁和解锁。(6)具有空闲任务,并且空闲任务优先级最低。2. Small RTOS 和 uC/OS-II 的不同点有:(1) uC/OS-II 最多可以管理 64 个任务,而 small RTOS 最多只能管理 16 个任务。(2) uC/OS-II 可以删除任务,而 small RTOS 不能删除任务。(3) uC/OS-II 每个任务拥有独立的堆栈,而 small RTOS 共享堆栈。(4) uC/OS-II 有邮箱通信方式,而 small RTOS 没有。2.4 Small RTOS 移植到单片机Small RTOS的移植步骤和方法如下:(1) 在os_cpu.h中定义几个宏(以keil c51为例):#define OS_INT_ENTER() OSIntNesting+ /* 中断嵌套管理 */#define OS_ENTER_CRITICAL() EA = 0,Os_Enter_Sum+ /* 关中断*/#define OS_EXIT_CRITICAL() if (-Os_Enter_Sum=0) EA = 1 #define HIGH_BYTE 0 /* uint16的高位字节 */#define LOW_BYTE 1 /* uint16的低位字节 */ #define OS_TASK_SW() OSCtxSw() /* 任务切换函数 */ OS_ENTER_CRITICAL()、OS_EXIT_CRITICAL()分别定义为关中断和开 中断在特定的c编译器的表示方法。 HIGH_BYTE、LOW_BYTE定义uint16型变量在特定的c编译器的存储方法, 如果高位字节的地址小于低位字节的地址(如keil c51) ,则 HIGH_BYTE为0,LOW_BYTE为1。否则(如8086系列) ,HIGH_BYTE为1, LOW_BYTE为0。 OS_INT_ENTER则将变量OSIntNesting加1。它仅在中断服务程序中使用。 注意:如果中断嵌套层数可能超过255,OS_INT_ENTER要防止 OSIntNesting溢出。 OS_TASK_SW()定义非中断中任务切换时执行的指令,可以是一条软中断指 令(例如在8086系列CPU上) ,或仅仅是函数调用(如keil c51) 。(2)定义与编译器无关的变量类型(以keil c51为例):typedef unsigned char uint8; /* 定义可移植的无符号8位整数关键字 */typedef signed char int8; /* 定义可移植的有符号8位整数关键字 */typedef unsigned int uint16; /* 定义可移植的无符号16位整数关键字 */typedef signed int int16; /* 定义可移植的有符号16位整数关键字 */typedef unsigned long uint32; /* 定义可移植的无符号32位整数关键字 */typedef signed long int32; /* 定义可移植的有符号32位整数关键字 */(3)在os_cpu_c.c和os_cpu_a.asm中定义几个函数: OSStart、OSIntCtxSw、OSTickISR、OSIdle和OS_TASK_SW()最终调用的 函数或中断。 OSStart:初始化任务并让ID为0的任务执行。同时允许中断。 定义如下: void OSStart(void) 初始化除ID为0以外所有任务堆栈; OSTaskID = 0; 使堆栈指针指向ID为0的任务堆栈空间; OS_EXIT_CRITICAL(); 使程序指针指向ID为0的任务的程序首地址; OSIntCtxSw:中断中任务切换函数 定义如下: void OSIntCtxSw(void) 堆栈指针调整为中断程序调用OSIntExit前的状态; 堆栈空间变换; 堆栈指针指向新的堆栈; OSTaskID = OSNextTaskID; 恢复任务环境; 中断返回指令; OSIntCtxSw由OSIntExit直接调用,堆栈指针调整为中断程序调用 OSIntExit前的状态即为执行若干出栈指令。 堆栈空间变换可以参照keilc51目录下Os_cpu_c.c文件中被注释的 C_OSCtxSw函数,C_OSCtxSw还包括 堆栈指针指向新的堆栈. OSTickISR为系统节拍中断服务程序 定义如下: void OSTickISR(void) #if TICK_TIMER_SHARING 1 static unsigned char TickSum=0; #endif 禁止中断; 保存任务环境; #if TICK_TIMER_SHARING 1 TickSum = (TickSum + 1) % TICK_TIMER_SHARING; if (TickSum != 0) 允许中断; 恢复任务环境; return; #endif #if EN_OS_INT_ENTER 0 OS_INT_ENTER(); /* 中断开始处理 #endif 允许中断; #if USER_TICK_TIMER_EN = 1 UserTickTimer(); /* 用户函数 #endif #if EN_TIMER_SHARING 0 OSTimeTick(); /* 调用系统时钟处理函数 #else OSIntSendSignal(TIME_ISR_TASK_ID); #endif OSIntExit(); /* 中断结束处理 其中有一些CPU的禁止中断和保存任务环境由CPU自动处理或是自动处 理一部分。 OSIdle()优先级最低的任务 定义如下: void OSIdle(void) while(1) /* 使CPU处于省电状态 */ OS_TASK_SW()最终调用的函数或中断:非中断中任务切换函数 定义如下: void OS_TASK_SW(void) 保存任务环境; 堆栈空间变换; 堆栈指针指向新的堆栈; OSTaskID = OSNextTaskID; 恢复任务环境; 恢复程序指针; 2.5 Small RTOS 驱动程序Small RTOS 的驱动包括:LED 驱动、键盘驱动、串口收发驱动。用系统的多任务实现。3 3 详细设计详细设计3.1LED 驱动程序程序具有两个用户任务:一个显示任务(Show) ;另一个是计时任务(TimeSum) 。由于显示器需要 CPU 周期为其服务,所以必须使用任务来编写程序。void Show(void) uint8 i,KeyTemp;/* 初始化显示缓冲区 */ ShowCase0 = ShowTable10; ShowCase1 = ShowTable10; ShowCase2 = ShowTable10; ShowCase3 = ShowTable10; while (1) for (i = 0; i 4; i+) KdTxdByte(ShowCasei); P1 = EbitDatai; /* 显示第 i 位 */ OSWait(K_SIG,0); /* 等待 1/600 秒(由定时器中断决定) */ P1 = 0 xff; /* 关闭显示第 i 位 */ /* 读取当前闭合的键 */ KeyTemp = 0; KdTxdByte(0 xff); for (i = 0; i 8; i+) if (KdKey = 0) KeyTemp = KeyTemp | OSMapTbli; if(KdKey1 = 0) KeyTemp = KeyTemp | OSMapTbli; KeyTemp = KeyTemp & (OSMapTbl0);if(KdKey2 = 0)KeyTemp = KeyTemp | OSMapTbli;KeyTemp = KeyTemp & (OSMapTbl0)&(OSMapTbl1); KeyBordData = KeyTemp; OSWait(K_SIG,0); /* 等待 1/600 秒(由定时器中断决定) */ OSTimeTick(); /* 调用系统节拍处理程序 */ 因为显示任务所需要的 CPU 周期比较短(本例为 600HZ) ,所以 Small RTOS51 的时钟节拍服务函数 OSTimeTick()由显示任务调用。定时器硬件中断服务程序会使显示任务进入就绪状态,在定时器硬件中断退出后,显示任务立即执行。程序使用了连个数据表 ShowTable和 EditData。其中,ShowTable定义 0-9 和全灭的字形与段码对应表,EditData是显示的位码表。Uint8 const ShowTable=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f,0 x00;/ 0 1 2 3 4 5 6 7 8 9 uint8 const EbitData4= 0 x01,0 x02,0 x04,0 x08;任务将显示缓冲区的内容在 LED 数码显示器和发光二极管上显示出来。显示缓冲区依次存储 LED1-LED4 的段码和发光二极管点亮位图。开始初始化显示缓冲区i= 0关闭显示发送第 i 个显示器的数据到并口显示第 i 个显示器等待时钟中断+i= 10) TimeAdd3 = 0; TimeAdd2+; if (TimeAdd2 = 6) TimeAdd2 = 0; TimeAdd1+; if (TimeAdd1 = 10) TimeAdd1 = 0; TimeAdd0+; if(TimeAdd0 = 10) TimeAdd0 = 0; ShowCase0 = ShowTableTimeAdd0; ShowCase1 = ShowTableTimeAdd1; ShowCase2 = ShowTableTimeAdd2; ShowCase3 = ShowTableTimeAdd3; 计时寄存器 TimeAdd0为分的十位,范围为 0-9;计时寄存器 TimeAdd1为分的个数,范围为 0-9;计时寄存器 TimeAdd2为秒得十位,范围为 0-5;计时寄存器 TimeAdd3为秒的个数,范围为 0-9。开始点亮两个发光二极管延时 0.5 秒熄灭所有发光二极管延时 0.5 秒计时寄存器加一显示当前计时值 图 3.1.2:计时任务流程图3.2 键盘驱动程序void KeyInput(void) uint8 i; uint8 temp; OSQCreate(CommandData,16); /* 创建主任务使用的消息队列 while (1) OSWait(K_TMO,(OS_TICKS_PER_SEC / 50) + 1); /* 延时 20ms */ temp = KeyScan(); /* 获取闭合按键位图 */ if (temp = NO_KEY) continue; OSWait(K_TMO,OS_TICKS_PER_SEC / 50); /* 去抖(延时 20ms)*/ if (temp != KeyScan() continue; Key(temp,KEY_DOWN); /* 处理按键闭合事件 */ /* 第一次连击延时 */ i = KEY_START / (OS_TICKS_PER_SEC / 50); do OSWait(K_TMO,OS_TICKS_PER_SEC / 50); if (temp != KeyScan() goto KeyEnd; /* 按键松开 */ while (-i != 0); * 后续连击延时 */ while (1) Key(temp,KEY_ALWAYS); :/* 处理按键连击事件 */ i = KEY_DELAY / (OS_TICKS_PER_SEC / 50); do OSWait(K_TMO,OS_TICKS_PER_SEC / 50); if (temp != KeyScan() goto KeyEnd; /* 按键松开 */ while (-i != 0); KeyEnd: Key(temp,KEY_UP); /* 处理按键松开事件 */ 开始初始化键盘消息的消息队列延时 20ms有键按下延时 20ms与上次按键相同发送 KEY_DOWN 消息等待 KEY_START 个时钟节拍与上次按键相同发送 KEY_UP 消息等待 KEY_DELAY 个时钟节拍发送 KEY_UP 消息YNNYYN图 3.2.1 键盘任务程序流程图uint8 KeyScan(void) return KeyBordData;KeyScan()只需返回键盘瞬间状态,只要按照硬件的要求扫描键盘,把信息存入返回值即可。消息处理任务:消息处理任务:void command(void) uint8 data temp; while (1) OSQPend(&temp, CommandData, 0); /* 等待键盘的消息 */ /* 显示得到的消息 */ ShowCase0 = ShowTable10; ShowCase1 = ShowTable10; ShowCase2 = ShowTable10; ShowCase3 = ShowTabletemp % 10; if (temp = 10) ShowCase2 = ShowTable(temp / 10) % 10; if (temp = 100) ShowCase1 = ShowTabletemp / 100; 程序分析如下:任务挂起等待按键消息的到来,如果有按键消息到了,该任务运行,并且将键值显示在 LED 上。 3.3 串口收发驱动程序 1.串口发送部分:(1)发送一个字节:PutCharvoid PutChar(uint8 Data) OS_ENTER_CRITICAL(); if (SerialCanSend = 1) SerialCanSend = 0; SBUF = Data; else OSQIntPost(SerialOutData,Data); OS_EXIT_CRITICAL(); 程序分析:函数中使用一个全局变量 SerialCanSend,用来指示当前串口的发送部分是否空闲。如果串口的发送部分不空闲,就直接将数据加入消息队列。用OSQIntPos()发送消息是因为这个消息队列的唯一接受者是中断,发送消息不会产生任务调度,OSQIntPost()不会产生不必要的任务调度。(2)串口发送中断#if EN_OS_INT_ENTER 0 #pragma disable #endifvoid comm(void) interrupt 4 uint8 data temp;if (RI = 1)#if EN_OS_INT_ENTER 0 OS_INT_ENTER();#endifRI = 0; OSQIntPost(SerialInData,SBUF); OSIntExit();return;if (TI = 1)TI = 0;if (OSQAccept(&temp,SerialOutData) = OS_Q_OK) SBUF = temp;else SerialCanSend = 1;程序分析:首先判断是否为发送中断;若是,则首先清除发送中断标志,然后判断消息队列是否有消息。如果消息队列中有消息,则将数据发送出去;如果消息队列中没有消息,则将全局变量 SerialCanSend 置 1,以表示串口空闲。程序需要判断当前是否处于发送状态,若是则这样处理;否则退出,不管消息队列中是否有消息。同时,在串口由接收状态转为发送状态时,需要将 TI 置 1,以产生串口发送中断。2 2 串口接收部分:串口接收部分:串口接收处理任务:void Recuve(void) uint8 data temp,temp1; uint8 Sum; /* 建立所需要的消息队列 */ OSQCreate(CommandData,16); OSQCreate(SerialInData,16); OSQCreate(SerialOutData,32); SerialInit(); /* 初始化串行口 */ while (1) OSQPend(&temp,SerialInData,0); /* 接收一个字节 */ while (1) OSQPend(&temp1,SerialInData,0);/* 接收一个字节 */ if (temp = STARTBYTE1) & (temp1 = STARTBYTE2) break; /* 接收到起始字符 */ temp = temp1; Sum = STARTBYTE1 + STARTBYTE2; OSQPend(&temp1,SerialInData,0); /* 接收数据 */ Sum += temp1; OSQPend(&temp,SerialInData,0); /* 接收校验和 */ Sum += temp; if (Sum = 0) /* 检验接收到的数据包 */ /* 发送消息给主任务 */ OSQPost(CommandData,temp1); 开始初始化消息队列初始化串口接收一个字节接收一个字节接收到包头接收两个字节校验和为 0给主任务发消息NYNY图 3.3.1:串口接收任务流程图3.4 功能实现功能实现1.LED 驱动:有 LED 显示任务和计时任务。现象是显示系统开机后的计时时间。2.键盘驱动:有键盘扫描输入任务。按键按下时在 LED 上显示按键值。3.串口收发驱动有串口接收任务。现象是可以实现串口发送和接受。4.4. 设计总结设计总结通过基于实时操作系统的单片机多任务应用程序设计,巩固了平时学习中的理论知识,同时对嵌入式操作系统底层编程有了进一步的了解。本次课程设计实现了在 51 单片机上移植微型嵌入式操作系统 small RTOS,并且在操作系统上设计应用程序,应用程序包括 LED 驱动、键盘驱动、串口收发驱动程序。这学期深入学习 C/OS-嵌入式操作系统,因此对 small RTOS内核的理解不是很困难。对 small RTOS 内核深入理解后,设计多任务应用程序,体现操作系统的优势。通过这次课程设计让我对嵌入式操作系统又有了更加深入的理解。5 5 致谢致谢首先感谢老师对我这次课程设计的辛勤帮助,使我对基本理论知识有了更深刻的掌握。这学期我学习最努力的就是嵌入式操作系统,一直在努力学懂嵌入式操作系统的基础知识,谢谢老师这学期对我的辅导,让我对嵌入式操作系统有了更加深入的理解,我以后仍将继续学习嵌入式操作系统。感谢在本次课程设计中帮助我的同学。感谢学校和院系给我这次课程设计的机会。6 6 参考文献参考文献1、操作系统(第 2 版) ,孟庆昌,牛欣源,电子工业出版社,2010;2、Small RTOS 原理及应用,陈明计,周立功等,北京航空航天大学出版社,2004;
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!