第一范文网 - 专业文章范例文档资料分享平台

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

来源:用户分享 时间:2025/6/26 1:03:34 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

程序下载完成后,会弹出一个“确认透视图切换”对话框,选择“是”,切换到调试透 视图。

调试的界面如下:

点击绿色的按钮,全速运行。

注意:全速运行后,程序不能够被暂停和停止。

三、实验过程中遇到的问题及体会

在设置IP地址时,要求该IP地址与本计算机在同一个子网中,同时要求该 IP地址没有被网络上其他计算机使用。此外,通过构建开发环境,处次体验到了嵌入式开发工作的乐趣。

实验二 任务的基本管理

一、实验目的

1.理解任务管理的基本原理,了解任务的各个基本状态及其变迁过程; 2.掌握 uC/OS-II 中任务管理的基本方法(创建、启动、挂起、解挂任务); 3. 熟练使用 uC/OS-II 任务管理的基本系统调用。

二、实验原理及程序结构

1. 实验设计

为了展现任务的各种基本状态及其变迁过程,本实验设计了 Task0、Task1 两个任务: 任务 Task0 不断地挂起自己,再被任务 Task1 解挂,两个任务不断地切换执行。通过本实验,读者可以清晰地了解到任务在各个时刻的状态以及状态变迁的原因。 2. 运行流程 描述如下:

(1)系统经历一系列的初始化过程后进入 boot_card()函数,在其中调用 ucBsp_init()进 行板级初始化后,调用 main()函数;

(2)main()函数调用 OSInit()函数对 uC/OS-II 内核进行初始化,调用 OSTaskCreate 创 建起始任务 TaskStart;

(3)main()函数调用函数 OSStart()启动 uC/OS-II 内核的运行,开始多任务的调度,执 行当前优先级最高的就绪任务 TaskStart; (4)TaskStart 完成如下工作:

a、安装时钟中断并初始化时钟,创建 2 个应用任务;

b、挂起自己(不再被其它任务唤醒),系统切换到当前优先级最高的就绪任务Task0。之后整个系统的运行流程如下:

? t1 时刻,Task0 开始执行,它运行到 t2 时刻挂起自己;

? t2 时刻,系统调度处于就绪状态的优先级最高任务 Task1 执行,它在 t3 时刻唤醒

Task0,后者由于优先级较高而抢占 CPU;

? Task0 执行到 t4 时刻又挂起自己,内核调度 Task1 执行; ? Task1 运行至 t5 时刻再度唤醒 Task0; ? ……

3. μC/OS-Ⅱ中的任务描述

一个任务通常是一个无限的循环 ,由于任务的执行是由操作系统内核调度的,因此任务是绝不会返回的,其返回参数必须定义成 void。在μC/OS-Ⅱ中,当一个运行着的任务使一个比它优先级高的任务进入了就绪态,当前任务的 CPU 使用权就会被抢占,高优先级任务会立刻得到 CPU 的控制权(在系统允许调度和任务切换的前提下)。μC/OS-Ⅱ可以管理多达 64 个任务,但目前版本的μC/OS-Ⅱ有两个任务已经被系统占用了(即空闲任务和统计任务)。必须给每个任务赋以不同的优先级,任务的优先级号就是任务编号(ID),优先级可以从 0 到 OS_LOWEST_PR10-2。优先级号越低,任务的优先级越高。μC/OS-Ⅱ总是运行进入就绪态的优先级最高的任务。 4. 源程序说明 (1) TaskStart任务

TaskStart 任务负责安装操作系统的时钟中断服务例程、初始化操作系统时钟,并创建所 有的应用任务:

UCOS_CPU_INIT(); /* Install uC/OS-II's clock tick ISR */ UCOS_TIMER_START(); /*Timer 初始化*/

TaskStartCreateTasks(); /* Create all the application tasks */ OSTaskSuspend(OS_PRIO_SELF);

具体负责应用任务创建的 TaskStartCreateTasks 函数代码如下,它创建了两个应用任务 Task0 和 Task1:

void TaskStartCreateTasks (void) {

INT8U i;

for (i = 0; i < N_TASKS; i++) // Create tasks {

TaskData[i] = i; // Each task will display itsown information }

OSTaskCreate(Task0, (void *)&TaskData[0], &TaskStk[0][TASK_STK_SIZE - 1], 5); OSTaskCreate(Task1, (void *)&TaskData[1], &TaskStk[1][TASK_STK_SIZE - 1], 6); }

TaskStart 任务完成上述操作后将自己挂起,操作系统将调度当前优先级最高的应用任务Task0 运行。 (2) 应用任务

应用任务 Task0 运行后将自己挂起,之后操作系统就会调度处于就绪状态的优先级最高的任务,具体代码如下: void Task0 (void *pdata) {

INT8U i; INT8U err; i=*(int *)pdata; for (;;) {

printf(\

printf(\..............................................................\\n\\r\ printf(\

printf(\ err=OSTaskSuspend(5); // suspend itself } }

应用任务 Task1 运行后将 Task0 唤醒,使其进入到就绪队列中: void Task1 (void *pdata) {

INT8U i; INT8U err; i=*(int *)pdata; for (;;) {

OSTimeDly(150);

printf(\ printf(\

搜索更多关于: 嵌入式实时操作系统实验报告 的文档
嵌入式实时操作系统实验报告.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c17wlf0offt3x5if1klmb9gaib47veh009mc_4.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top