解读OSAL流程
来源:互联网 发布:java 射击游戏 编辑:程序博客网 时间:2024/06/06 17:09
平时我们在写单片机程序时候基本是main方法里边对外设初始化,然后在while(1)里边写任务函数。OSAL也是这样的流程。我们首先找到main方法:
int main(void){ /* Initialize hardware */ HAL_BOARD_INIT(); // Initialize board I/O InitBoard( OB_COLD ); /* Initialze the HAL driver */ HalDriverInit(); /* Initialize NV system */ osal_snv_init(); /* Initialize LL */ /* Initialize the operating system */ osal_init_system(); /* Enable interrupts */ HAL_ENABLE_INTERRUPTS(); // Final board initialization InitBoard( OB_READY ); #if defined ( POWER_SAVING ) osal_pwrmgr_device( PWRMGR_BATTERY ); #endif /* Start OSAL */ osal_start_system(); // No Return from here return 0;}```对于芯片和外设的初始化我们可以不用理会。对于OSAL启动流程我们只需要理解osal_init_system( void )和osal_start_system();这两个函数就可以了。osal_init_system简单理解为设置要在while(1)里边运行的task,osal_start_system就是while(1).在osal_init_system中osalInitTasks这个函数就是设置任务ID,ID1对应task1,ID2对应task2.在osal_run_system里边不断查询需要处理的任务。=====================================================```do { if (tasksEvents[idx]) // Task is highest priority that is ready. { break; } } while (++idx < tasksCnt);
不断查询需要处理的任务。在这里我简化写一个类型方法。
unsigned char TaskArr[5];while(1){ if(TaskArr[0] == TaskFlag) { TaskArr[0] = 0; Task1(); } else if(TaskArr[1] == TaskFlag) { TaskArr[1] = 0; Task2(); } //....}
======================================
因此,我们可以认为OSAL如下面所示:
“`
while(1)
{
if(events )
{
SimpleBLEPeripheral_ProcessEvent( task_id,events )
}
}
对于怎么进入这个函数,基本是由osal_msg_send和osal_start_timerEx设置Task 的events标志位决定。osla就是这样的运行机制,简化了也没什么难理解的。
其他更深入的理解,需要自己去百度。“`
阅读全文
0 0
- 解读OSAL流程
- OSAL osal_msg_send解读
- OSAL主循环流程
- ZigBee-OSAL初始化流程
- ZigBee OSAL流程分析
- OSAL处理接收数据包流程
- ZigBee-OSAL主循环流程
- 浅析CC2540 OSAL工作流程
- OSAL(操作系统抽象层)API解读
- OSAL
- OSAL
- OSAL处理来自AF的数据包流程
- ZSTACK协议栈--OSAL主循环流程
- Z-stack之OSAL初始化流程
- OSAL处理来自AF的数据包流程
- OSAL串口接收发送数据流程简介
- OSAL处理来自AF的数据包流程
- Z-Stack/ble OSAL 中OSAL按键事件的触发流程分析
- SpannableString与SpannableStringBuilder
- Vue 2.0 的数据依赖原理解析
- 《奇思妙想:15位计算机天才及其重大发现》【PDF】下载
- js实现json数组根据中文字段排序
- Modbus-RTU之C++封装类
- 解读OSAL流程
- hadoop+spark:error :file not found问题
- k8s1.4.3安装实践记录(1)-etcd、docker、flannel安装配置
- Hadoop与Hadoop生态圈
- 使用POI操作Excel修改模板(批量替换excel中的数据)
- jQuery倒计时进度条
- 简化手臂®皮层®m0 +基于物联网嵌入式设计与CircuitPython开发板---凯利讯半导体
- shell 网络发post 小程序
- 【Linux】Wireshark在Linux系统下的安装及使用