嵌入式系统基础教程第19讲第9章嵌入式操作系统

上传人:san****019 文档编号:22680642 上传时间:2021-05-30 格式:PPT 页数:53 大小:599.31KB
返回 下载 相关 举报
嵌入式系统基础教程第19讲第9章嵌入式操作系统_第1页
第1页 / 共53页
嵌入式系统基础教程第19讲第9章嵌入式操作系统_第2页
第2页 / 共53页
嵌入式系统基础教程第19讲第9章嵌入式操作系统_第3页
第3页 / 共53页
点击查看更多>>
资源描述
嵌 入 式 系 统 原 理 与 开 发 第 19讲南 京 大 学 计 算 机 系 俞 建 新 主 讲 2008年12月15日南京大学计算机系2 第 9章 嵌 入 式 操 作 系 统 概 论l 本 讲 内 容l 实 时 系 统l 嵌 入 式 操 作 系 统 的 特 点 和 分 类l RTOS常 用 调 度 算 法l 启 动 程 序 bootloaderl 嵌 入 式 操 作 系 统 C/OS-II 2008年12月15日南京大学计算机系3 9.5 嵌 入 式 操 作 系 统 C/O S-II l C/OS-II的 主 要 特 点l C/OS-II的 层 次l C/OS-II的 代 码 结 构l C/OS-II的 内 核l C/OS-II的 任 务 调 度l C/OS-II的 任 务 切 换 l C/OS-II的 中 断 处 理l C/OS-II的 时 间 管 理l C/OS-II的 任 务 间 通 信l C/OS-II的 存 储 管 理l C/OS-II的 移 植 2008年12月15日南京大学计算机系4 C/O S-II简 介l 作 者 : Jean Labrossel 源 码 公 开 的 嵌 入 式 实 时 系 统l 已 被 移 植 到 40多 种 不 同 的 CPU上l http:/www.C/OS-II.com提 供 技 术 服 务 支 持 。 2008年12月15日南京大学计算机系5 C/O S-II的 主 要 特 点l 可 移 植 性 和 可 确 定 性 l 绝 大 部 分 代 码 用 ANSI C编 写l 与 处 理 器 硬 件 相 关 的 代 码 用 汇 编 语 言 编 写l 移 植 条 件移 植 目 标 处 理 器 要 有 硬 件 堆 栈 指 针CPU内 容 寄 存 器 入 栈 、 出 栈 指 令C编 译 器 支 持 内 嵌 汇 编 或 C可 扩 展 , 可 连 接 汇 编 模块关 中 断 、 开 中 断 可 在 C语 言 中 实 现 2008年12月15日南京大学计算机系6 C/O S-II的 主 要 特 点 ( 续 1)l 抢 占 式 多 任 务 l 可 以 管 理 64个 任 务 ,8个 任 务 是 系 统 任 务l 用 户 可 以 最 多 定 义 56个 任 务 , 每 个 任 务 优 先 级 不 相 同l 实 时 性 较 强 , 参 看 下 表OS VxWorks C/OS-II RT-Linux QNX6供应商Wind River Micrium FSMlabs Quanturm硬件平台MC68000 80486/33MHz 80486/60MHz 80486/33MHz任务切换3.8微秒9微秒不详12.57微秒中断响应3微秒7.5微秒25微秒7.54微秒4种 嵌 入 式 操 作 系 统 的 实 时 性 能 典 型 值 2008年12月15日南京大学计算机系7 C/O S-II的 主 要 特 点 ( 续 2)l 可 固 化 可 裁 剪 l 实 用 程 序 可 以 只 使 用 C/OS-II中 需 要 的 那 些 系 统 服务l 任 务 由 独 立 堆 栈l C/OS-II允 许 每 个 任 务 由 不 同 的 栈 空 间l 嵌 套 中 断 管 理l 嵌 套 层 数 可 达 255层 2008年12月15日南京大学计算机系8 C/O S-II的 层 次l C/OS-II嵌 入 式 系 统 软 件 架 构 ( 见 下 页 ) , 是一 个 建 立 在 硬 件 系 统 上 的 四 层 软 件 结 构l 最 上 层 是 应 用 软 件 层l API层 和 支 撑 软 件 层l 内 核l 设 备 驱 动 程 序 2008年12月15日南京大学计算机系9 C/O S-II的 层 次 示 意 图l 基 于C/OS-II的 嵌 入 式系 统 软 件层 次 示 意图 如 右 图所 示 2008年12月15日南京大学计算机系10 C/O S-II的 代 码 结 构l 基 于 C/OS-II平 台 的 嵌 入 式 系 统 体 系 结 构 如 右 下 图 所 示l C/OS-II主 要 由 三 大 类 程 序 文 件 构 成A类 : 处 理 器 无 关B类 : 应 用 程 序 有 关C类 : 硬 件 平 台 相 关 2008年12月15日南京大学计算机系11 C/O S-II的 代 码 结 构 ( 续 )l 按 功 能 分l 核 心 模 块 、 预 处 理 模 块 、 进 程 间 通 信 模 块 、 内存 管 理 模 块 、 任 务 与 调 度 管 理 器 模 块 、 时 间 管理 模 块 、 移 植 模 块l C/OS-II的 源 代 码 文 件 组 成l 见 教 材 第 344页 表 9-5 2008年12月15日南京大学计算机系12 C/O S-II的 代 码 结 构 ( 续 )l C/OS-II的 任 务 代 码 有 两 种 框 架 结 构 , 如 下 列 出 : void Usertask (void *pdata)for (;) 用户代码; OSMboxPend();OSQPend();OSSemPend();OSTaskDel(OS_PRIO_SELF);OSTaskSuspend(OS_PRIO_SELF);OSTimeDly();OSTimeDlyHMSM();用户代码; void Usertask (void *pdata) 用户代码; OSTaskDel(OS_PRIO_SELF); 2008年12月15日南京大学计算机系13 C/O S-II的 代 码 结 构 ( 续 )l 对 于 执 行 无 限 循 环 的 任 务 , 通 常 采 用 第 一 种 形 式 ; 对于 只 执 行 一 次 就 自 我 删 除 的 任 务 , 采 用 第 二 种 形 式 。l 以 下 是 推 荐 的 C/OS-II应 用 程 序 任 务 的 基 本 结 构 void Usertask (void *pdata) INT8U ReturnNum; / 返回值 InitTimer(); /可选 for( ; ; ) . /应用程序代码 OSTimeDly(n); /常用的语句 2008年12月15日南京大学计算机系14 C/O S-II的 代 码 结 构 ( 续 )l C/OS-II的 启 动 过 程l Bootloader执 行 完 毕 后 , 调 用 应 用 程 序 主 文 件 ( 通常 是 main.c) 里 的 main()函 数 。 main()函 数 在 执 行 过程 中 , 除 硬 件 初 始 化 函 数 和 用 户 函 数 外 , 按 以 下 次序 执 行 三 个 主 要 的 C/OS-II函 数 : 操 作 系 统 初 始化 OSInit(); 任 务 创 建 OSTaskCreate(); 任 务 调度 开 始 OSStart() l 一 旦 OSStart()函 数 开 始 执 行 , 就 标 志 着 C/OS-II进入 了 多 任 务 调 度 的 正 常 运 行 状 态 2008年12月15日南京大学计算机系15 C/O S-II的 内 核l C/OS-II内 核 只 提 供 任 务 调 度 、 任 务 间 通 信( ITC) 与 同 步 、 任 务 管 理 、 时 间 管 理 和 内 存管 理 等 基 本 功 能 l 可 裁 剪 编 译 到 8K左 右 , 全 部 只 有 100K左 右 , 消 耗资 源 非 常 小l 在 小 规 模 的 代 码 内 实 现 了 抢 占 式 任 务 调 度 、 多 任 务通 信 功 能 2008年12月15日南京大学计算机系16 C/O S-II的 内 核 ( 续 1)l C/OS-II的 临 界 区l C/OS-II调 用 OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()两 个 宏 来 执 行 关 中 断 和 开 中 断 ,对 于 不 同 的 体 系 结 构 , 这 两 个 宏 定 义 不 一 样 。l OS_CPU.H文 件 中 含 有 OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()的 定 义 2008年12月15日南京大学计算机系17 C/O S-II的 内 核 ( 续 2)l C/OS-II的 任 务 状 态l 最 大 任 务 数 64个 , 最 高 优 先 级 为 0, 最 低 优 先 级 取值 为 实 际 定 义 的 最 大 任 务 数 减 1.l 任 务 建 立 之 后 , 拥 有 优 先 级 , 执 行 函 数 , 自 用 栈 空间 和 任 务 控 制 块 ( TCB) , 在 运 行 时 刻 能 够 完 全 控制 CPU的 操 作 以 及 全 部 用 户 可 访 问 寄 存 器 的 操 作 。 2008年12月15日南京大学计算机系18 C/O S-II的 任 务 状 态 转 换 图C/OS-II的每 个 任 务 都是 一 个 无 限的 循 环 。 每个 任 务 都 处在 休 眠 态 、就 绪 态 、 运行 态 、 挂 起态 和 被 中 断态 的 某 种 状态 下 ( 任 务状 态 变 迁 如右 图 所 示 ) 2008年12月15日南京大学计算机系19 C/O S-II的 内 核 ( 续 3)l 休 眠 态 ( dormant)l 这 种 状 态 相 当 于 该 任 务 驻 留 在 内 存 中 , 但 还 没 有 交给 内 核 管 理 。 把 任 务 交 给 内 核 是 通 过 调 用 任 务 创 建函 数 实 现 的l C/OS-II两 个 任 务 创 建 函 数OSTaskCreate()和 OSTaskCreateExt() 2008年12月15日南京大学计算机系20 C/O S-II的 内 核 ( 续 3)l 就 绪 态 ( ready)l 在 这 种 状 态 下 意 味 着 该 任 务 已 经 准 备 好 , 且 可 运 行 ,但 由 于 该 任 务 的 优 先 级 比 正 在 运 行 的 任 务 的 优 先 级低 , 所 以 还 暂 时 不 能 运 行l C/OS-II就 绪 表 为 每 一 个 优 先 级 的 任 务 提 供 了 一 个位 元 , 登 记 该 任 务 是 否 就 绪 , 就 绪 时 取 值 为 1, 没有 就 绪 时 取 值 为 0 l 运 行 态 l 得 到 了 CPU的 控 制 权 正 在 运 行 之 中 的 任 务 状 态 2008年12月15日南京大学计算机系21 C/O S-II的 内 核 ( 续 4)l 挂 起 态 ( pending) 或 者 等 待 态 ( waiting)l 正 在 运 行 的 任 务 由 于 调 用 延 时 函 数 OSTimeDly(),或 等 待 事 件 信 号 量 而 将 自 身 挂 起 l 被 中 断 态 ( Interrupted) l 发 生 中 断 时 CPU提 供 相 应 的 中 断 服 务 , 原 来 正 在 运行 的 任 务 暂 时 停 止 运 行 , 进 入 了 被 中 断 状 态 2008年12月15日南京大学计算机系22 C/O S-II的 内 核 ( 续 5)l 任 务 控 制 块 OS_TCBl 内 核 对 任 务 的 管 理 通 过 任 务 控 制 块 OS_TCB( Task Control Block) 进 行 。 任 务 控 制 块 是 一 个 数 据 结 构 ,在 任 务 创 建 时 内 核 会 申 请 一 个 空 白 TCB, 而 后 进 行初 始 化 , 将 创 建 的 任 务 信 息 填 入 该 TCB的 各 个 字 段 。当 任 务 的 CPU使 用 权 被 剥 夺 时 , C/OS-II用 它 来 保存 该 任 务 的 状 态 。 当 任 务 重 新 得 到 CPU使 用 权 时 ,任 务 控 制 块 能 确 保 任 务 从 当 时 被 中 断 处 继 续 执 行 。OS_TCB全 部 驻 留 在 RAM中 2008年12月15日南京大学计算机系23 C/O S-II的 内 核 ( 续 6)l OS_TCB的 字 段 说 明l OS_TCB 数 据 结 构 中 的 OSTCBX, OSTCBY,OSTCBBitX, OSTCBBitY四 个 变 量 用 于 加 速 任 务进 入 就 绪 态 的 过 程 或 进 入 等 待 事 件 发 生 状 态 的 过 程 l 是 根 据 任 务 的 优 先 级 OSTCBPrio计 算 得 出 , 计 算 公式 如 下 OSTCBY = OSTCBPrio 3;OSTCBBitY = OSMapTblOSTCBY;OSTCBX = OSTCBPrio OSTCBBitX = OSMapTblOSTCBX; 2008年12月15日南京大学计算机系24 C/O S-II的 任 务 调 度l C/OS-II的 就 绪 表l C/OS-II的 就 绪 任 务 登 记 在 就 绪 表 中 。 就 绪 表 由 两个 变 量 OSRdyGrp和 OSRdyTbl构 成l OSRdyGrp是 一 个 单 字 节 整 数 变 量 l OSRdyTblOS_LOWEST_PRIO/8+1是 单 字 节 整 数数 组 , 其 元 素 个 数 定 义 为 最 低 优 先 级 除 以 8加 1, 最多 可 有 8个 元 素 ( 字 节 ) 2008年12月15日南京大学计算机系25 C/O S-II的 任 务 调 度 ( 续 1)位 图 形 式 的 C/OS-II的 任 务 就 绪 表 和 就 绪 实 例 2008年12月15日南京大学计算机系26 C/O S-II的 任 务 调 度 ( 续 2)l 任 务 就 绪 表 的 操 作l 登 记 一 个 新 就 绪 表 操 作 的 典 型 指 令 段l 删 除 不 再 处 于 就 绪 态 任 务 的 指 令 段l 从 就 绪 表 中 找 到 最 高 优 先 级 的 任 务 2008年12月15日南京大学计算机系27 C/O S-II的 任 务 调 度 ( 续 3)l C/OS-II的 任 务 调 度l C/OS-II总 是 运 行 处 于 就 绪 态 任 务 中 优 先 级 最 高 的那 一 个 l OSSched()函 数 是 任 务 调 度 的 前 导 函 数 , 判 断进 行 任 务 调 度 的 三 个 条 件 是 否 满 足 。 这 三 个 条件 分 别 是 :l 中 断 嵌 套 层 数 共 享 全 程 变 量 OSIntNesting=0 l 任 务 调 度 加 锁 层 数 共 享 全 程 变 量 OSLockNesting=0 l 就 绪 表 中 查 找 到 的 最 高 优 先 级 任 务 的 优 先 级 比 当 前任 务 的 优 先 级 高 2008年12月15日南京大学计算机系28 C/O S-II的 任 务 切 换l 也 叫 做 上 下 文 切 换 ( Context Switch) l 当 C/OS-II内 核 决 定 运 行 另 外 任 务 时 , 它 保 存正 在 运 行 任 务 的 上 下 文 , 这 些 内 容 保 存 在 任 务的 自 用 堆 栈 之 中 。 上 下 文 入 栈 工 作 完 成 以 后 ,把 下 一 个 将 要 执 行 的 任 务 的 上 下 文 从 该 任 务 自用 堆 栈 中 装 入 CPU的 寄 存 器 , 然 后 开 始 该 任 务的 运 行 2008年12月15日南京大学计算机系29 ARM处 理 器 任 务 栈 上 下 文 存 储 结 构 图 2008年12月15日南京大学计算机系30 C/O S-II的 中 断 处 理l C/OS-II中 的 中 断 服 务 子 程 序 主 要 用 汇 编 语 言编 写 而 成 l 中 断 服 务 子 程 序 在 执 行 前 将 被 中 断 任 务 的 执 行现 场 保 存 在 自 用 堆 栈l 中 断 服 务 子 程 序 执 行 事 件 处 理 有 两 种 方 法 。 一种 方 法 是 通 过 OSMBoxPost()、 OSQPost()、OSSemPost()等 函 数 去 通 知 真 正 做 该 事 件 处 理的 那 个 任 务 , 让 任 务 完 成 中 断 事 件 的 处 理 。 另外 一 种 是 由 中 断 服 务 子 程 序 本 身 完 成 事 件 处 理 2008年12月15日南京大学计算机系31 C/O S-II的 中 断 处 理 ( 续 1) l 中 断 服 务 子 程 序 的 伪 码 结 构 如 下 所 示 :保 存 全 部 CPU寄 存 器 到 堆 栈 ;调 用 OSIntEnter()或 者 对 OSIntNesting变 量 加 1;执 行 中 断 服 务 代 码 , 或 者 发 出 IPC消 息 通 知 特 定 任务 去 执 行 中 断 服 务 ;调 用 OSIntExit()函 数 ;恢 复 所 有 CPU寄 存 器 ;执 行 中 断 返 回 指 令 ; 2008年12月15日南京大学计算机系32 C/O S-II的 中 断 处 理 ( 续 2) l 调 用 中 断 退 出 函 数 OSIntExit()标 志 着 中 断 服 务子 程 序 的 终 结 , OSIntExit()将 中 断 嵌 套 层 数 计数 器 减 1。 当 中 断 嵌 套 计 数 器 减 到 零 并 且 调 度未 被 禁 止 ( OSLockNesting=0) , C/OS-II要重 新 开 始 调 度 。 2008年12月15日南京大学计算机系33 C/O S-II的 时 间 管 理l C/OS-II能 够 提 供 周 期 性 的 时 钟 信 号 , 节 拍 率10 100Hz。l 用 户 必 须 在 多 任 务 系 统 启 动 以 后 即 在 调 用OSStart()之 后 激 活 时 钟 节 拍 信 号 发 生 器 l 时 钟 节 拍 中 断 服 务 子 程 序 必 须 用 汇 编 语 言 编 写l 每 当 硬 件 定 时 器 发 出 节 拍 中 断 请 求 , C/OS-II就 要 响 应 这 个 中 断 2008年12月15日南京大学计算机系34 C/O S-II的 时 间 管 理 ( 续 )l C/OS-II时 间 管 理 函 数 l 节 拍 延 时 函 数 OSTimeDly()该 函 数 常 常 位 于 任 务 函 数 的 结 束 处 ,用 以 退 出 运 行 ,用 户 可 以 借 助 定 义 全 局 常 数 OS_TICKS_PER_SEC l OSTimeDlyHMSM() 该 函 数 可 以 按 小 时 (H)、 分 (M)、 秒 (S)和 毫 秒 (m)来定 义 时 间 l OSTimeDlyResume()根 据 需 要 正 处 于 延 时 期 任 务 可 以 被 用 户 中 止 延 时 2008年12月15日南京大学计算机系35 C/O S-II的 任 务 间 通 信l C/OS-II中 保 护 任 务 间 共 享 数 据 和 提 供 任 务 间通 信 的 主 要 三 种 方 式l 利 用 宏 OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()来 关 闭 中 断 和 打 开 中 断 l 利 用 函 数 OSSchedLock()和 OSSchekUnlock()对C/OS-II中 的 任 务 调 度 函 数 上 锁 和 开 锁 l 利 用 信 号 量 、 互 斥 信 号 量 、 邮 箱 和 消 息 队 列 进 行 任务 间 通 信 , 属 于 事 件 控 制 的 同 步 与 通 信 。 2008年12月15日南京大学计算机系36 C/O S-II的 任 务 间 通 信 ( 续 1)l 事 件 控 制 块 ECBl 用 于 实 现 信 号 量 管 理 、 互 斥 型 信 号 量 管 理 、 消息 邮 箱 以 及 消 息 队 列 管 理 的 ITC功 能 函 数 的 基 本数 据 结 构 l C/OS-II的 ECB有 4种 类 型 : OSSemCreate()、OSMutexCreate()、 OSMboxCreate()、OSQCreate() 2008年12月15日南京大学计算机系37 C/O S-II的 任 务 间 通 信 ( 续 2)l 基 于 ECB的 任 务 间 通 信l 一 个 任 务 或 者 中 断 服 务 子 程 序 可 以 通 过 事 件 控制 块 ECB来 向 另 外 的 任 务 发 信 号 l 事 件 控 制 块 的 的 作 用 见 下 页 图 示 2008年12月15日南京大学计算机系38 C/O S-II的 任 务 间 通 信 ( 续 3)事 件 控 制 块 的 作 用 2008年12月15日南京大学计算机系39 C/O S-II的 任 务 间 通 信 ( 续 4)l 上 图 ITC操 作 说 明l 任 务 或 中 断 服 务 子 程 序 可 以 给 事 件 控 制 块 ECB发 信号 。l 只 有 任 务 可 以 等 待 另 一 个 任 务 或 中 断 服 务 子 程 序 通过 事 件 控 制 块 ECB给 它 发 送 信 号 , 而 中 断 服 务 子 程序 是 不 能 等 待 事 件 控 制 块 ECB给 它 发 送 信 号 的 。l 处 于 等 待 状 态 的 任 务 可 以 指 定 一 个 最 长 等 待 时 间l 多 个 任 务 可 以 同 时 等 待 同 一 事 件 的 发 生 。l 当 事 件 控 制 块 ECB是 一 个 信 号 量 时 , 任 务 可 以 等 待它 , 也 可 以 给 它 发 送 消 息 2008年12月15日南京大学计算机系40 C/O S-II的 任 务 间 通 信 ( 续 5)l 信 号 量 控 制 下 的 任 务 间 通 信l 在 C/OS-II下 , 用 信 号 量 进 行 任 务 间 通 信 时 , 先 用信 号 量 创 建 函 数 OSSemCreate创 建 一 个 信 号 量 , 且对 该 信 号 量 赋 初 始 计 数 值 。l 如 果 信 号 量 是 用 来 表 示 一 个 或 者 多 个 事 件 的 发 生 ,那 么 该 信 号 量 的 初 始 值 应 设 为 0l 如 果 信 号 量 是 用 于 对 共 享 资 源 的 访 问 , 那 么 该 信 号量 的 初 始 值 应 设 为 1l 如 果 该 信 号 量 是 用 来 表 示 允 许 任 务 访 问 n个 相 同 的资 源 , 那 么 该 初 始 值 显 然 应 该 是 n, 并 把 该 信 号 量作 为 一 个 可 计 数 的 信 号 量 使 用 。 2008年12月15日南京大学计算机系41 C/O S-II的 内 存 管 理l 嵌 入 式 内 存 管 理l 含 虚 拟 存 储 器 : 硬 件 提 供 MMU, 软 件 提 供 虚 拟 存 储 器 管 理模 块l 不 含 虚 拟 存 储 器 : 段 式 管 理l 段 式 管 理 下 存 储 器 分 配l 固 定 分 区 法固 定 分 区 法 指 内 存 中 分 区 的 个 数 固 定 不 变 , 根 据 分 区 大 小 的不 同 , 还 可 以 分 为 等 分 方 式 和 分 区 差 分 方 式 l 动 态 分 区 法各 个 分 区 的 大 小 是 在 相 应 的 进 程 需 要 内 存 时 根 据 需 要 建 立 的 2008年12月15日南京大学计算机系42 C/O S-II的 内 存 管 理 ( 续 1)l C/OS-II的 内 存 管 理l 改 进 型 固 定 分 区 法 , 由 操 作 系 统 把 连 续 的 大 块 内 存按 分 区 进 行 管 理l 每 个 分 区 包 含 整 数 个 大 小 相 同 的 内 存 块 : 两 级 固 定分 区l C/OS-II对 malloc()和 free()进 行 了 改 进l C/OS-II中 使 用 内 存 控 制 块 的 数 据 结 构 跟 踪 每 一 个内 存 分 区 , 系 统 中 的 每 个 内 存 分 区 都 有 它 自 己 的 内存 控 制 块 2008年12月15日南京大学计算机系43 C/O S-II的 内 存 管 理 ( 续 2)l C/OS-II对 内 存 的 管 理 通 过 以 下 四 个 函 数 完 成l 创 建 一 个 内 存 分 区 : OSMemCreate()l 分 配 一 个 内 存 块 : OSMemGet()l 释 放 一 个 内 存 块 : OSMemPut()l 查 询 一 个 内 存 分 区 的 状 态 : OSMemQuery() 2008年12月15日南京大学计算机系44 C/O S-II的 移 植l 移 植 C/OS-II必 须 满 足 以 下 要 求l 处 理 器 的 C编 译 器 能 产 生 可 重 入 代 码l 用 C语 言 可 以 打 开 和 关 闭 中 断l 处 理 器 支 持 中 断 , 并 且 能 产 生 定 时 中 断l 处 理 器 支 持 能 够 容 纳 一 定 量 数 据 的 硬 件 栈 区l 处 理 器 有 将 栈 区 指 针 和 其 他 CPU寄 存 器 读 出 和 存 储到 栈 区 或 内 存 中 的 指 令 2008年12月15日南京大学计算机系45 C/O S-II的 移 植 ( 续 1)l 基 本 的 配 置 和 定 义l 基 本 配 置 和 定 义 全 部 集 中 在 OS_CPU.H中l 定 义 和 编 译 器 相 关 的 数 据 结 构l 定 义 关 中 断 和 开 中 断 宏l 定 义 栈 指 针 的 增 长 方 向 2008年12月15日南京大学计算机系46 C/O S-II的 移 植 ( 续 2)l 与 移 植 有 关 的 四 个 汇 编 语 言 程 序l OSStartHighRdy(): 运 行 优 先 级 最 高 的 任 务l OSCtxSw(): 任 务 级 任 务 切 换 函 数l OSintCtxSw(): 中 断 级 任 务 切 换 函 数l OSTickISR(): 时 钟 节 拍 中 断 服 务 子 程 序 2008年12月15日南京大学计算机系47 需 要 移 植 的 汇 编 子 程 序 ( 函 数 )O STickISRl OSTickISR ()时 钟 节 拍 中 断 服 务 子 程 序l 时 钟 节 拍 来 源 于 硬 件 电 路 , 它 是 嵌 入 式 操 作 系 统 的基 本 定 时 单 位 l OSTickISR()首 先 在 被 中 断 任 务 栈 区 中 保 存 CPU寄 存器 的 值 , 调 用 OSIntEnter(), 该 函 数 将 中 断 嵌 套 记 录值 OSIntNesting加 1 l OSTickISR()然 后 调 用 OSTimeTick() l OSTickISR()最 后 调 用 OSIntExit() 2008年12月15日南京大学计算机系48 C/O S-II的 移 植 ( 续 3)l 与 移 植 有 关 的 主 要 C函 数l 需 要 在 OS_CPU_C.C文 件 中 改 写 10个 简 单 的 C函 数 ,其 中 必 须 修 改 的 函 数 是 OSTaskStkInit(), 其 余 9个 都是 用 户 接 口 函 数 l 用 户 接 口 函 数 的 调 用 位 置 都 是 在 任 务 状 态 发 生 显 著变 动 的 地 方 l OSTaskStkInit()函 数 用 于 初 始 化 任 务 的 自 用 栈 区 ,它 在 任 务 创 建 时 被 调 用 , 负 责 在 内 存 开 辟 该 任 务 的栈 工 作 区 , 然 后 返 回 该 栈 的 栈 顶 指 针 stk 。 2008年12月15日南京大学计算机系49 有 关 C/O S-II源 代 码 的 通 读l 通 读 C/OS-II源 代 码 是 掌 握 嵌 入 式 操 作 系 统 的 好 方法 , 建 议 有 条 件 的 情 况 下 由 教 师 带 领 同 学 通 读 。l 通 读 C/OS-II源 代 码 的 注 意 事 项l 硬 件 平 台 不 同 的 C/OS-II源 代 码 是 不 同 的l 建 议 先 阅 读 x86平 台 的 C/OS-II全 套 源 代 码 , 再 阅读 ARM平 台 的 C/OS-II源 代 码 。 有 可 能 的 情 况 下 ,阅 读 MIPS平 台 和 PowerPC平 台 的 C/OS-II源 代 码l 阅 读 C/OS-II的 源 代 码 主 要 目 的 是 全 面 了 解 嵌 入 式操 作 系 统 的 总 体 结 构 。 2008年12月15日南京大学计算机系50 有 关 C/O S-II的 实 验l 通 过 C/OS-II实 验 项 目 初 学 者 可 以 深 切 地 体 会嵌 入 式 项 目 或 者 嵌 入 式 产 品 的 开 发 , 从 而 获 得第 一 手 嵌 入 式 软 件 开 发 经 验 。l 以 下 是 可 供 教 师 和 学 生 选 择 的 实 验 项 目 。l C/OS-II在 不 同 ARM开 发 板 上 的 移 植l 将 C/OS-II移 植 到 MIPS和 PowerPC开 发 板 上l 基 于 C/OS-II的 设 备 驱 动 开 发l C/OS-II的 工 作 参 数 配 置 实 验 l C/OS-II的 应 用 程 序 编 程 2008年12月15日南京大学计算机系51 第 19讲 重 点l C/OS-II的 特 点 、 软 件 层 次 和 代 码 结 构l C/OS-II启 动 和 初 始 化l C/OS-II的 内 核l C/OS-II的 任 务 调 度l C/OS-II的 任 务 切 换l C/OS-II的 中 断 处 理l C/OS-II的 时 间 管 理l C/OS-II的 任 务 间 通 信l C/OS-II的 存 储 管 理 l C/OS-II的 移 植 2008年12月15日南京大学计算机系52 第 19讲 复 习 题 思 考 题l 两 名 工 程 师 就 C/OS-II任 务 就 绪 表 占 用 内 存 空 间 问 题各 自 发 表 了 观 点 , A工 程 师 认 为 占 8个 字 节 , B工 程 师认 为 占 9个 字 节 , 你 认 为 哪 个 工 程 师 的 观 点 正 确 ?l 如 果 需 要 对 C/OS-II的 任 务 管 理 数 进 行 扩 充 , 你 认 为应 当 如 何 进 行 。l 请 说 明 C/OS-II的 任 务 就 绪 表 和 事 件 控 制 表 的 异 同 。l 在 C/OS-II环 境 , 当 用 户 建 立 一 个 新 任 务 时 , 至 少 要向 任 务 建 立 函 数 OSTaskCreate()函 数 传 递 哪 几 个 参 数 ?l 创 建 一 个 C/OS-II用 户 新 任 务 时 , 先 创 建 该 任 务 的 私有 堆 栈 , 还 是 先 创 建 该 任 务 的 TCB? l 如 果 解 决 C/OS-II的 优 先 级 反 转 问 题 , 请 你 给 出 一 个解 决 方 案 。 2008年12月15日南京大学计算机系53 第 19讲 结 束l 谢 谢 大 家 !l 欢 迎 各 位 读 者 提 出 宝 贵 的 意 见 和 建 议 !
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


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

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


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