uCOS-II任务间通讯和同步实验.
- 格式:ppt
- 大小:539.50 KB
- 文档页数:14
北航ARM9实验报告:实验3uCOS-II实验北航 ARM9 实验报告:实验 3uCOSII 实验一、实验目的本次实验的主要目的是深入了解和掌握 uCOSII 实时操作系统在ARM9 平台上的移植和应用。
通过实际操作,熟悉 uCOSII 的任务管理、内存管理、中断处理等核心机制,提高对实时操作系统的理解和应用能力,为后续的嵌入式系统开发打下坚实的基础。
二、实验环境1、硬件环境:ARM9 开发板、PC 机。
2、软件环境:Keil MDK 集成开发环境、uCOSII 源代码。
三、实验原理uCOSII 是一个可裁剪、可剥夺型的多任务实时内核,具有执行效率高、占用空间小、实时性能优良和可扩展性强等特点。
其基本原理包括任务管理、任务调度、时间管理、内存管理和中断管理等。
任务管理:uCOSII 中的任务是一个独立的执行流,每个任务都有自己的堆栈空间和任务控制块(TCB)。
任务可以处于就绪、运行、等待、挂起等状态。
任务调度:采用基于优先级的抢占式调度算法,始终让优先级最高的就绪任务运行。
时间管理:通过系统时钟节拍来实现任务的延时和定时功能。
内存管理:提供了简单的内存分区管理和内存块管理机制。
中断管理:支持中断嵌套,在中断服务程序中可以进行任务切换。
四、实验步骤1、建立工程在 Keil MDK 中创建一个新的工程,选择对应的 ARM9 芯片型号,并配置相关的编译选项。
2、导入 uCOSII 源代码将 uCOSII 的源代码导入到工程中,并对相关的文件进行配置,如设置任务堆栈大小、系统时钟节拍频率等。
3、编写任务函数根据实验要求,编写多个任务函数,每个任务实现不同的功能。
4、创建任务在主函数中使用 uCOSII 提供的 API 函数创建任务,并设置任务的优先级。
5、启动操作系统调用 uCOSII 的启动函数,使操作系统开始运行,进行任务调度。
6、调试与测试通过单步调试、查看变量值和输出信息等方式,对系统的运行情况进行调试和测试,确保任务的执行符合预期。
嵌入式实时操作系统实验报告1实验名称:uC/OS-II任务间通讯和同步实验姓名:班级:信科10-4班学号:uC/OS-II任务间通讯和同步实验一、实验目的1、掌握uC/OS-II操作系统下使用信号量解决任务之间的同步问题;2、掌握uC/OS-II操作系统下任务间通讯的方法。
二、实验内容1、使用信号量实现任务间同步(Eg2工程)2、使用邮箱实现任务之间的通讯(Eg3工程)三、基础知识uC/OS-II任务之间的通讯与同步方式1、利用宏OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()来关闭中断和打开中断2、利用函数OSSchedLock()和OSSchekUnlock()对µC/OS-II中的任务调度函数上锁和开锁3、信号量4、邮箱5、队列uC/OS-II中使用信号量进行任务之间同步1、通过调用OSSemCreate()建立信号量2、通过调用OSSemPost()函数发送一个信号量3、通过调用OSSemPend()函数等待一个信号量OSSemCreate1、Sem1 = OSSemCreate(0);2、参数为信号量的初始计数值赋值。
该初始值为0到65,535之间的一个数。
3、如果信号量是用来表示一个或者多个事件的发生,那么该信号量的初始值应设为0。
4、如果信号量是用于对共享资源的访问,那么该信号量的初始值应设为1(例如,把它当作二值信号量使用)。
5、如果该信号量是用来表示允许任务访问n个相同的资源,那么该初始值显然应该是n,并把该信号量作为一个可计数的信号量使用。
OSSemPost和OSSemPend1、如果信号量当前是可用的(信号量的计数值大于0),将信号量的计数值减1,然后函数将“无错”错误代码返回给它的调用函数。
如果信号量的计数值为0,而OSSemPend()函数又不是由中断服务子程序调用的,则调用OSSemPend()函数的任务要进入睡眠状态,等待另一个任务(或者中断服务子程序)发出该信号量。
第7章uCOS-II操作系统实验第7章μC/OS-II操作系统实验7.1 实验目的掌握μC/OS-II操作系统的基本使用方法。
掌握μC/OS-II操作系统中时钟节拍的概念和方法。
掌握μC/OS-II操作系统的任务管理的机制。
掌握μC/OS-II操作系统的任务之间进行通讯的方法。
掌握使用标准库函数和μC/OS-II操作系统编写多任务程序的设计方法。
7.2 实验内容(1)设计具有串口通信功能的多任务程序●每个任务在运行时向上位机串口输出“Taskx is running”,x 为任务号;●至少创建除启动任务外的3个任务;●任务1和任务2根据延时运行,运行1次任务1之后运行2次任务2;●任务1运行5次后删除任务1;●任务2运行10次后,通过挂起和恢复方式,任务2执行3次后执行一次任务3。
(2)设计基于邮箱消息的多任务程序●每个任务在运行时向上位机串口输出“Taskx is running”,x 为任务号;●至少创建除启动任务外的2个任务;●任务1根据延时运行;●任务2由串口命令运行(一个任意字符运行一次)或定时器触发运行(邮箱消息方式);●发挥:能够基于ucos-II设计一个显示任务,显示动画。
7.3 实验步骤(1)设计具有串口通信功能的多任务程序。
设计多任务方案、分析功能、设计流程图、确定变量功能和作用域、编写程序、调试代码、记录实验结果。
(2)设计基于邮箱消息的多任务程序。
设计多任务方案、设计通讯方案、分析功能、设计流程图、确定变量功能和作用域、编写程序、调试代码、记录实验结果。
7.4 实验结果附设计方案、流程图、程序的执行结果7.5 实验总结总结实验经验、总结中断服务程序的编写方法、分析程序中的缺陷及改进的方法。
7.6多任务例程Main.c的代码#include#define STACK_SIZE 128static OS_STK MyTask1Stack[STACK_SIZE];static OS_STK MyTask2Stack[STACK_SIZE];static OS_STK StartTaskStack[STACK_SIZE];#define MYTASK1_PRIO 10#define MYTASK2_PRIO 15#define STARTTASK_PRIO 8void MyTask1(void* p_arg);void MyTask2(void* p_arg);void StartTask(void* p_arg);void GPIO_Conf(void);int main(void){OSInit();OSTaskCreate(StartTask,(void*)0,(OS_STK*)&StartTaskStack[S TACK_SIZE-1],STARTTASK_P RIO);OSStart();void GPIO_Conf(){GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF,ENABLE );GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6|GPIO_Pin_7;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOF,&GPIO_InitStructure);GPIO_SetBits(GPIOF,GPIO_Pin_6|GPIO_Pin_7);}void StartTask(void* p_arg){GPIO_Conf();SysTick_Config(SystemCoreClock/1000);OSTaskCreate(MyTask1,(void*)0,(OS_STK*)&MyTask1Stack[STACK_SIZE-1],MYTASK1_PRIO);OSTaskCreate(MyTask2,(void*)0,(OS_STK*)&MyTask2Stack[STACK_SIZE-1],MYTASK2_PRIO);OSTaskDel(OS_PRIO_SELF);}void MyTask1(void* p_arg){while(1){GPIO_WriteBit(GPIOF,GPIO_Pin_6,(BitAction)(1-GPIO_ReadInputDataBit(GPIOF,GPIO_ Pin_6)));OSTimeDly(1000);}void MyTask2(void* p_arg){while(1){GPIO_WriteBit(GPIOF,GPIO_Pin_7,(BitAction)(1-GPIO_ReadInputDataBit(GPIOF,GPIO_ Pin_7)));OSTimeDly(100);}}。
班级学号姓名同组人实验日期室温大气压成绩实验二 UCOS-II任务管理一、实验目的1、掌握UCOS-II中任务管理的函数的应用。
2、掌握UCOS-II在STM32平台下对硬件的控制。
3、掌握开发UCOS-II应用的程序结构。
二、实验步骤1、UCOSII工作原理UCOSII提供系统时钟节拍,实现任务切换和任务延时等功能。
这个时钟节拍由OS_TICKS_PER_SEC(在os_cfg.h中定义)设置,一般我们设置UCOSII的系统时钟节拍为1ms~100ms。
本次实验利用STM32的SYSTICK定时器来提供UCOSII时钟节拍。
UCOSII的任何任务都是通过一个叫任务控制块(TCB)的东西来控制的,每个任务管理块有3个最重要的参数:(1)任务函数指针;(2)任务堆栈指针;(3)任务优先级。
在UCOSII中,使用CPU的时候,优先级高(数值小)的任务比优先级低的任务具有优先使用权,即任务就绪表中总是优先级最高的任务获得CPU使用权,只有高优先级的任务让出CPU使用权(比如延时)时,低优先级的任务才能获得CPU使用权。
UCOSII不支持多个任务优先级相同,也就是每个任务的优先级必须不一样。
任务的调度其实就是CPU 运行环境的切换,即:PC指针、SP指针和寄存器组等内容的存取过程UCOSII的每个任务都是一个死循环。
每个任务都处在以下5种状态之一的状态下,这5种状态是:睡眠状态、就绪状态、运行状态、等待状态(等待某一事件发生)和中断服务状态。
睡眠状态,任务在没有被配备任务控制块或被剥夺了任务控制块时的状态。
就绪状态,系统为任务配备了任务控制块且在任务就绪表中进行了就绪登记,任务已经准备好了,但由于该任务的优先级比正在运行的任务的优先级低,还暂时不能运行,这时任务的状态叫做就绪状态。
运行状态,该任务获得CPU使用权,并正在运行中,此时的任务状态叫做运行状态等待状态,正在运行的任务,需要等待一段时间或需要等待一个事件发生再运行时,该任务就会把CPU的使用权让给别的任务而使任务进入等待状态。