1 / 112

μC/OS-II 程序设计实例

μC/OS-II 程序设计实例. —— 基于 SmartARM2200 平台. 1. 3. 4. 5. 目 录. 工程模板介绍. 数据采集系统. 2. 万年历. uC/OS-II. UART 中间件. I 2 C 中间件. 2. 示例实现. 目录. 工程模板应用 | μC/OS-II 程序设计. 1. 工程模板简介. ARM 文件组. 内核文件组. 1. 5. 模板结构. 头文件组. 主函数. 2. 4. 用户文件组. 3. 头文件组 : 主要是包含头文件和配置信息.

chaz
Download Presentation

μC/OS-II 程序设计实例

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. μC/OS-II程序设计实例 ——基于SmartARM2200平台

  2. 1 3 4 5 目 录 工程模板介绍 数据采集系统 2 万年历 uC/OS-II UART中间件 I2C中间件

  3. 2 示例实现 目录 工程模板应用| μC/OS-II程序设计 1 工程模板简介

  4. ARM文件组 内核文件组 1 5 模板结构 头文件组 主函数 2 4 用户文件组 3 头文件组:主要是包含头文件和配置信息 ARM文件组: 主要是包含操作系统和开发板硬件相关的配置信息 内核文件组:主要是包含UC/OS操作系统源文件 用户文件组:主要包含用户需要配置的.H文件和除主函数外的.C文件 主函数:即用户编写的MAIN.C函数 摸板结构 工程模板应用| μC/OS-II程序设计

  5. 头文件组 工程模板应用| μC/OS-II程序设计 头文件主要包含一些宏定义和文件包含操作.这些文件一般是为了提高摸板的通用性和方便系统移植而定义的.用户在使用时可以根据自己的系统硬件配置和喜好进行修改.在UC/OS工程摸板中主要包含六个头文件,具体描述如下表所示:

  6. ARM文件组 工程模板应用| μC/OS-II程序设计 ARM文件组主要包含UC/OS配置文件和SmartARM2200加载和配置文件.主要包含六个文件,具体描述如下表所示:

  7. 用户文件组 工程模板应用| μC/OS-II程序设计   用户文件组主要包含main.h,main.c和os_cfg.h三个文件.前两个文件有用户自己编写. os_cfg.h文件主要是实现操作系统的配置,用户可以根据实际需要进行裁剪.具体描述如下表所示:

  8. 拷贝工程摸板 摸板使用步骤 工程模板应用| μC/OS-II程序设计 使用摸板建立新工程分为四个步骤.主要操作如下: 用户将光盘中的“ARM EXECUTABLE IMAGE FOR UCOS LPC2200“文件拷贝到”..\ARM\ADSV1.2\STATIONERY

  9. 摸板使用步骤 工程模板应用| μC/OS-II程序设计 将光盘摸板文件放进Stationary目录:

  10. 拷贝工程摸板 打开ADS,选择”新建”操作 摸板使用步骤 工程模板应用| μC/OS-II程序设计 使用摸板建立新工程分为四个步骤.主要操作如下: 用户将光盘中的“ARM EXECUTABLE IMAGE FOR UCOS LPC2200 “文件拷贝到”..\ARM\ADSV1.2\STATIONERY 在ADS1.2的集成开发环境中选择”新建”操作

  11. 摸板使用步骤 工程模板应用| μC/OS-II程序设计 在ADS集成环境中选择”新建”操作:

  12. 拷贝工程摸板 打开ADS,选择”新建”操作 选择工程摸板建立新工程 摸板使用步骤 工程模板应用| μC/OS-II程序设计 使用摸板建立新工程分为四个步骤.主要操作如下: 用户将光盘中的“ARM EXECUTABLE IMAGE FOR UCOS LPC2200 “文件拷贝到”..\ARM\ADSV1.2\STATIONERY 在ADS1.2的集成开发环境中选择”新建”操作 选择工程摸板建立新工程

  13. 摸板使用步骤 工程模板应用| μC/OS-II程序设计 选择工程摸板建立新工程:

  14. 拷贝工程摸板 打开ADS,选择”新建”操作 选择工程摸板建立新工程 按照摸板生成新工程 摸板使用步骤 工程模板应用| μC/OS-II程序设计 使用摸板建立新工程分为四个步骤.主要操作如下: 用户将光盘中的“ARM EXECUTABLE IMAGE FOR UCOS LPC2200 “文件拷贝到”..\ARM\ADSV1.2\STATIONERY 在ADS1.2的集成开发环境中选择”新建”操作 选择工程摸板建立新工程 按照摸板生成一个新工程

  15. 摸板使用步骤 工程模板应用| μC/OS-II程序设计 按照摸板生成新工程:

  16. 1 工程模板简介 2 示例实现 目录 工程模板应用| μC/OS-II程序设计

  17. 硬件连接 工程模板应用| μC/OS-II程序设计 摸板应用示例是蜂鸣器控制,在SMARTARM2200工控平台上进行测试,硬件连接如下图所示: 跳线连接 蜂鸣器控制电路

  18. 任务创建 工程模板应用| μC/OS-II程序设计   在应用示例中,先按上面的流程建立工程TEST1.MCP.再在工程的主函数MAIN中建立任务TASK0,TASK0任务是初始化硬件.接着创立TASK1,TASK2,TASK3.TASK1,TASK2只是将任务挂起延时.TASK3任务实现蜂鸣器控制.任务之间联系如下图所示:

  19. TASK1 TASK3 TASK2 TASK0 任务创建 工程模板应用| μC/OS-II程序设计 MAIN 函数

  20. 任务流程 工程模板应用| μC/OS-II程序设计 示例中主函数和个任务的控制流程如下:

  21. ISR任务示例 工程模板应用| μC/OS-II程序设计 中断示例中先按上面流程创建新工程Timer1_int.mcp,再在主函数中创建任务TASK0和TASKBEEP,TASK0完成硬件初始化.TASKBEEP完成蜂鸣器信号量等待和操作.程序流程如下:

  22. ISR任务示例 工程模板应用| μC/OS-II程序设计 下面以示例来说明如何现实ISR与任务间同步。假设定时器1中断服务程序发送信号量,任务完成了信号量的创建并在接收到信号量后让蜂鸣器响一声。处理流程如下。

  23. 更新中断优先级 清除中断标志 发送信号量 ISR任务示例 工程模板应用| μC/OS-II程序设计 中断服务程序ISR示例代码如下。 void Timer1_Exception (void) { T1IR = 0x01; VICVectAddr = 0; OSSemPost (sem); }

  24. 创建信号量 初始化工作 蜂鸣器响 延时60个节拍 蜂鸣器灭 延时60个节拍 进入临界段 退出临界段 等待信号量 ISR任务示例 工程模板应用| μC/OS-II程序设计 蜂鸣器报警任务示例代码如下。 void TaskBeep (void *pdata) { …… sem = OSSemCreate(0); OS_ENTER_CRITICAL(); /* 初始化VIC(省略) */ /* 初始化定时器1(省略) */ /* 目标板初始化TargeInit() (省略) */ OS_EXIT_CRITICAL(); while (1) { OSSemPend(sem, 0, &err); IO0CLR = BEEP; OSTimeDly(60); IO0SET = BEEP; OSTimeDly(60); } } 读者补出相应的代码

  25. 1 4 5 目 录 工程模板介绍 数据采集系统 2 万年历 3 uC/OS-II UART中间件 I2C中间件

  26. 2 ISR和任务之间的同步和通信 目录 数据采集系统| μC/OS-II程序设计 1 任务间的同步与通信

  27. ② ③ 任务的同步 任务的同步和通信| 数据采集系统 一、任务的同步 1、什么是任务的同步? 在实时操作系统中,任务和任务之间往往需要协调运行,这种协调关系,在日常生活里也是屡见不鲜的。为了说明这种协调关系,请看下面的演示: 司机 售票员 启动车辆 关 车 门 由该演示可知,任务的同步,就是任务的协调运行,你一步、我一步地紧密协作: 行 驶 售 票 停 车 开 车 门 ① 、启动车辆,踩油门就可以了;但实际上,你必须等车门关上了才可以启动车辆。 ② 、行驶和售票的行动互不干涉、彼此独立,此时不存在协调关系。 ③ 、开车门只要按下开关就可以了;但实际上,你得等司机停车才能开车门,否则就出事故了。

  28. 在理解了“任务同步”的概念后,再来看看μC/OS-II实时操作系统所提供的用于实现“任务同步”的通信手段。在理解了“任务同步”的概念后,再来看看μC/OS-II实时操作系统所提供的用于实现“任务同步”的通信手段。 任务的同步 任务的同步和通信| 数据采集系统 一、任务的同步 1、什么是任务的同步? 在实时操作系统中,任务和任务之间往往需要协调运行,这种协调关系,在日常生活里也是屡见不鲜的。为了说明这种协调关系,请看下面的演示: 任务A 任务B ① 、任务B运行一段时间后,发送信息让任务A启动,与此同时,任务B挂起。 ② 、任务A获得允许运行的信息后,立即启动;完成操作后,发送信息告知任务B,任务B可以启动并执行接下来的操作。

  29. 任务的同步 任务的同步和通信| 数据采集系统 2、任务同步的通信手段 μC/OS-II实时操作系统提供了以下通信手段,使某一任务得以向另一任务发送同步信息,从而实现任务同步: • 计数信号量; • 事件标志组; • 消息邮箱; • 消息队列。 灵活运用这些通信手段,可满足不同的任务同步需求,请看表1:

  30. 任务的同步 任务的同步和通信| 数据采集系统 2、任务同步的通信手段 表1 不同同步手段的应用场合 由上表可知,任务和任务之间不仅可以发送用于协调步伐的“同步”信息,也可以发送有效的数据,实现真正意义的通信。

  31. 任务的通信 任务的同步和通信| 数据采集系统 二、任务的通信 在嵌入式系统的运行过程中,任务与任务之间必然伴随着数据通信,这种通信可以采用多种方法来实现: • 全局变量; • 内存数据块; • 消息邮箱; • 消息队列。 灵活运用这些不同的方法,可满足不同的数据通信要求,请看表2:

  32. 任务的通信 任务的同步和通信| 数据采集系统 二、任务的通信 表2 不同通信手段的应用场合 介绍完行为同步和通信的基本知识后,接下来再给出实例,以加深理解。

  33. 操作示例 任务的同步和通信| 数据采集系统 三、操作示例 1、示例简介 利用LPC2000系列ARM相关开发板上已有的资源,可以构筑一个小型的数据采集系统,如下所示: 串口线 上位机 LPC2000系列ARM相关开发板 示例的内容是:按下开发板上的按键、令ARM芯片启动A/D采样;采样结束后,再将采样结果通过串口线发送到上位机显示。

  34. 操作示例 任务的同步和通信| 数据采集系统 2、示例里的任务 在本示例内,划分出了3个用户任务,相关信息如表3所示。 表3 任务信息 接下来,将以动画的形式演示该数据采集系统的运转流程,并在每一个运行阶段加以讲解。

  35. 操作示例 任务的同步和通信| 数据采集系统 2、示例演示 (1) 初始阶段 按键任务 • 三个任务的状态: • 按键任务在不停扫描按键,查询是否有键按下; • 采样任务完成一部分工作后挂起,等待按键任务发出启动信号; • 显示任务挂起,等待采样任务发出启动信号和显示数据。 不断扫描 采样任务 挂起 显示任务 挂起

  36. 操作示例 任务的同步和通信| 数据采集系统 2、示例演示 (2) 启动采样 按键任务 按键任务扫描到有按键按下,发出信号量。 扫描到按键 采样任务得到了信号量从而就绪,然后在接下来的任务调度中进入运行状态,开始采样。 采样任务 挂起 开始采样 显示任务 显示任务仍在等待采样任务发送启动信号和采样结果。 挂起

  37. 操作示例 任务的同步和通信| 数据采集系统 2、示例演示 (3) 发送采样结果 按键任务 按键任务继续扫描按键。(此时若扫描到按键,将在下一轮处理)。 不断扫描 采样任务 采样完毕,可以发送采样结果了,于是发送消息到消息邮箱。 开始采样 采样结束 启动显示 显示任务获得了消息进入就绪状态,然后在任务调度下获得运行机会,将收到的采样结果发送到上位机。 显示任务 将采样结果 发送至上位机

  38. 操作示例 任务的同步和通信| 数据采集系统 2、示例演示 (1) 初始阶段 按键任务 回到了初始阶段。进行下一轮的数据采集、发送工作。 不断扫描 采样任务 挂起 显示任务 挂起

  39. 1 任务间的同步与通信 2 ISR和任务之间的同步和通信 目录 任务的同步和通信| 数据采集系统

  40. 关联任务 同步信号发送 ISR 同步信号发送 任务 任务 同步信号发送 ISR和任务的同步 任务的同步和通信| 数据采集系统 一、ISR和任务的同步 ISR主要被用于响应异步事件,在ISR里可触发其它任务的运行,实现ISR和任务的同步。 ISR和任务间的同步关系比较简单,它们之间的关系是单向的。任务间的同步就不同了,可是单向亦可是双向的。 • 、可以看出,ISR始终是控制者,关联任务只能被控制; • 、可以看出,任务之间的同步里,某一任务可以是被控制者也可以是控制者。

  41. ISR和任务的通信 任务的同步和通信| 数据采集系统 二、ISR和任务的通信 ISR和任务间的通信手段包括信号型和数据型,两种手段的应用场合是不同的,请看表4。 表4 信号型通信和数据型通信的对比 为了进一步说明,接下来请看下面的实例演示。

  42. 串口线 上位机 ISR和任务的通信 任务的同步和通信| 数据采集系统 三、实例演示 1、示例简介 利用LPC2000系列ARM相关开发板上已有的资源,可以构筑一个小型的数据采集系统,如下所示: LPC2000系列ARM相关开发板 示例的内容是:示例进行时,蜂鸣器一直在间歇鸣叫;用户按下板上的按键、触发外部中断;外部中断再触发“读取ADC然后将采样结果发送至上位机”的操作。

  43. 操作示例 任务的同步和通信| 数据采集系统 2、示例里的任务 在本示例内,划分出了2个用户任务,相关信息如表5所示。 表5 任务信息 接下来,将以动画的形式演示该实例的运转流程,并在每一个运行阶段加以讲解。

  44. 蜂鸣器任务 • 、系统初始化 ① 系统初始化时,先运行“采样和显示”任务。 ③ • 、蜂鸣器任务启动 • 、等待信号量有效 由于此时信号量无效,采样和发送任务挂起,CPU控制权交给其它就绪任务。 此时优先级最高的就绪任务是蜂鸣器任务,于是蜂鸣器任务启动。 操作示例 任务的同步和通信| 数据采集系统 3、示例演示 这是外部中断未发生时,用户任务执行的情况: 采样和显示任务 • 初始化硬件 • 等待信号量 蜂鸣器间歇鸣叫

  45. 发生外部中断 蜂鸣器任务 • 、发生外部中断 外部中断发生。蜂鸣器任务被中断。 • 、ISR发送信号量 • 、回复到初始状态 发送完采样结果后,继续等待下一个外部中断,蜂鸣器任务又开始运行。 “采样和显示任务”获得了信号量,立即进入就绪状态,由于该任务优先级最高,于是立即运行。 操作示例 任务的同步和通信| 数据采集系统 3、示例演示 这是外部中断发生时,用户任务执行的情况: 采样和显示任务 • 初始化硬件 ③ • 等待信号量 蜂鸣器间歇鸣叫 • 发送采样结果

  46. 发生外部中断 蜂鸣器任务 • 、发生外部中断 外部中断发生。蜂鸣器任务被中断。 • 、ISR发送信号量 • 、回复到初始状态 发送完采样结果后,继续等待下一个外部中断,蜂鸣器任务又开始运行。 “采样和显示任务”获得了信号量,立即进入就绪状态,由于该任务优先级最高,于是立即运行。 操作示例 任务的同步和通信| 数据采集系统 3、示例演示 这是外部中断发生时,用户任务执行的情况: 采样和显示任务 • 初始化硬件 ③ • 等待信号量 蜂鸣器间歇鸣叫 • 发送采样结果

  47. 1 3 4 5 目 录 工程模板介绍 数据采集系统 2 万年历 uC/OS-II UART中间件 I2C中间件

  48. 2 示例的实现 目录 万年历| μC/OS-II程序设计 1 示例简介

  49. 示例简介 万年历| μC/OS-II程序设计 一、示例简介 在这里,通过一个万年历的设计,来说明μC/OS-II下程序设计的方法: 利用LPC2000系列ARM相关的开发板和EasyARM串口调试软件(自带一个万年历界面)来实现一个具有以下功能的万年历: 接下来,是一个动画演示。它直接表现了最终的万年历效果,这有助于让读者迅速理解示例须达成的任务。 • 实时显示:不断显示当前的年月日星期、时间信息; • 时间设置:可设置万年历的时钟和年月日信息(星期信息自动调整),完成设置后,可更新显示。 • 、开始重设年份; • 、2007年被重设为3007年,此时星期自动完成了调整; EasyARM串口调试软件自带的万年历界面 • 、设置完后,恢复显示。

  50. 1 示例简介 2 示例的实现 目录 万年历| μC/OS-II程序设计

More Related