




已阅读5页,还剩28页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实时操作系统实习报告实时操作系统实验报告 实验一 任务管理实验实验目的:l 理解任务管理的基本原理,了解任务的各个基本状态及其变迁过程;l 掌握C/OS-II系统的编程方法,包括main函数的书写方法,任务组成、创建、启动和时间函数,主要包括:n OSInit; OSStart; OSTaskCreate; PC_DispStr; PC_GetKey; OSTimeDlyHMSM; OSTimeDly; OSTimeGet等。实验要求与思路:设计一个任务,利用OSTimeGet实现时间的获取,同时利用PC_DispStr实现时间的显示,同时需要编写一个启动任务实现对时间任务的启动。实验程序:/* uC/OS-II* The Real-Time Kernel* EXAMPLE*/#include includes.h/* CONSTANTS*/#define TASK_STK_SIZE 512 /* Size of each tasks stacks (# of WORDs) */* VARIABLES*/OS_STK TaskStkTASK_STK_SIZE; /* Tasks stacks */OS_STK TaskStartStkTASK_STK_SIZE;/* FUNCTION PROTOTYPES*/void Task(void *data); /* Function prototypes of tasks */void TaskStart(void *data); /* Function prototypes of Startup task */static void TaskStartCreateTasks(void);static void TaskStartDispInit(void);/* MAIN*/void main (void) PC_DispClrScr(DISP_FGND_WHITE + DISP_BGND_BLACK); /* Clear the screen */ OSInit(); /* Initialize uC/OS-II */ PC_DOSSaveReturn(); /* Save environment to return to DOS */ PC_VectSet(uCOS, OSCtxSw); /* Install uC/OS-IIs context switch vector */ OSTaskCreate(TaskStart, (void *)0, &TaskStartStkTASK_STK_SIZE - 1, 2); OSStart(); /* Start multitasking */* STARTUP TASK*/void TaskStart (void *pdata)#if OS_CRITICAL_METHOD = 3 /* Allocate storage for CPU status register */ OS_CPU_SR cpu_sr;#endif char s100; INT16S key; pdata = pdata; /* Prevent compiler warning */ TaskStartDispInit(); /* Initialize the display */ OS_ENTER_CRITICAL(); PC_VectSet(0x08, OSTickISR); /* Install uC/OS-IIs clock tick ISR */ PC_SetTickRate(OS_TICKS_PER_SEC); /* Reprogram tick rate */ OS_EXIT_CRITICAL(); OSStatInit(); /* Initialize uC/OS-IIs statistics */ OSTaskCreate(Task, (void *)0, &TaskStkTASK_STK_SIZE - 1, 0); for (;) if (PC_GetKey(&key) = TRUE) /* See if key has been pressed */ if (key = 0x1B) /* Yes, see if its the ESCAPE key */PC_DOSReturn(); /* Return to DOS */ OSCtxSwCtr = 0; /* Clear context switch counter */OSTimeDly(1); /* INITIALIZE THE DISPLAY*/static void TaskStartDispInit (void) PC_DispStr( 0, 0, uC/OS-II, The Real-Time Kernel , DISP_FGND_WHITE + DISP_BGND_RED + DISP_BLINK); PC_DispStr( 0, 1, , DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY); PC_DispStr( 0, 2, , DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY); PC_DispStr( 0, 3, Time EXAMPLE , DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY); PC_DispStr( 0, 4, , DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY); PC_DispStr( 0, 5, , DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY); PC_DispStr( 0, 6, , DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY); PC_DispStr( 0, 7, , DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY); PC_DispStr( 0, 8, , DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY); PC_DispStr( 0, 9, , DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY); PC_DispStr( 0, 10, , DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY); PC_DispStr( 0, 11, , DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY); PC_DispStr( 0, 12, , DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY); PC_DispStr( 0, 13, , DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY); PC_DispStr( 0, 14, , DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY); PC_DispStr( 0, 15, , DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY); PC_DispStr( 0, 16, , DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY); PC_DispStr( 0, 17, , DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY); PC_DispStr( 0, 18, , DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY); PC_DispStr( 0, 19, , DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY); PC_DispStr( 0, 20, , DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY); PC_DispStr( 0, 21, , DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY); PC_DispStr( 0, 22, , DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY + DISP_BLINK);/* TASKS*/void Task (void *pdata) char ss30; INT8U err; pdata=pdata; for (;) sprintf(ss,Time = %ld,OSTimeGet();PC_DispStr(40, 10, ss, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);OSTimeDlyHMSM(0, 0, 1, 0); /* Wait one second */ /* Delay 1 clock tick */ 实验输出:实验感想:通过这次的实验,我大致的了解了如何的实现bc的调试,同时对于u/cos II有了直观的了解,同时我知道了对于任务的建立和如何的进行形式的输出,对于Pc_DispStr输出函数的了解。实验二 任务管理实验实验目的:1.理解任务管理的基本原理,了解任务的各个基本状态及其变迁过程;2.掌握C/OS-II 中任务管理的基本方法(挂起、解挂);3.熟练使用C/OS-II 任务管理的基本系统调用。实验要求与思路:为了体现任务的各个基本状态及其变迁过程,本实验设计了T0、T1 和T3三个任务,它们交替运行,如图所示说明:在系统完成初始化后,可以先创建并启动优先级最低的TaskStart,由它创建其他3 个应用任务T0、T1 和T2,之后整个系统的运行流程如下:1) 优先级最高的T0 开始执行,之后T0 挂起自己;2) 然后系统调度选中T1 开始执行,之后T1 挂起自己;3) 接着系统调度选中T2,之后唤醒T0;4) 如此循环实验程序:* uC/OS-II* The Real-Time Kernel* EX #1 Task Management*#include includes.h* CONSTANTS*#define TASK_STK_SIZE 512 /* Size of each tasks stacks (# of WORDs) */#define N_TASKS 2 /* Number of identical tasks * VARIABLES*/OS_STK TaskStkN_TASKSTASK_STK_SIZE; /* Tasks stacks OS_STK TaskStartStkTASK_STK_SIZE; /* TaskStart task stack INT8U TaskDataN_TASKS; /* Parameters to pass to each task /* FUNCTION PROTOTYPES*/void Task0(void *pdata); /* Function prototypes of tasks */void Task1(void *pdata);void Task2(void *pdata);void TaskStart(void *pdata); /* Function prototypes of Startup task */static void TaskStartCreateTasks(void); /* Function prototypes of creat task */static void TaskStartDispInit(void); /* Function prototypes of Initialization the display */*$PAGE*/* MAIN*/void main (void) PC_DispClrScr(DISP_FGND_WHITE + DISP_BGND_BLACK); /* Clear the screen */ OSInit(); /* Initialize uC/OS-II */ PC_DOSSaveReturn(); /* Save environment to return to DOS */ PC_VectSet(uCOS, OSCtxSw); /* Install uC/OS-IIs context switch vector */ /创建初始任务 OSTaskCreate(TaskStart, (void *)0, &TaskStartStkTASK_STK_SIZE - 1, 4); OSStart(); /* Start multitasking */* STARTUP TASK*/void TaskStart (void *pdata)#if OS_CRITICAL_METHOD = 3 /* Allocate storage for CPU status register */ OS_CPU_SR cpu_sr;#endif INT16S key; pdata = pdata; /* Prevent compiler warning */ TaskStartDispInit(); /* Initialize the display */ OS_ENTER_CRITICAL(); PC_VectSet(0x08, OSTickISR); /* Install uC/OS-IIs clock tick ISR */ PC_SetTickRate(OS_TICKS_PER_SEC); /* Reprogram tick rate */ OS_EXIT_CRITICAL(); OSStatInit(); /* Initialize uC/OS-IIs statistics */ TaskStartCreateTasks(); /* Create all the application tasks */ for (;) if (PC_GetKey(&key) = TRUE) /* See if key has been pressed */ if (key = 0x1B) /* Yes, see if its the ESCAPE key */PC_DOSReturn(); /* Return to DOS */ OSCtxSwCtr = 0; /* Clear context switch counter */OSTimeDlyHMSM(0, 0, 1, 0); /* Wait one second */ /*$PAGE*/* INITIALIZE THE DISPLAY*/static void TaskStartDispInit (void)/* 1111111111222222222233333333334444444444555555555566666666667777777777 */* 01234567890123456789012345678901234567890123456789012345678901234567890123456789 */PC_DispStr( 0, 0, uC/OS-II, The Real-Time Kernel , DISP_FGND_WHITE + DISP_BGND_RED + DISP_BLINK);PC_DispStr( 0, 1, , DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr( 0, 2, , DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr( 0, 3, EXAMPLE #1 Task Management , DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr( 0, 4, , DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr( 0, 5, , DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr( 0, 6, , DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr( 0, 7, , DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr( 0, 8, , DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr( 0, 9, , DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr( 0, 10, Task0() : , DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr( 0, 11, Task1() : , DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr( 0, 12, Task2() : , DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr( 0, 13, , DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr( 0, 14, , DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr( 0, 15, , DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr( 0, 16, , DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr( 0, 17, , DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr( 0, 18, , DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr( 0, 19, , DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr( 0, 20, , DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr( 0, 21, , DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr( 0, 22, , DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr( 0, 23, , DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);PC_DispStr( 0, 24, , DI
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 新解读《GB-T 38914-2020车用质子交换膜燃料电池堆使用寿命测试评价方法》
- 2025年资料员资格考试管理与实务知识复习题库及答案(共100题)
- 2026年译林版高考英语一轮总复习考点梳理语讲解(必修第三册)
- 2026年外研版高考英语一轮复习考点梳理必修第二册
- 肝功能解读课件
- 2025年输电带电作业理论知识模拟习题及参考答案
- 江苏省高考数学二轮复习 专题六 数列 第2讲 数列的综合问题课件-人教版高三全册数学课件
- 【物理】浙江2025届高考考前冲刺卷(解析版)
- 2026新高考物理一轮复习专练:抛体运动(原卷版)
- 2025年统编版高二历史寒假专项复习:选必二第5~6单元(解析版)
- 三方商铺转租协议书
- 自然灾害信息员业务知识考核试题
- 六个盒子组织诊断工具理解与实践课件
- 房产租赁合同文本与房产租赁合同模板
- 全玻幕墙的设计与计算
- 国际贸易技能大赛题库
- von frey丝K值表完整版
- 出纳日记账模板
- GB/T 8183-2007铌及铌合金无缝管
- GB/T 3049-2006工业用化工产品铁含量测定的通用方法1,10-菲啰啉分光光度法
- 基于PLC的十字路口交通灯控制系统设计与调试课件概要
评论
0/150
提交评论