精华内容
下载资源
问答
  • osal
    2020-08-21 11:47:48

    OSAL事件触发机制----定时器触发
    CC2540 OSAL 学习其中原理,以及 给任务 添加 一个事件(定时发送串口消息)
    OSAL调度机制
    OSAL之消息管理
    OSAL的消息机制触发事件流程
    OSAL中的消息与事件
    ZStack OSAL的事件(event)与消息(message)——part1
    有关zstack的osal机制的理解
    CC254x的软件基于OSAL架构

    zigbee开源协议栈中的OSAL操作系统移植到12单片机(很值得一看)


    OSAL使用


    OSAL并非是一个实时的操作系统,只是在循环的执行所有任务。如果一个任务占用时间太久会影响另一个任务的实时性。
    每一个任务可以使用的事件标识总共有16个(一个16位的变量),其中一个被系统占用为SYS_EVENT_MSG(消息事件,为事件标志最高位),其他15位的事件功能根据需要自己定义
    1. 需要在时基中断为1ms的定时器中调用osal_update_timers();
    2. 可通过三种方法调用执行的函数,osal_set_event,osal_msg_send,osal_start_reload_timer
    osal_set_event:触发自定义事件,osal_set_event(Modbus_TaskID,MODBUS_REC_FINISH_EVENT);
    osal_msg_send:由于OSAL用户只能自己定义15个事件,想要多定义事件及给对应的任务发送消息,需要使用osal_msg_send,触发的事件是SYS_EVENT_MSG
    osal_start_reload_timer:定时触发指定任务的自定义事件
    //osal操作系统初始化
    osal_init_system();
    //添加任务
    osal_add_Task(Display_Task_Init,Display_Task_EventProcess,0);
    osal_add_Task(NULL,ReadRTC_Task_EventProcess,1);
    osal_add_Task(NULL,Modbus_Task_EventProcess,1);
    osal_add_Task(NULL,WaveProcess_Task_EventProcess,1);

    //添加的任务统一进行初始化
    osal_Task_init();
    //设置初始任务事件,上电就需要自动轮询的任务事件可在此添加
    osal_start_reload_timer( Display_TaskID, DISP_TIMER_EVENT, 500);

    //设置初始任务事件,上电就需要自动轮询的任务事件可在此添加
    osal_start_reload_timer( ReadRTC_TaskID, RTC_TIMER_EVENT, 500);
    //启动osal系统,不会再返回
    osal_start_system();

    uint8_t SendKeyCode( uint8_t keyCode)
     {
       osal_sys_msg_t *msgPtr;
       msgPtr = (osal_sys_msg_t *)osal_msg_allocate( sizeof(osal_sys_msg_t) );
       if ( msgPtr )
       {
         msgPtr->hdr.event = KEY_PRESSED_EVENT;
         msgPtr->Data_t = keyCode;
         osal_msg_send( Display_TaskID, (uint8 *)msgPtr );
         return ( TRUE );
       }
       else
       {return ( FALSE );}
       return ( TRUE );
     }
    
    //对应的任务必须按照如下定义的ID顺序移入osal_add_Task,否则TaskID和任务不对应
      enum TASK_ID
      {
        Display_TaskID=0,
        ReadRTC_TaskID,
        Modbus_TaskID,
        WaveProcess_TaskID,
      };
     
       enum WAVE_TASK_EVENT
      {
        WAVE_READY_EVENT=(1<<0),
      };
      
      enum MODBUS_TASK_EVENT
      {
        MODBUS_REC_FINISH_EVENT=(1<<0),
      };
      
      enum KEY_TASK_EVENT
      {
        KEY_PRESSED_EVENT=(1<<0),
      };
      
      enum DISP_TASK_EVENT
      {
        DISP_TIMER_EVENT=(1<<0),
        DISP_COUNT_EVENT=(1<<1),
      };
      
      enum RTC_TASK_EVENT
      {
        RTC_TIMER_EVENT=(1<<0),
      };
      
    typedef struct
    {
      void   *next;
      uint16 len;
      uint8  dest_id;
    } osal_msg_hdr_t;
    
    typedef struct
    {
      uint8  event;
      uint8  status;
    } osal_event_hdr_t;
    
    typedef struct
    {
      osal_event_hdr_t hdr;
      uint8  state;  
      uint8  keys; 
    } keyChange_t;
    
     uint8 OnBoard_SendKeys( uint8 keys, uint8 state )
     {
    	 keyChange_t *msgPtr;
     	if ( registeredKeysTaskID != NO_TASK_ID )
      	{
         	// Send the address to the task
         	msgPtr = (keyChange_t *)osal_msg_allocate( sizeof(keyChange_t) );
        	if ( msgPtr )
         	{
         		msgPtr->hdr.event = KEY_CHANGE;
          		msgPtr->state = state;
           		msgPtr->keys = keys;
           		osal_msg_send( registeredKeysTaskID, (uint8 *)msgPtr );
        	}
    		return ( SUCCESS );
     	}  
     	else
        	return ( FAILURE );
       }
    
    //串口通信任务事件处理
    uint16 Serial_Task_EventProcess(uint8 task_id,uint16 task_event)
    {
    	if ( task_event & SYS_EVENT_MSG )   	//判断系统消息事件
      	{
      		osal_sys_msg_t *MSGpkt;    			//定义一个指向接受系统消息结构体的指针
    	    //从消息队列获取消息  
    	    MSGpkt = (osal_sys_msg_t *)osal_msg_receive( task_id ); 
        
    	    while ( MSGpkt )
    	    {
    	      	switch ( MSGpkt->hdr.event )  	//判断消息事件
    	      	{
    	          	case OSAL_PRINTF:
    	          		break;
    
    	        	default:
    	          		break;
    	      	}
    
    	      	// Release the memory
    	      	osal_msg_deallocate( (uint8 *)MSGpkt );
    
    	      	// Next  获取下一个消息
    	      	MSGpkt = (osal_sys_msg_t *)osal_msg_receive( task_id );
    	    }
    
        	// return unprocessed events
        	return (task_event ^ SYS_EVENT_MSG);
      	}
      	
    	if(task_event & PRINTF_STR)
    	{
    		static int dir = 1;
    
    		if(dir)
    		{
    			dir = 0;
    			LED0 = 0;
    		}
    		else
    		{
    			dir = 1;
    			LED0 = 1;
    		}
    		
    		Usart_Printf(COM1,"Linux GCC STM32F103 printf !\r\n");
    	  	
    		return task_event ^ PRINTF_STR;
    	}
    
    	return 0;
    }
    

    OSAL纯净版程序下载

    https://download.csdn.net/download/lyrain2009/12837122


    更多相关内容
  • 5、OSAL定时器采用16位计数器的定时器1,单位计时:4us,累计1ms更新OSAL_Clock和OSAL_Timer; 6、增加睡眠时间更新,使OSAL_Clock和OSAL_Timer不丢失时间; 7、在IO中断服务程序立即启动HAL_PWRMGR_HOLD_EVENT事件...
  • 该存储库包含NASA的操作系统抽象层(OSAL),它是核心飞行系统的框架组件。 这是位于cFS任务树的osal子目录中的abstractio API和相关框架的集合。 核心飞行系统捆绑在,其中包括构建和执行说明。 可以在上查看自动...
  • CC2540模块 调试OSAL操作系统-按键源码
  • OSAL OSAL 是一个简单的任务操作系统。 源代码来自 TI 的 Z-Stack,一个 ZigBee 堆栈。 而且它是开源的,所以我想把它从 Z-Stack 中分离出来,以便在一些简单的 MCU 中使用。
  • zigbee协议栈OSAL分析

    2021-01-06 03:03:05
    本文从源程序出发,分享本人学习zigbee协议栈的一些理解,介绍zigbee协议栈OSAL任务调度及用户自定义任务的调度处理过程。为了便于抓住本质,理清思路,本文剔除一些无关部分。 程序的入口是ZMain.c文件下的main(),...
  • MiniOS-OSAL.zip

    2020-09-06 20:17:16
    OSAL移植到其他单片机上,这里仅提供移植参考,学习,OSAL所有权归Texas Instruments所有。 可用于ROM大小为8k,RAM大小为1k以上的单片机,包含以下功能: 内核时钟为1ms,即每1毫秒更新1次系统时间; 可创建多...
  • OSAL纯净版.rar

    2020-09-11 11:08:54
    OSAL为:Operating System Abstraction Layer,即操作系统抽象层,支持多任务运行,它并不是一个传统意义上的操作系统,但是实现了部分类似操作系统的功能,OSAL纯净版,只包含核心功能,只需移植定时器便可使用
  • OSAL学习笔记

    2017-09-18 21:04:18
    OSAL学习笔记OSAL学习笔记OSAL学习笔记OSAL学习笔记OSAL学习笔记OSAL学习笔记OSAL学习笔记OSAL学习笔记OSAL学习笔记OSAL学习笔记OSAL学习笔记OSAL学习笔记OSAL学习笔记OSAL学习笔记OSAL学习笔记OSAL学习笔记OSAL学习...
  • 文章目录什么是 OSAL?源码安装Linux 上OSAL的移植STM32上OSAL的移植关键点测试代码结语附件 什么是 OSAL? 今天同学忽然问我有没有搞过OSAL,忽然间一头雾水,于是在搜索引擎上找到了答案,发现这是一个十分实用的...
  • OS Abstraction Layer API SWRA194 Version 1.10 OS Abstraction Layer Application Programming Interface Document Number: SWRA194 Texas Instruments, Inc. San Diego, California USA i Copyright 2005-2009 T
  • OSAL这样一个事件驱动的多任务的资源分配机制做了一个简明扼要的介绍,希望对大家有所帮助。OSAL(OperatingSystemAbstractionLayer),翻译为“操作系统抽象层”。 OSAL就是一种支持多任务运行的系统资源分配机制。...
  • Z-stack OSAL堆内存管理

    2018-10-17 13:23:21
    Z-stack OSAL堆内存管理。Z-Stack是TI公司为zigbee开发的一套操作系统
  • 首先上图,跟着图中的函数顺序来感受Z-Stack的工作流程: 原创文章 1获赞 1访问量 85 关注 私信 展开阅读全文 作者:晨少hc
  • osal操作系统详解

    2019-04-30 18:09:35
    osal操作系统详解,对于刚学操作系统的小白很有帮助,他详细得介绍了这个系统,同时感谢他的提供
  • gcc-stm32-osal:ARM-GCC下STM32F1工程模板,运行OSAL操作系统
  • OSAL_Ver_1.0.1_TI_

    2019-12-27 11:44:33
    参照TI 的OSAL操作系统修改的一个精简版OS,移除了内存管理和链表,采用数组的方式,适合做小型的事件型系统开发,要的拿去! Filename: OSAL.c Description: This API allows the software components in the
  • CC2540模块 OSAL操作系统-温湿度传感器调试 型号-dht11
  • NRF51822芯片 使用自带PWM调台灯的亮度
  • TI官方的OSAL API说明书,清晰文字版
  • OSAL-API中文版.pdf

    2020-01-03 10:42:18
    TI OSAL API手册中文版. cc2530协议栈API说明, TI MAC Zstack可以做参考.
  • OSAL深入浅出的小了解

    2015-01-21 10:52:12
    浅谈OSAL的组网部分,对一下示例程序进行了自己认识的描述,希望对大家有用
  • stm32lf0xx_osal_111.rar

    2019-05-12 20:36:59
    ti osal移植到stm32 主要就是 系统节拍处理和内存管理处理,m0内核内存管理必须是4字节对齐。
  • osal系统说明文档

    2018-10-11 15:35:18
    PDF文档,主要是描述osal的主要API作用,流程等,还包括了驱动部分API一些介绍
  • OSALAPI_F8W-2003-0002_应用接口.pdf
  • OSAL的框架完整的移植到了STC8系列单片机,已测试可以正常运行,目前只包含了timer和uart外设驱动,其他外设驱动可以自己添加

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,455
精华内容 2,182
关键字:

osal