UCOSIII中的中断和时间管理

序言

本篇文章主要是介绍一下在UCOSIII中是如何使用的中断的,以及UCOSIII中的时间管理

在STM32中使用外部中断

我们先来复习一下在STM32中如何使用外部中断

中断配置

STM32中的中断配置主要分为四个步骤:配置引脚、开启外设所在总线时钟、配置每个引脚对应的外部中断线、配置中断线、配置NVIC

//外部中断初始化函数
void EXTIX_Init(void)
{
	//定义用来配置外部中断线的结构体
	EXTI_InitTypeDef EXTI_InitStructure;
	NVIC_InitTypeDef NVIC_InitStructure;
    
    //配置引脚
    key_init();
	
	//外部中断,需要使能AFIO时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
	
  //GPIOA.15配置	  
  GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource15);
	
	//中断线以及中断初始化配置
  EXTI_InitStructure.EXTI_Line=EXTI_Line15;
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;	
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  EXTI_Init(&EXTI_InitStructure);
	
	//配置NVIC
  NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;			//使能按键所在的外部中断通道
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;	//抢占优先级2, 
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00;					//子优先级1
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;								//使能外部中断通道
  NVIC_Init(&NVIC_InitStructure);
}

编写中断函数

void EXTI15_10_IRQHandler(void)
{
  delay_ms(20);    //消抖			 
  if(KEY1==0)	{
		LED1=~LED1;
   }
	EXTI_ClearITPendingBit(EXTI_Line15);  //清除LINE15线路挂起位
	EXTI_ClearITPendingBit(EXTI_Line13); 
}

在UCOSIII中使用中断

唯一不同的地方在于中断的函数编写,我们将中断函数写成如下形式

void EXTI15_10_IRQHandler(void)
{
	OSIntEnter();
	/**裸机时候的中断服务函数**/
	OSIntExit();
}

时间管理

UCOSIII是抢占式内核,为了防止高优先级的任务一直占用CPU,我们必须给除了空闲任务以外的每一个任务加一个延时函数。下面就来介绍几个延时函数。

OSTimeDly()函数

当我们需要对一个任务进行延时操作的时候就可以使用这个函数,函数原型如下所示:

void OSTimeDly(OS_TICK dly, OS_OPT opt, OS_ERR  *p_err)
  • dly:指定延时的时间长度,这里单位为时间节拍数
  • opt:指定延时的选项
  • p_err:指向调用该函数后返回的错误码

OSTimeDlyHMSM()函数

我们也可以调用OSTimeDlyHMSM函数来更加直观地对任务进行延时,原型如下:

void OSTimeDlyHMSM(CPU_INT16U hours,//需要延时的小时数
                   CPU_INT16U minutes,//需要延时的分钟数
                   CPU_INT16U seconds,//需要延时的秒数
                   CPU_INT32U milli,//需要延时的毫秒数
                   OS_OPT     opt,//选项
                   OS_ERR    *p_err)

OSTimeDlyResume()函数

一个任务可以通过调用这个函数来解救那些因为调用了OSTimeDly()或者OSTimeDlyHMSM()函数而进入等待状态的任务,函数原型如下:

void OSTimeDlyResume(OS_TCB *p_tcb, OS_ERR *p_err)
  • p_tcb:需要恢复的任务的任务控制块
  • p_err:指向调用这个函数后返回的错误码

OSTimeTick()

当时基础中断发生时,时基中断服务函数ISR必须调用这个函数。UCOSIII用这个函数更新时基计数值。OSTimeTick()是UCOSIII的内部函数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: uC/OS-III是一款开源的实时操作系统内核,它提供了高效、稳定、可靠和可扩展的多任务处理机制,是嵌入式系统开发常用的实时操作系统。作为一个开源软件,uC/OS-III源码是开放的,可以被用户自由下载、查看、使用和修改。 uC/OS-III源码的核心是一个功能丰富的内核,它实现了多任务处理、同步与互斥、时钟管理中断处理、信号量、消息队列、事件标志和定时器等功能。同时还提供了一些实用的扩展模块,如文件系统、TCP/IP网络协议栈、USB驱动等。用户可以根据自己的需求选择适合自己的内核和模块,进行二次开发和应用。 使用uC/OS-III源码需要具备一定的嵌入式系统开发经验和相关技术,如裸机开发、汇编语言、C语言、硬件设计和调试等。同时还需要具备深入理解uC/OS-III内核和模块的能力,以便在使用和修改源码时不出错。 总之,uC/OS-III源码是一个非常有价值的开源软件,它可以为嵌入式系统开发者提供高效、稳定和可靠的多任务处理解决方案。如果你是一个嵌入式系统开发者,建议你在使用之前先仔细研究并了解其使用方法和相关技术,以便更好地发挥其功能和优势。 ### 回答2: uCOS III是一款功能强大、可靠性高的实时操作系统,该操作系统源码可以被允许使用、修改和分发,以满足不同用户的需求。uCOS III由Micrium开发,已经成为嵌入式系统领域使用最广泛的实时操作系统之一。 uCOS III源码的使用需要有一定的嵌入式系统相关知识。该源码包含了各种各样的调度器、中断处理、内存管理、通信协议、设备驱动等模块,用户可以根据需求灵活选择所需要的模块进行嵌入式系统的开发。 使用uCOS III源码的好处主要体现在两个方面:一是可以大大提高嵌入式系统的可靠性和稳定性,因为uCOS III是为实时应用而设计的,能够确保系统的实时性和稳定性;二是开发效率高,由于uCOS III提供了完善的函数库和各种现成的模块,可以缩短开发周期,提高工作效率。 当然,使用uCOS III源码也存在着风险,因为uCOS III是商业操作系统,开发者需要在使用或修改时遵循相应的使用协议,并且需要对修改后的系统进行严格的测试和验证,以确保系统的稳定性和可靠性。 综上所述,uCOS III源码在嵌入式系统领域具有重要的作用,但使用时需要注意开发者本身的技术水平和遵守协议。 ### 回答3: uCos III是一种实时操作系统,它的源代码是一个由Micrium提供的可下载软件包。这个软件包包含源代码、文档和示例程序。 uCos III作为一种实时操作系统,提供了许多可编程的功能和特性,例如任务管理中断管理时间管理、内存管理和通信管理等。这些功能都是通过源代码实现的,因此可以根据特定应用的需求进行定制和修改。 uCos III的源码使用ANSI C编写,可以在多种平台上使用,也可以在各种现硬件和嵌入式系统上使用。因此,无论是开发嵌入式系统还是桌面应用程序,都可以使用uCos III源代码。 与其他实时操作系统相比,uCos III源码有许多优点。它具有高可靠性、高可移植性和高效率等特点。此外,它还提供了广泛的可编程功能,使得可以定制和修改系统以满足特定应用的需求。 总体来说,uCos III源码是一个十分有用的工具,它为开发实时操作系统提供了各种功能和特性。它也为开发嵌入式系统提供了便利,可帮助您更好地优化和管理您的系统。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值