嵌入式常用算法:异步架构-延时为例

在单片机裸机开发中,通常延时功能函数是以同步阻塞方式实现,的确在很多设备驱动中需要同步阻塞来匹配硬件时序,但这只能存在于硬件驱动层,应用层开发时使用阻塞延时便大大降低了系统实时性和安全性,不可预测就是一块心病。为此我分享出一段由朋友:流星原创的event_delay异步延时方案。使用此库便可以给N个函数增加指定延时时间,异步非阻塞方式,数据结构简单,合作式调度方式。另:此代码已在很多实体项目中使用,稳定安全。

以下为C文件:

#include "main.h"
#include "event_delay.h"

EventDelay_TypeDef Event[EVENT_MAX_NUM];
u8 event_num = 0;
/*添加功能和延时*/
void Event_Add(event_type event,void *point,u16 time)
{
	if(event_num < EVENT_MAX_NUM)
	{
		Event[event_num].event = event;
		Event[event_num].DelayTime = time;
		Event[event_num].Time = time;
		Event[event_num].Point = point;
		event_num++;
	}
}
/*定时调用*/
void Event_TimeTick(void)
{
	static u8 event_num_now = 0;
	Event[event_num_now].Time--;
	if(Event[event_num_now].Time == 0)
	{
		Event[event_num_now].Run++;
		event_num_now++;
		if(event_num_now >= event_num)
			event_num_now = 0;
		Event[event_num_now].Time = Event[event_num_now].DelayTime;
	}
}
/*主循环运行*/
void Event_Run(void)
{
	for(u16 i = 0;i < event_num;i++){
		if(Event[i].Run){
			Event[i].Run --;
			Event[i].event(Event[i].Point);
		}
	}
}
以下为H文件:
#ifndef __EVEN_DELAY__H__
#define __EVEN_DELAY__H__

	#include "main.h"
	
	#define EVENT_MAX_NUM 10
	
	typedef	void (*event_type)(void *);
	typedef struct
	{
		event_type event;
		void *Point;
		u16 DelayTime;
		u16 Time;
		u16 Run;
	}EventDelay_TypeDef;
	
	extern void Event_Add(event_type event,void *point,u16 time);
	extern void Event_TimeTick(void);
	extern void Event_Run(void);

#endif

这个库源码也就几十行,数据结构不复杂,傻瓜式的代码逻辑,非常好移植到自己的单片机工程中。当然这也是嵌入式中比较常用的调度方式,我在个人开发的多线程核中也使用了类似的调度器,目前已经实现了多线程机制,也已成功做出了增删任务的API,在实现了CPU资源回收机制后就将源码放出。届时还烦请广大网友实际测试反馈BUG。

感恩,感谢...   ... 

使用过程中出现任何BUG请联系我本人QQ:951253606,说明bug现象以及重现过程。

寻求MCU产品开发请联系我本人QQ:951253606。

  • 5
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 嵌入式实时操作系统(RTOS)是一种专门为嵌入式系统设计的操作系统,它具有实时性、可靠性、高效性等特点。RT-Thread是一款开源的嵌入式实时操作系统,它采用了轻量级的内核设计,支持多种处理器架构和多种外设驱动,具有灵活的可扩展性和易用性。RT-Thread的设计和实现涉及到内核、任务调度、内存管理、设备驱动、文件系统等多个方面,需要深入理解嵌入式系统的原理和技术。 ### 回答2: 嵌入式实时操作系统(Real-Time Operating System,RTOS)是指专门为嵌入式系统设计的操作系统,它具有小巧、高效、可靠等特点。其中,rt-thread是一个轻量级、开源、可裁剪的实时操作系统内核,其设计简单、可靠性高、实时性好、灵活性强、可移植性强等特点,被广泛应用于各种嵌入式系统中。 rt-thread的设计理念是以线程为中心,支持多线程应用程序的同时,同时支持时钟中断、定时器、信号量、互斥锁、信号、消息队列等机制,使其能够更好地适应实时应用需求。rt-thread采用分层设计,底层由硬件驱动层和操作系统内核层组成,上层可根据应用需求进行定制。rt-thread内核采用模块化设计,不同的模块可以互相独立运行,也可以进行组合和交错。 rt-thread还支持多种调试和优化技术,如GDB、OCD等调试器,并集成了实时性能分析、内存泄漏检测等优化工具。除此之外,rt-thread还提供了工具链、文档、示例程序等支持,方便用户集成和使用。 总的来说,rt-thread是一个高度可定制化、可裁剪、高效、灵活的嵌入式实时操作系统内核,能够满足不同实时应用场景的需求,其应用范围涵盖了智能家居、工业控制、医疗设备、智能交通、消费电子等领域。 ### 回答3: 嵌入式实时操作系统(RTOS)是一种用于嵌入式系统的操作系统,其主要目标是提供实时性、可靠性和高效性。RT-Thread是一种轻量级、开源、可裁剪的RTOS,旨在满足小型嵌入式设备的要求。它支持多任务、软件定时器、线程同步和通信机制,并提供了多种驱动程序和应用程序框架。RT-Thread有着许多优秀的特性,例如快速启动、低占用率、模块化、兼容性、扩展性、可裁剪和易用性等。 RT-Thread的设计基于三大核心要素:线程、事件和信号量。通过这些要素,RT-Thread实现了多任务调度和同步机制。此外,RT-Thread还提供了丰富的IPC机制,包括邮箱、消息队列和信号量等,以便实现线程之间的通信和同步。 RT-Thread的高可裁剪性也是其最大的特点之一。用户可以根据实际需求进行系统裁剪和优化,从而获得最小、最高效的系统。这种裁剪性基于RT-Thread内核代码的高度模块化,为用户提供了方便的系统配置和扩展接口。 RT-Thread的驱动程序也是其核心之一。RT-Thread提供了许多通用设备驱动,例如串口、SPI、I2C、USB、以太网等,方便用户快速实现硬件和软件的整合。 RT-Thread的开发也非常方便,支持多种开发环境和编译器,包括Keil、IAR和GCC等,使开发人员能够在各种平台和系统中进行开发工作。 总之,RT-Thread是一种优秀的嵌入式实时操作系统,具有方便的裁剪性、高效的多任务调度和同步机制、丰富的IPC机制和通用设备驱动程序等特点,非常适合小型嵌入式设备的开发使用。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值