Zigbee使用小结

一、关于OSAL系统

由于使用freeRTOS操作系统导致的观念不同,对OSAL有一定的误解。RTOS是基于任务调度机制的多任务操作系统,任务优先级高的任务会剥夺任务优先级低的CPU使用权。
而OSAL是基于事件轮询机制,通过不断的轮询事件是否发生,发生则执行相应的处理事件处理程序。
所以一般事件会对应一个处理函数。
任务开启流程:

osal_init_system();									//初始化操作系统
		> osalInitTasks();							//初始化任务,分配任务taskID
				> SampleApp_Init( taskID );			//初始化APP相应任务
osal_start_system();			//执行操作系统
		> osal_run_system();	//轮询事件

任务切换过程:

void osal_run_system( void )
{
	uint8 idx = 0;

	osalTimeUpdate();
	Hal_ProcessPoll();

	do {
		if (tasksEvents[idx]) //是否有事件发生
		{
			break;
		}
	} while (++idx < tasksCnt);

	if (idx < tasksCnt)
	{
	    uint16 events;
	    halIntState_t intState;
	
	    HAL_ENTER_CRITICAL_SECTION(intState);
	    events = tasksEvents[idx];		//tasksEvents存放任务事件列表
	    tasksEvents[idx] = 0;  //清除此任务的事件
	    HAL_EXIT_CRITICAL_SECTION(intState);
	
	    activeTaskID = idx;
	    events = (tasksArr[idx])( idx, events );	//tasksArr存放了事件对应的处理函数
	    activeTaskID = TASK_NO_TASK;
	
	    HAL_ENTER_CRITICAL_SECTION(intState);
	    tasksEvents[idx] |= events;  // Add back unprocessed events to the current task.
	    HAL_EXIT_CRITICAL_SECTION(intState);
	}
#if defined( POWER_SAVING )
	else  // Complete pass through all task events with no activity?
	{
		osal_pwrmgr_powerconserve();  // Put the processor/system into sleep
	}
#endif

  /* Yield in case cooperative scheduling is being used. */
#if defined (configUSE_PREEMPTION) && (configUSE_PREEMPTION == 0)
	{
		osal_task_yield();
	}
#endif
}

二、关于硬件驱动

TI的库支持了LED,KEY,LCD。但是自己的硬件的话可能会发生引脚冲突,比如TI定义的LED引脚在自己的硬件上连接了KEY。默认这些功能是开启的,可以在hal_board_cfg.h中失能。然后根据需要重新使能,修改。
硬件初始化流程:

InitBoard( OB_COLD );	//失能中断,检测RESER引脚
HalDriverInit();		//硬件IO初始化
InitBoard( OB_READY );	//初始化板级任务,可能涉及到任务ID,应放到osal_init_system()后执行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值