PB03F模块学习之OSAL

[复制链接]
查看208 | 回复3 | 3 天前 | 显示全部楼层 |阅读模式
本帖最后由 sujingliang 于 2024-10-28 16:13 编辑

收集了一些资料,希望对学习PB03F有帮助。
OS abstraction layer(OSAL)主要提供了以下功能:
1. Task registration, initialization, starting
2. Message exchange between tasks
3. Task synchronization
4. Interrupt handling
5. Timers
6. Memory allocation

总结一些常用的:
一、Task Management
OSAL系统中的任务。每个任务都由一个初始化函数以及事件处理功能组成


任务表(tasksArr[]
OSAL使用任务表(const pTaskEventHandlerFn tasksArr[])调用事件处理器每个任务
  1. const pTaskEventHandlerFn tasksArr[] =
  2. {
  3. macEventLoop,
  4. nwk_event_loop,
  5. Hal_ProcessEvent,
  6. MT_ProcessEvent,
  7. APS_event_loop,
  8. ZDApp_event_loop,
  9. };
  10. const uint8 tasksCnt = sizeof( tasksArr ) / sizeof( tasksArr[0] );
复制代码
上面,ZDApp_event_loop就是一个事件处理功能。

osalInitTasks()
OSAL调用osalInitTasks()[应用程序提供的]来初始化任务
  1. void osalInitTasks( void )
  2. {
  3. uint8 taskID = 0;
  4. tasksEvents = (uint16 *)osal_mem_alloc( sizeof( uint16 ) * tasksCnt);
  5. osal_memset( tasksEvents, 0, (sizeof( uint16 ) * tasksCnt));
  6. macTaskInit( taskID++ );
  7. nwk_init( taskID++ );
  8. Hal_Init( taskID++ );
  9. MT_TaskInit( taskID++ );
  10. APS_Init( taskID++ );
  11. ZDApp_Init( taskID++ );
  12. }
复制代码
上面,ZDApp_Init就是一个初始化函数。

osal_init_system( )

uint8 osal_init_system( void )
osal_init_system( )调用osalInitTasks(),在PHY6252 SDK中osal_init_system( )函数内容不可见。
此函数用于初始化OSAL系统。在使用任何其他OSAL之前,必须在启动时调用该函数。

osal_start_system( )
void osal_start_system( void )
此函数是任务系统的主循环函数,无限循环,此函数永远不会返回。它应该调用osal_run_system()。
在PHY6252 SDK中osal_start_system( )、osal_run_system()都不可见。
对于后者只有一个:extern void osal_run_system( void );
二、Timer Management
osal_start_timerEx( )
uint8 osal_start_timerEx( uint8 taskID, uint16 event_id,  uint32 timeout_value );
【调用一次】调用此函数以启动计时器。当定时器到期时,将设置给定的事件位。活动将是为taskID指定的任务设置。此计时器是一次性计时器,这意味着当计时器到期时,它不会重新加载。
osal_start_reload_timer( )
uint8 osal_start_reload_timer( uint8 taskID, uint16 event_id,  uint32 timeout_value );

【循环调用】调用此函数以启动计时器,当计时器到期时,它将设置一个事件位并重新加载超时值自动。将为taskID指定的任务设置事件。

三、Task Synchronization
osal_set_event( )
uint8 osal_set_event(uint8 task_id, uint16 event_flag )
调用此函数为任务task_id,设置事件标志event_flag
task_id是接收事件的任务ID。
event_flag是一个2字节的位图,每个比特指定一个事件。有一个系统事件(SYS_EVENT_MSG:0x8000),其余事件可以自定义。

四、Power Management
osal_pwrmgr_device( )
void osal_pwrmgr_device( uint8 pwrmgr_device );
此功能在通电时或电源要求发生变化时调用,设置设备电源管理器的整体ON/OFF状态。
在int app_main(void)中,有:osal_pwrmgr_device( PWRMGR_BATTERY );
void osal_pwrmgr_device( uint8 pwrmgr_device );
PWRMGR_ALWAYS_ON : there is no power savings and the device is most likely on mains power.
PWRMGR_BATTERY: Turns power savings on.











回复

使用道具 举报

爱笑 | 3 天前 | 显示全部楼层
继续!
用心做好保姆工作
回复

使用道具 举报

iiv | 3 天前 | 显示全部楼层
不要停!!!
回复

使用道具 举报

大猫的鱼 | 前天 11:33 | 显示全部楼层
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则