uCOSII程序设计示例_第1页
uCOSII程序设计示例_第2页
uCOSII程序设计示例_第3页
uCOSII程序设计示例_第4页
uCOSII程序设计示例_第5页
已阅读5页,还剩113页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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

2、OS-II程序设计程序设计头文件组头文件组文件名功能Config.h总头文件,摸板要求INCLUDES.H总头文件,UC/OS要求os_cpu.h操作系统移植头文件Target.h目标头文件LPC22XX.h定义处理器相关寄存器VIC_Control.h中断向量控制机制头文件 头文件主要包含一些宏定义和文件包含操作这些文件一般是为了提高摸板的通用性和方便系统移植而定义的用户在使用时可以根据自己的系统硬件配置和喜好进行修改在工程摸板中主要包含六个头文件,具体描述如下表所示:工程模板应用工程模板应用| C/OS-II程序设计程序设计ARM文件组文件组 ARM文件组主要包含配置文件和iniARM22

3、00加载和配置文件主要包含六个文件,具体描述如下表所示:文件名功能Os_cpu_a.hUC/OS移植硬件配置文件Os_cpu_c.hUC/OS移植软件配置文件Inchip.scf分散加载文件Startup.sLPC2200启动代码VIC_Control.s中断向量控制机制文件Target.cLPC2200目标板的硬件配置文件工程模板应用工程模板应用| C/OS-II程序设计程序设计用户文件组用户文件组用户文件组主要包含main.h,main.c和os_cfg.h三个文件前两个文件有用户自己编写 os_cfg.h文件主要是实现操作系统的配置,用户可以根据实际需要进行裁剪具体描述如下表所示:参数名

4、功能描述OS_MAX_EVENTS最大事件控制块个数OS_MAX_MEM_PART系统中内存块最大数目OS_MAX_QS消息队列中最大队列块的数目OS_MAX_TASKS用户程序中可以使用的最多任务数目OS_LOWEST_PRIO系统中要使用的最低任务的优先级OS_TICKS_PER_SEC调用时间延时函数的频率工程模板应用工程模板应用| C/OS-II程序设计程序设计摸板使用步骤摸板使用步骤拷贝工程摸板拷贝工程摸板使用摸板建立新工程分为四个步骤主要操作如下:用户将光盘中的“ARM EXECUTABLE IMAGE FOR UCOS LPC2200“文件拷贝到”.ARMADSV1.2STATI

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

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

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

8、骤按照摸板生成新工程: 工程模板简介1 2示例实现工程模板应用工程模板应用| C/OS-II程序设计程序设计目录目录工程模板应用工程模板应用| C/OS-II程序设计程序设计硬件连接硬件连接 摸板应用示例是蜂鸣器控制,硬件连接如下图所示:蜂鸣器控制电路跳线连接工程模板应用工程模板应用| C/OS-II程序设计程序设计任务创建任务创建在应用示例中,先按上面的流程建立工程TEST1.MCP.再在工程的主函数MAIN中建立任务TASK0,TASK0任务是初始化硬件.接着创立TASK1,TASK2,TASK3.TASK1,TASK2只是将任务挂起延时.TASK3任务实现蜂鸣器控制.任务之间联系如下图所

9、示:工程模板应用工程模板应用| C/OS-II程序设计程序设计任务创建任务创建工程模板应用工程模板应用| C/OS-II程序设计程序设计任务流程任务流程示例中主函数和个任务的控制流程如下:工程模板应用工程模板应用| C/OS-II程序设计程序设计ISR任务示例任务示例中断示例中先按上面流程创建新工程Timer1_int.mcp,再在主函数中创建任务TASK0和TASKBEEP,TASK0完成硬件初始化.TASKBEEP完成蜂鸣器信号量等待和操作.程序流程如下: 下面以示例来说明如何现实ISR与任务间同步。假设定时器1中断服务程序发送信号量,任务完成了信号量的创建并在接收到信号量后让蜂鸣器响一声

10、。处理流程如下。工程模板应用工程模板应用| C/OS-II程序设计程序设计ISR任务示例任务示例void Timer1_Exception (void) T1IR = 0 x01; VICVectAddr = 0; OSSemPost (sem);更新中断优先级清除中断标志发送信号量 中断服务程序ISR示例代码如下。工程模板应用工程模板应用| C/OS-II程序设计程序设计ISR任务示例任务示例void TaskBeep (void *pdata) sem = OSSemCreate(0); OS_ENTER_CRITICAL(); /* 初始化VIC(省略) */ /* 初始化定时器1(省略

11、) */ /* 目标板初始化TargeInit() (省略) */ OS_EXIT_CRITICAL(); while (1) OSSemPend(sem, 0, &err); IO0CLR = BEEP; OSTimeDly(60); IO0SET = BEEP; OSTimeDly(60); 创建信号量初始化工作蜂鸣器响延时60个节拍蜂鸣器灭延时60个节拍进入临界段退出临界段等待信号量读者补出相应的代码 蜂鸣器报警任务示例代码如下。工程模板应用工程模板应用| C/OS-II程序设计程序设计ISR任务示例任务示例21工程模板介绍工程模板介绍万年历万年历 数据采集系统数据采集系统UAR

12、T中间件中间件 I2C中间件中间件345uC/OS-II目目 录录 ISR和任务之间的同步和通信2 任务间的同步与通信1数据采集系统数据采集系统| C/OS-II程序设计程序设计目录目录一、任务的同步 在实时操作系统中,任务和任务之间往往需要协调运行,这种协调关系,在日常生活里也是屡见不鲜的。为了说明这种协调关系,请看下面的演示:司机司机售票员售票员启动车辆关 车 门行 驶售 票 1、什么是任务的同步? 停 车开 车 门 、启动车辆,踩油门就可以了;但实际上,你必须等车门关上了才可以启动车辆。启动车辆,踩油门就可以了;但实际上,你必须等车门关上了才可以启动车辆。 、行驶和售票的行动互不干涉、彼

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

14、务、任务B运行一段时间后,发送信息让运行一段时间后,发送信息让任务任务A A启动启动,与此同时,与此同时,任务任务B B挂起挂起。 、任务任务A获得允许运行的信息后,立即启动;完成操作后,发送信息告知获得允许运行的信息后,立即启动;完成操作后,发送信息告知任务任务B,任务,任务B可以启动并执行接下来的操作。可以启动并执行接下来的操作。 在理解了“任务同步”的概念后,再来看看C/OS-II实时操作系统所提供的用于实现“任务同步”的通信手段。任务的同步和通信任务的同步和通信| 数据采集系统数据采集系统任务的同步任务的同步 C/OS-II实时操作系统提供了以下通信手段,使某一任务得以向另一任务发送同

15、步信息,从而实现任务同步: 2、任务同步的通信手段 计数信号量; 事件标志组; 消息邮箱; 消息队列。 灵活运用这些通信手段,可满足不同的任务同步需求,请看表1:任务的同步和通信任务的同步和通信| 数据采集系统数据采集系统任务的同步任务的同步 2、任务同步的通信手段任务同步的通信手段应用场合计数信号量两个任务的同步事件标志组多个任务和一个任务间的同步消息邮箱 两个任务不但要同步;彼此间还要传输一份数据消息队列两个任务间不但要同步;彼此间还要传输大量数据表表1 不同同步手段的应用场合不同同步手段的应用场合 由上表可知,任务和任务之间不仅可以发送用于协调步伐的“同步”信息,也可以发送有效的数据,实

16、现真正意义的通信。任务的同步和通信任务的同步和通信| 数据采集系统数据采集系统任务的同步任务的同步 在嵌入式系统的运行过程中,任务与任务之间必然伴随着数据通信,这种通信可以采用多种方法来实现: 二、任务的通信 全局变量; 内存数据块; 消息邮箱; 消息队列。 灵活运用这些不同的方法,可满足不同的数据通信要求,请看表2:任务的同步和通信任务的同步和通信| 数据采集系统数据采集系统任务的通信任务的通信任务同步的通信手段应用场合全局变量无行为同步要求时的少量数据通信。但需注意资源同步内存数据块无行为同步要求时的大量数据通信。但需注意资源同步消息邮箱有行为同步要求时的少量数据通信消息队列有行为同步要求

17、时的大量数据通信表表2 不同通信手段的应用场合不同通信手段的应用场合 二、任务的通信 介绍完行为同步和通信的基本知识后,接下来再给出实例,以加深理解。任务的同步和通信任务的同步和通信| 数据采集系统数据采集系统任务的通信任务的通信 三、操作示例 1、示例简介 利用LPC2000系列ARM相关开发板上已有的资源,可以构筑一个小型的数据采集系统,如下所示:LPC2000系列系列ARM相关开发板相关开发板串口线串口线上位机上位机 示例的内容是:按下开发板上的按键、令ARM芯片启动A/D采样;采样结束后,再将采样结果通过串口线发送到上位机显示。任务的同步和通信任务的同步和通信| 数据采集系统数据采集系

18、统操作示例操作示例 2、示例里的任务 在本示例内,划分出了3个用户任务,相关信息如表3所示。任务的名称任务的优先级按键任务高采样任务中显示任务低表表3 任务信息任务信息 接下来,将以动画的形式演示该数据采集系统的运转流程,并在每一个运行阶段加以讲解。任务的同步和通信任务的同步和通信| 数据采集系统数据采集系统操作示例操作示例 2、示例演示(1) 初始阶段三个任务的状态: 按键任务在不停扫描按键,查询是否有键按下; 采样任务完成一部分工作后挂起,等待按键任务发出启动信号; 显示任务挂起,等待采样任务发出启动信号和显示数据。按键任务按键任务采样任务采样任务显示任务显示任务挂起挂起挂起挂起不断扫描不

19、断扫描任务的同步和通信任务的同步和通信| 数据采集系统数据采集系统操作示例操作示例 2、示例演示(2) 启动采样 按键任务扫描到有按键按下,发出信号量。按键任务按键任务采样任务采样任务显示任务显示任务挂起挂起挂起挂起扫描到按键扫描到按键 采样任务得到了信号量从而就绪,然后在接下来的任务调度中进入运行状态,开始采样。开始采样开始采样 显示任务仍在等待采样任务发送启动信号和采样结果。任务的同步和通信任务的同步和通信| 数据采集系统数据采集系统操作示例操作示例 2、示例演示(3) 发送采样结果 按键任务继续扫描按键。(此时若扫描到按键,将在下一轮处理)。采样任务采样任务显示任务显示任务 采样完毕,可

20、以发送采样结果了,于是发送消息到消息邮箱。 显示任务获得了消息进入就绪状态,然后在任务调度下获得运行机会,将收到的采样结果发送到上位机。按键任务按键任务不断扫描不断扫描采样结束采样结束启动显示启动显示开始采样开始采样将采样结果将采样结果发送至上位机发送至上位机任务的同步和通信任务的同步和通信| 数据采集系统数据采集系统操作示例操作示例 2、示例演示(1) 初始阶段 回到了初始阶段。进行下一轮的数据采集、发送工作。按键任务按键任务采样任务采样任务显示任务显示任务挂起挂起挂起挂起不断扫描不断扫描任务的同步和通信任务的同步和通信| 数据采集系统数据采集系统操作示例操作示例 ISR和任务之间的同步和通

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

22、段包括信号型和数据型,两种手段的应用场合是不同的,请看表4。二、ISR和任务的通信通信方式特 点信号型ISR发送信号量,指示事件已发生,触发关联任务的启动,具体工作由关联任务完成数据型ISR内部还要进行信息采集,然后通过消息邮箱或消息队列,将数据信息发送给关联任务,并启动关联任务来处理后续数据表表4 信号型通信和数据型通信的对比信号型通信和数据型通信的对比 为了进一步说明,接下来请看下面的实例演示。任务的同步和通信任务的同步和通信| 数据采集系统数据采集系统ISR和任务的通信和任务的通信三、实例演示 1、示例简介 示例的内容是:示例进行时,蜂鸣器一直在间歇鸣叫;用户按下板上的按键、触发外部中断

23、;外部中断再触发“读取ADC然后将采样结果发送至上位机”的操作。串口线串口线上位机上位机 利用LPC2000系列ARM相关开发板上已有的资源,可以构筑一个小型的数据采集系统,如下所示:LPC2000系列系列ARM相关开发板相关开发板任务的同步和通信任务的同步和通信| 数据采集系统数据采集系统ISR和任务的通信和任务的通信 2、示例里的任务 在本示例内,划分出了2个用户任务,相关信息如表5所示。任务的名称任务的优先级蜂鸣任务中采样和显示任务高表表5 任务信任务信息息 接下来,将以动画的形式演示该实例的运转流程,并在每一个运行阶段加以讲解。任务的同步和通信任务的同步和通信| 数据采集系统数据采集系

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

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

26、蜂鸣器任务又开始运行。蜂鸣器间歇鸣叫发生外部中断 发送采样结果任务的同步和通信任务的同步和通信| 数据采集系统数据采集系统操作示例操作示例21工程模板介绍工程模板介绍万年历万年历 数据采集系统数据采集系统UART中间件中间件 I2C中间件中间件345uC/OS-II目目 录录 示例简介1 2示例的实现万年历万年历| C/OS-II程序设计程序设计目录目录一、示例简介 在这里,通过一个万年历的设计,来说明C/OS-II下程序设计的方法: 利用LPC2000系列ARM相关的开发板和EasyARM串口调试软件(自带一个万年历界面)来实现一个具有以下功能的万年历: 实时显示:不断显示当前的年月日星期、

27、时间信息; 时间设置:可设置万年历的时钟和年月日信息(星期信息自动调整),完成设置后,可更新显示。、开始重设年份;、设置完后,恢复显示。、2007年被重设为3007年,此时星期自动完成了调整;EasyARM串口串口调试软件自带的调试软件自带的万年历界面万年历界面接下来,是一个动画演接下来,是一个动画演示。它直接表现了最终示。它直接表现了最终的万年历效果,这有助的万年历效果,这有助于让读者迅速理解示例于让读者迅速理解示例须达成的任务。须达成的任务。万年历万年历| C/OS-II程序设计程序设计示例简介示例简介 示例简介1 2示例的实现万年历万年历| C/OS-II程序设计程序设计目录目录二、示例

28、的实现1、功能划分控 制显示时间信息产生时间信息从功能来划分,可把示例分成3个模块,请看下图: “控 制”通过操作开发板上的按键,实现:l“实时显示”和“时间设置”功能的切换;l“时间设置”。万年历万年历| C/OS-II程序设计程序设计示例的实现示例的实现二、示例的实现1、功能划分控 制显示时间信息产生时间信息从功能来划分,可把示例分成3个模块,请看下图:“产生时间信息”操作开发板上LPC2000系列ARM芯片自带的RTC,即可产生时间信息,用于填充万年历。万年历万年历| C/OS-II程序设计程序设计示例的实现示例的实现二、示例的实现1、功能划分控 制显示时间信息产生时间信息从功能来划分,

29、可把示例分成3个模块,请看下图:“显示时间”通过板上的UART,按照协议将信息发送至EasyARM串口调试软件,软件上的万年历即可显示出此时的时间信息。不断发送实时时间信息,则万年历会不断显示。万年历万年历| C/OS-II程序设计程序设计示例的实现示例的实现二、示例的实现2、任务设计 根据上面划分出的功能模块实现需求,任务可以划分为: 设置任务; 键盘任务; 显示任务。 周期性地执行。完成目标板和RTC的初始化操作,之后创建“设置任务”和“显示任务”,随后周期性地查询键盘输入,当有键按下,则进行按键处理。万年历万年历| C/OS-II程序设计程序设计示例的实现示例的实现二、示例的实现2、任务

30、设计 根据上面划分出的功能模块实现需求,任务可以划分为: 设置任务; 键盘任务; 显示任务。 周期性地执行。完成目标板和RTC的初始化操作,之后创建“设置任务”和“显示任务”,随后周期性地查询键盘输入,当有键按下,则进行按键处理。 接收到按键消息后才运行。启动后,根据收到的按键信息设置时间,并闪烁显示待设置位,未收到消息则挂起。万年历万年历| C/OS-II程序设计程序设计示例的实现示例的实现二、示例的实现2、任务设计 根据上面划分出的功能模块实现需求,任务可以划分为: 设置任务; 键盘任务; 显示任务。 周期性地执行。完成目标板和RTC的初始化操作,之后创建“设置任务”和“显示任务”,随后周

31、期性地查询键盘输入,当有键按下,则进行按键处理。 接收到按键消息后才运行。启动后,根据收到的按键信息设置时间,并闪烁显示待设置位,未收到消息则挂起。 每过1秒,由RTC秒中断触发该任务的运行。该任务启动后便将当前的RTC数据通过UART发送至上位机的万年历界面进行实时显示。万年历万年历| C/OS-II程序设计程序设计示例的实现示例的实现键盘任务3、任务运行演示 为了说明三个任务的状态转换过程,设计了两个动画演示。演示分为两部分。第一部分,是按键未按下时,三大任务的状态转换过程按键未按下时,三大任务的状态转换过程:初始化目标板和RTC; 0%100%万年历万年历| C/OS-II程序设计程序设

32、计示例的实现示例的实现3、任务运行演示 为了说明三个任务的状态转换过程,设计了两个动画演示。演示分为两部分。第一部分,是按键未按下时,三大任务的状态转换过程:是按键未按下时,三大任务的状态转换过程:键盘任务初始化目标板和RTC;创建设置任务和显示任务;键盘任务设置任务显示任务万年历万年历| C/OS-II程序设计程序设计示例的实现示例的实现3、任务运行演示 为了说明三个任务的状态转换过程,设计了两个动画演示。演示分为两部分。第一部分,是按键未按下时,三大任务的状态转换过程:是按键未按下时,三大任务的状态转换过程:键盘任务初始化目标板和RTC;创建设置任务和显示任务;键盘任务设置任务显示任务查询

33、是否有按键输入; 在查询按键输入期间,设置任务和显示任务都可以得到运行机会,完成部分工作。、初始化部分变量后,检查是否收到键盘消息。、等待信号量,挂起。万年历万年历| C/OS-II程序设计程序设计示例的实现示例的实现3、任务运行演示 为了说明三个任务的状态转换过程,设计了两个动画演示。演示分为两部分。第一部分,是按键未按下时,三大任务的状态转换过程:是按键未按下时,三大任务的状态转换过程:键盘任务初始化目标板和RTC;创建设置任务和显示任务;键盘任务设置任务显示任务查询是否有按键输入;、初始化部分变量后,检查是否收到键盘消息。、等待信号量,挂起。发生秒中断在中断里发送信号量给显示任务,显示任

34、务就绪,开始发送时间信息到上位机,更新万年历的显示。、发送时间信息。万年历万年历| C/OS-II程序设计程序设计示例的实现示例的实现3、任务运行演示 按键按下时,任务的转换过程按键按下时,任务的转换过程如下所示:键盘任务初始化目标板和RTC;创建设置任务和显示任务;键盘任务设置任务显示任务查询是否有按键输入;、初始化部分变量后,检查是否收到键盘消息。、等待信号量,挂起。查到有按键输入,发送按键消息。万年历万年历| C/OS-II程序设计程序设计示例的实现示例的实现3、任务运行演示 按键按下时,任务的转换过程如下按键按下时,任务的转换过程如下所示:键盘任务初始化目标板和RTC;创建设置任务和显

35、示任务;键盘任务设置任务显示任务查询是否有按键输入;、初始化部分变量后,检查是否收到键盘消息。、等待信号量,挂起。查到有按键输入,发送按键消息。、根据键盘消息进行处理。 令被设置位闪烁显示;同时,根据消息内的设置信息设定新的时间。之后,在秒中断发生时,更新的时间信息被发送到上位机。发生秒中断、发送时间信息。万年历万年历| C/OS-II程序设计程序设计示例的实现示例的实现21工程模板介绍工程模板介绍万年历万年历 数据采集系统数据采集系统UART中间件中间件 I2C中间件中间件345uC/OS-II目目 录录2 简介1 3中间件机理 使用导论UART中间件中间件| C/OS-II程序设计程序设计

36、目录目录 一、UART中间件简介 嵌入式应用中,UART十分常见,大多数CPU都集成了UART。LPC2000系列ARM UART中间件是UART驱动软件包,用户可用它在C/OS-II下轻松、便利地完成LPC2000系列ARM上的UART操作而无须了解UART寄存器的细节。 关于UART中间件带来的操作便利性,请看下面的一个演示,该演示展示了在“使用UART中间件”和“不使用UART中间件”这两种情况下,用户的开发流程,借此展示使用UART中间件编程带来的好处。请点击UART中间件中间件| C/OS-II程序设计程序设计UART中间件简介中间件简介开始开始翻阅用户手册,阅读UART的寄存器结构

37、确定本次操作所需涉及的寄存器阅读涉及寄存器的位功能说明写程序,试探程序思路是否可靠、正确反复调试、摸索获得初始版本,完成操作(以后可能还会出问题)结束浏览PPT,迅速理解概况和基本知识阅读中间件的API说明,了解API的用法用中间件API编程直接调试程序,无须考虑底层细节结束自己编写自己编写UART驱动驱动直接用中间件编程直接用中间件编程UART中间件中间件| C/OS-II程序设计程序设计UART中间件简介中间件简介小结: 由上面的演示可以看出,使用UART中间件,有助于大大加快开发速度,提高编程效率,同时令用户程序更稳定可靠、更容易调试。UART中间件中间件| C/OS-II程序设计程序设

38、计UART中间件简介中间件简介UART中间件结构: 按照API功能的不同,UART中间件的结构可显示如下:队列操作队列操作UART读写读写UARTUART配置配置UART中断入口中断入口UART中间件中间件功能类型函数名称函数功能UART配置相关uartInitUART初始化uartSetMode/uartGetState配置UART的参数/读取UART当前的配置信息UART中间件中间件| C/OS-II程序设计程序设计UART中间件简介中间件简介队列操作队列操作UART读写读写UART中断入口中断入口UART中间件结构: 按照API功能的不同,UART中间件的结构可显示如下:UARTUART

39、配置配置UART中间件中间件功能类型函数名称函数功能 UART 队列操作相关uartFifoStatus获取UART的队列状态uartFifoFlush清空UART的发送或接收队列UART中间件中间件| C/OS-II程序设计程序设计UART中间件简介中间件简介队列操作队列操作UART读写读写UART中断入口中断入口UART中间件结构: 按照API功能的不同,UART中间件的结构可显示如下:UARTUART配置配置UART中间件中间件功能类型函数名称函数功能 UART 读写操作相关uartRead从串口设备读数据uartWrite/uartDirectWrite向串口设备写数据/不经软件缓冲区

40、而直接向串口设备写数据UART中间件中间件| C/OS-II程序设计程序设计UART中间件简介中间件简介队列操作队列操作UART读写读写UART中断入口中断入口UART中间件结构: 按照API功能的不同,UART中间件的结构可显示如下:UARTUART设置设置UART中间件中间件功能类型函数名称函数功能UART 中断入口函数uart0Isr/uart1Isr/uart2Isr/uart3Isr各个UART的中断入口UART中间件中间件| C/OS-II程序设计程序设计UART中间件简介中间件简介小结: UART中间件有四大功能模块,由一共12个API组成。详细的API信息,请用户阅读随机赠送的

41、参考书及光盘。UART中间件中间件| C/OS-II程序设计程序设计UART中间件简介中间件简介2 简介1 3中间件机理 使用导论UART中间件中间件| C/OS-II程序设计程序设计目录目录二、使用导论 在使用UART中间件进行编程前,有必要知道一些预备知识。本小节即对这些预备知识进行介绍: 装载装载UART中间件须知中间件须知 UART中间件的重要使用细节几则中间件的重要使用细节几则 UART中间件的一般应用流程中间件的一般应用流程 UART中间件的文件组成; UART中间件所需的其它软件包; 队列在UART中间件里的应用; UART中间件API的参数输入; 使用UART中间件配置UART

42、中断; UART中间件的应用流程。UART中间件中间件| C/OS-II程序设计程序设计使用导论使用导论 UART中间件的文件组成UART中间件是由2个文件组成,请看下表:驱动文件说明uart.c该文件包含所有的UART API源码,用户请不要修改此文件uart.hUART驱动头文件,用户在此文件里完成对软件/硬件缓冲区的配置和中断服务程序的撰写 在使用UART中间件时,须将这两个文件加入工程,请看下图:UART中间件中间件| C/OS-II程序设计程序设计使用导论使用导论 UART中间件所需的其它软件包 UART中间件要发挥作用,还需要其它软件包的支持,即队列和字符串处理软件包QueueSt

43、ring,请看左下的图示: 为什么需要这个软件包呢? UART中间件用到了队列来收发数据,所以需要队列软件来支持; UART中间件的API参数设置是通过分析用户输入的字符串来实现的,所以需要字符串处理软件。UART中间件中间件| C/OS-II程序设计程序设计使用导论使用导论 UART中间件API的参数输入 在使用UART中间件所包含的部分API时,用户需以字符串形式输入函数的入口参数,参数都包含在字符串里。请看下面的示例:UART0初始化初始化(波特率波特率9600bps、8位数据位、位数据位、1位停止位、无校验,无硬件流位停止位、无校验,无硬件流)char cUartArg = “Baud

44、Rate=9600 DataBits=8 StopBits=1 Parity=0 RtsControl=0”;/* 定义参数字符串 */* 将参数字符串填入API */uartInit (UART0, cUartArg, NULL);、用户根据“=”号前的关键字关键字,在“=”号后填写对应的数值数值;char cUartArg = “BaudRate=9600 DataBits=8 StopBits=1 Parity=0 RtsControl=0”;char cUartArg = “BaudRate=9600 DataBits=8 StopBits=1 Parity=0 RtsControl=

45、0”;UART中间件中间件| C/OS-II程序设计程序设计使用导论使用导论 UART中间件API的参数输入 在使用UART中间件所包含的部分API时,用户需以字符串形式输入函数的入口参数,参数都包含在字符串里。请看下面的示例:UART0初始化初始化(波特率波特率9600bps、8位数据位、位数据位、1位停止位、无校验,无硬件流位停止位、无校验,无硬件流)char cUartArg = “BaudRate=9600 DataBits=8 StopBits=1 Parity=0 RtsControl=0”;/* 定义参数字符串 */* 将参数字符串填入API */uartInit (UART0,

46、 cUartArg, NULL);、用户根据“=”号前的关键字关键字,在“=”号后填写对应的数值数值;char cUartArg = “BaudRate=9600 DataBits=8 StopBits=1 Parity=0 RtsControl=0”;、每一个API的对应关键字关键字都不同,用户需要参考该函数的说明;此外,关键字是大小写敏感的。、所以,小结一下。用户根据函数说明,将填好参数的对应将填好参数的对应参数字符串送入函数参数字符串送入函数即可完成函数的参数配置了。这种配置方法大大提高了函数的兼容性和易用性。uartInit (UART0, cUartArg, NULL);UART中间

47、件中间件| C/OS-II程序设计程序设计使用导论使用导论 队列在UART中间件里的应用 UART中间件可对硬件缓冲区和软件缓冲区进行操作。其中,软件缓冲区是通过中间件里的队列软件包,抽取处理器自身的部分RAM资源进行管理而实现的。 通过队列软件包管理的软件缓冲区,可以大大提高UART通讯的可靠性。当OS有更重要的任务要处理,那么UART须收发的数据可暂时保存在软件缓冲区里,这样就不会造成数据丢失。请看演示:开始处理数据在处理其它事务时,在处理其它事务时,UART仍通过中断将接收的数据转移至缓冲区等待处理仍通过中断将接收的数据转移至缓冲区等待处理UART中间件中间件| C/OS-II程序设计程

48、序设计使用导论使用导论 使用UART中间件配置UART中断 用户可能会需要利用UART中断来完成自己的事务处理。为了满足该需求,UART中间件提供了让用户自行添加中断处理代码的机制。用户只要在uart.h里找到相应的uart中断服务函数,在函数里添加自己的代码即可。 以设置uart0的中断服务函数为例,请看下图: 由于接收中断和发送中断都是使用同一个中断入口,所以用户添加自定义中断处理代码时要注意添加的位置。UART中间件中间件| C/OS-II程序设计程序设计使用导论使用导论 UART中间件的应用流程 现在已将应用UART中间件前的预备知识介绍完毕,这里再给出UART中间件的应用流程,给用户

49、一个该软件包应用的整体印象。开始设置UART管脚配置中断用中间件API编程用户程序结束 使用UART前,须对管脚作设置,这部分的工作并没有包括到中间件里; 由于UART中间件是使用中断来进行收发,所以用户需要初始化UART中断,这部分的工作并没有包括到中间件里;在作好相关的初始化工作后,用户即可直接使用中间件里的API“组装”应用程序了。UART中间件中间件| C/OS-II程序设计程序设计使用导论使用导论2 简介1 3中间件机理 使用导论UART中间件中间件| C/OS-II程序设计程序设计目录目录三、使用机理 为令用户深入理解UART中间件的机制,此处对该中间件的几个重要机制作一阐述: 数

50、据缓冲机制; 数据收发机制; UART中断和UART任务的通讯。三个机制间的关系,可用下图揭示:数据收发数据缓冲UART中断p数据收发是在UART中断里进行的;p待收发的数据都先送到数据缓冲区;这个过程也是在UART中断里完成;UART中间件中间件| C/OS-II程序设计程序设计使用机理使用机理三、使用机理 为令用户深入理解UART中间件的机制,此处对该中间件的几个重要机制作一阐述: 数据缓冲机制; 数据收发机制; UART中断和UART任务的通讯。三个机制间的关系,可用下图揭示: UART中 断p数据收发是在UART中断里进行的;p待收发的数据都先送到数据缓冲区;这个过程也是在UART中断

51、里完成; UART任 务 发送信号量p数据收发和数据缓冲处理都在中断里进行,当这些工作处理完毕后,UART中断须发送信号量通知UART任务,相关工作已完成。UART中间件中间件| C/OS-II程序设计程序设计使用机理使用机理接下来,分别对各机制作一些详细的介绍:1、数据缓冲机制 在UART中间件的使用中,存在着硬件缓冲区和软件缓冲区两个概念。硬件缓冲区是UART自身所配备的FIFO寄存器,而软件缓冲区占用的是处理器的内部RAM资源。 软件缓冲区的存在,构成了对硬件缓冲区的扩展,有助于UART通讯可靠性的进一步提高。LPC2xxx系列系列ARMUART片内RAMFIFO寄存器硬件缓冲区软件缓冲

52、区UART中间件中间件| C/OS-II程序设计程序设计使用机理使用机理1、数据缓冲机制用户也可以根据实际情况对数据缓冲区进行配置: 硬件缓冲区的配置 用户可以配置接收FIFO的触发深度,以配置UART0接收FIFO的触发深度为8为例,请看下面的演示:设置UART0的接收FIFO触发深度为8个字节UART中间件中间件| C/OS-II程序设计程序设计使用机理使用机理1、数据缓冲机制用户也可以根据实际情况对数据缓冲区进行配置: 软件缓冲区的配置 用户还可以配置软件缓冲区内接收/发送缓冲区的大小,以配置UART0为例,请看下面的演示: 直接修改这两个数值的大小即可。但是,软件接收缓冲区的大小建议配

53、置为接收FIFO触发深度的整数倍。UART中间件中间件| C/OS-II程序设计程序设计使用机理使用机理2、数据收发机制 如前所述,在本中间件里,UART的数据收发皆是在UART中断里进行。下面分别介绍一下数据收发的过程: 数据接收 当产生接收中断或超时中断时,CPU通过查询状态寄存器,将所收到的数据全部转移至软件接收缓冲区。请看下图:软件FIFO硬件FIFO 接收数据 产生中断 处理接收数据UART中间件中间件| C/OS-II程序设计程序设计使用机理使用机理 数据发送 先把要发送的所有数据放入软件发送缓冲区,然后再取出其中的第一个数据用查询方式发送,从而触发发送中断;接下来,在发送中断里,

54、软件发送缓冲区内剩余的数据也全部被发送完。相关的过程,请看下图:软件FIFO硬件FIFO 发送完一个字节后产生中断,之后一直发送直至发送完毕 将待发送数据送入软件FIFOUART中间件中间件| C/OS-II程序设计程序设计使用机理使用机理3、UART中断和任务 在UART中间件里,由于对软件缓冲区的操作乃至数据的收发都是在UART中断内完成,所以必然面临着UART中断和任务间的协调问题。 前文已述及,UART中断和UART任务是单向同步的关系,它们俩也各有分工: UART中断负责完成底层的收发操作,并在收发操作完成时,通知UART任务; UART任务则根据UART中断发送的信号量直接调用中间

55、件里的API完成应用操作。所以,用户可以不用了解底层操作细节,而直接完成UART操作。UART中间件中间件| C/OS-II程序设计程序设计使用机理使用机理3、UART中断和任务 以1个最简单的UART收发操作为例,展示UART中断和UART任务间的关系: 相关的初始化工作都已经做好,令UART0收到上位机发来的数据,然后再发送回去。这样一个过程,是怎样的?UART中断UART任务、初始化后,等待信号量;、发生中断;、发出信号量;、获得信号量;、中断返回;、读取收到的数据,然后发送。UART中间件中间件| C/OS-II程序设计程序设计使用机理使用机理21工程模板介绍工程模板介绍万年历万年历

56、数据采集系统数据采集系统UART中间件中间件 I2C中间件中间件345uC/OS-II目目 录录3 使用示例 4 小结2 使用导论I2C中间件中间件| C/OS-II程序设计程序设计目录目录 简介1 I2C 总线 (Inter IC BUS)是Philips推出的芯片间串行传输总线,它以2根连线实现了完善的双向数据传送;并且,由于是通过软件来寻址器件,I2C总线上的器件扩展是灵活而方便的。 本I2C中间件支持C/OS-II操作系统和前后台系统下,对LPC2000系列ARM的I2C总线进行操作。 接下来,对I2C中间件的文件组成作一介绍:驱动文件说 明I2c.cI2C中间件的实体。I2C中间件里

57、各API的源码都在该文件内I2c.hI2C中间件的用户接口I2cPrivate.hI2c.c的私有头文件。也是中间件的又一个用户接口,可在内部选择驱动的应用环境I2cHook.c钩子函数文件。I2C ISR会调用该文件内的函数,而这些函数的函数体可由用户自定I2cHook.hI2cHook.c的头文件。被I2c.c包含,用户无须关注I2C中间件中间件| C/OS-II程序设计程序设计简介简介 I2C 总线 (Inter IC BUS)是Philips推出的芯片间串行传输总线,它以2根连线实现了完善的全双工同步数据传送;并且,由于是通过软件来寻址器件,I2C总线上的器件扩展是灵活而方便的。 本I

58、2C中间件支持C/OS-II操作系统和前后台系统下,对LPC2000系列ARM的I2C总线进行操作。 各头文件的包含关系则如下所示:接下来,介绍I2C中间件包括哪些API:功能函数名称说 明参数设置i2cIniti2cSetMode用户可调用该函数,指定哪一个I2C设备要初始化,并指定该I2C设备的速率。指定I2C设备、初始化其速率;和i2cInit函数不同的是它不影响其它参数读写操作i2cReadi2cGetFlagi2cGetRemainBytesi2cWrite调用该函数,读取指定地址内指定长度的数据到指定缓存调用该函数,读取指定I2C设备的工作状态调用该函数,了解当前I2C设备还有多少

59、字节未发送或接收调用该函数,将指定缓存内指定长度的数据写入指定地址中断服务i2c0IRQi2c1IRQi2c2IRQ I2C0中断服务函数 I2C1中断服务函数 I2C2中断服务函数。这些中断服务函数都不支持中断嵌套由上表可见,I2C中间件共包含三大功能模块、9个API。I2C中间件中间件| C/OS-II程序设计程序设计简介简介接下来,介绍I2C中间件包括哪些API:功能函数名称说 明参数设置i2cIniti2cSetMode用户可调用该函数,指定哪一个I2C设备要初始化,并指定该I2C设备的速率。指定I2C设备、初始化其速率;和i2cInit函数不同的是它不影响其它参数读写操作i2cRea

60、di2cGetFlagi2cGetRemainBytesi2cWrite调用该函数,读取指定地址内指定长度的数据到指定缓存调用该函数,读取指定I2C设备的工作状态调用该函数,将指定缓存内指定长度的数据写入指定地址中断服务i2c0IRQi2c1IRQi2c2IRQ I2C0中断服务函数 I2C1中断服务函数 I2C2中断服务函数由上表可见,I2C中间件共包含三大功能模块、9个API。使用I2C中间件也有一定的流程: I2C中间件只针对I2C部件进行了操作,其它与系统相关的地方如管脚连接和中断向量都需要单独设置。中间件的一般使用流程,如下图所示:开始选择应用环境,设置I2C管脚配置中断用中间件API编程用

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论