ImageVerifierCode 换一换
格式:DOCX , 页数:12 ,大小:39.74KB ,
资源ID:23063731      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/23063731.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(实验报告示例.docx)为本站会员(b****1)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

实验报告示例.docx

1、实验报告示例实时操作系统实验报告 专业:J通信0601 学号:3061109015姓名:蔡 智 超指导老师:李峰 实验二 任务管理实验实验目的: 1.理解任务管理的基本原理,了解任务的各个基本状态及其变迁过程;2.掌握C/OS-II 中任务管理的基本方法(挂起、解挂);3.熟练使用C/OS-II 任务管理的基本系统调用。实验要求与思路:为了体现任务的各个基本状态及其变迁过程,本实验设计了T0、T1 和T3三个任务,它们交替运行,如图所示说明:在系统完成初始化后,可以先创建并启动优先级最低的TaskStart,由它创建其他3 个应用任务T0、T1 和T2,之后整个系统的运行流程如下:1) 优先级

2、最高的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*/

3、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);v

4、oid 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_WHI

5、TE + 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); OSStar

6、t(); /* 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();

7、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) /

8、* 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)/* 1111

9、111111222222222233333333334444444444555555555566666666667777777777 */* 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

10、_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,

11、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);

12、 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_

13、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, ,

14、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, , DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY + DISP_BLINK)

15、;/* 1111111111222222222233333333334444444444555555555566666666667777777777 */* 01234567890123456789012345678901234567890123456789012345678901234567890123456789 */*$PAGE*/* CREATE TASKS*/static void TaskStartCreateTasks (void) INT8U i;INT8U err; for (i = 0; i N_TASKS; i+) /* Create tasks */ TaskDatai

16、 = i; /* Each task will display its own information */ OSTaskCreate(Task0, (void *)&TaskData0, &TaskStk0TASK_STK_SIZE - 1, 5); OSTaskCreate(Task1, (void *)&TaskData1, &TaskStk1TASK_STK_SIZE - 1, 6); OSTaskCreate(Task2, (void *)&TaskData2, &TaskStk2TASK_STK_SIZE - 1, 7); err=OSTaskSuspend(6); /* 确保每个

17、任务运行时其他任务被挂起 err=OSTaskSuspend(7); /*$PAGE*/* TASK #0* Description: This task is suspended by itself,then it will be resumed by other tasks.*/void Task0 (void *pdata) INT8U i; INT8U err; i=*(int *)pdata; for (;) PC_DispStr( 14, 10, task0 is running. , DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY); PC_Disp

18、Str( 14, 11, task1 is suspended. , DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY); PC_DispStr( 14, 12, task2 is suspended. , DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY); OSTimeDly(200); err=OSTaskResume(6); err=OSTaskSuspend(5); /* suspend itself */ /*$PAGE*/* TASK #1* Description: This task resume task0*/void

19、 Task1 (void *pdata) INT8U i; INT8U err; i=*(int *)pdata; for (;) OSTimeDly(200); PC_DispStr( 14, 10, task0 is suspended. , DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY); PC_DispStr( 14, 11, task1 is running. , DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY); PC_DispStr( 14, 12, task2 is suspended. , DISP_FGND_BL

20、ACK + DISP_BGND_LIGHT_GRAY); OSTimeDly(200); err=OSTaskResume(7); /* resume task0 */ err=OSTaskSuspend(6); /*$PAGE*/* TASK #2* Description: This task resume task0*/void Task2 (void *pdata) INT8U i; INT8U err; i=*(int *)pdata; for (;) OSTimeDly(200); PC_DispStr( 14, 10, task0 is suspended. , DISP_FGN

21、D_BLACK + DISP_BGND_LIGHT_GRAY); PC_DispStr( 14, 11, task1 is suspended. , DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY); PC_DispStr( 14, 12, task2 is running. , DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY); OSTimeDly(200); err=OSTaskResume(5); /* resume task0 */ err=OSTaskSuspend(7); 实验截图:实验感想通过这次实验使我掌握C/OS-II 中任务管理的基本方法(挂起、解挂),首先在主函数中创建初始任务OSTaskCreate,执行OSTaskCreate后,在调用TaskStartCreateTasks ,在TaskStartCreateTasks实现3 个应用任务T0、T1 和T2循环挂起和唤醒,每个任务运行时要保证其他任务被挂起,而且要在挂起之前唤醒下一个任务。显示设置可以修改TaskStartDispInit函数或者在Task0 Task1 Task2修改。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1