SOEM对线程的创建和定时器相关封装成osal静态库,osal目录下有各个平台的相关代码,我只使用在linux,所以只关注linux下的实现

本目录下的osal.h对应的函数声明

/** Licensed under the GNU General Public License version 2 with exceptions. See* LICENSE file in the project root for full license information*/#ifndef _osal_
#define _osal_#ifdef __cplusplus
extern "C"
{
#endif#include "osal_defs.h"
#include <stdint.h>/* General types */
#ifndef TRUE
#define TRUE                1
#endif
#ifndef FALSE
#define FALSE               0
#endif
typedef uint8_t             boolean;
typedef int8_t              int8;
typedef int16_t             int16;
typedef int32_t             int32;
typedef uint8_t             uint8;
typedef uint16_t            uint16;
typedef uint32_t            uint32;
typedef int64_t             int64;
typedef uint64_t            uint64;
typedef float               float32;
typedef double              float64;typedef struct
{uint32 sec;     /*< Seconds elapsed since the Epoch (Jan 1, 1970) */uint32 usec;    /*< Microseconds elapsed since last second boundary */
} ec_timet;typedef struct osal_timer
{ec_timet stop_time;
} osal_timert;void osal_timer_start(osal_timert * self, uint32 timeout_us);
boolean osal_timer_is_expired(osal_timert * self);
int osal_usleep(uint32 usec);
ec_timet osal_current_time(void);
void osal_time_diff(ec_timet *start, ec_timet *end, ec_timet *diff);
int osal_thread_create(void *thandle, int stacksize, void *func, void *param);
int osal_thread_create_rt(void *thandle, int stacksize, void *func, void *param);#ifdef __cplusplus
}
#endif#endif

主要是对常用类型进行别名的定义;

定义了ec_timet这个结构体用于表示时刻

定义了osal_timert这个结构体表示定期器,内部主要包含一个ec_timet这个定时器停止时刻

osal_timer_start:启动定时器,即设置未来停止时刻

osal_timer_is_expired:判断定时器是否过期,读取当前时间和定时器停止时间比较。

osal_usleep:进程休眠,单位us

osal_current_time: 获取当前时间,转换成ec_timet结构返回

osal_time_diff:比较两个时间,并把结果放到第三个参数中返回

osal_thread_create :创建一个线程,主要封装pthread函数

osal_thread_create_rt:创建一个实时线程,在osal_thread_create基础上设置进程的优先级和进程的调度方式。

在这里osal_usleep 没有使用c库中的usleep重新实现usleep函数如下

int osal_usleep (uint32 usec)
{struct timespec ts;ts.tv_sec = usec / USECS_PER_SEC;ts.tv_nsec = (usec % USECS_PER_SEC) * 1000;/* usleep is deprecated, use nanosleep instead */return nanosleep(&ts, NULL);
}

使用nanosleep函数重新实现usleep,调用nanosleep函数进程会进入TASK_INTERRUPTIBLE状态,这种状态会因为收到信号被唤醒,有可能实际休眠时间没有达到而被唤醒。

soem学习2 osal相关推荐

  1. BLE协议栈学习2——OSAL

    OSAL简介 BLE 协议栈包含了 BLE 协议所规定的基本功能,这些功能是以函数的形式实现的,为了便于管理 这些函数集,BLE 协议栈内加入了实时操作系统(并非真正意义上的操作系统),称为 OSAL ...

  2. BLE学习.osal学习1.osal的任务与事件

    一:osal api总结: 1.在osal中注册自己服务的办法: -定义好两个函数:void xxxtask_Init( uint8 taskId ); uint16 xxxtask_processE ...

  3. CC2540 OSAL 学习其中原理,以及 给任务 添加 一个事件(定时发送串口消息)

    参考学习大神博客: http://blog.csdn.net/feilusia/article/details/51083953 : http://blog.csdn.net/xiaoleiacmer ...

  4. ble学习笔记九----------ble协议栈之OSAL的运行机理

    OSAL的运行机理 事件表 函数表 使用查表法来取得事件所对应函数 taskCnt  任务总数 taskEvents 指向事件表首地址的指针 taskArr 事件处理函数数组,每一项都是一个函数指针 ...

  5. ZigBee学习之7——OSAL(操作系统抽象层)API解读

    根据Z-Stack1.4.3-1.2.0中OSAL API_F8W-2003-0002_.pdf文档翻译. Z-Stack1.4.3及以后的版本中引入了一个OS的概念,把应用层和堆栈层进行了分离,但是 ...

  6. 蓝牙BLE(协议栈、OSAL、蓝牙APP工具)

    目录 蓝牙配对和绑定 蓝牙4.0 BLE 信道(RF Channel) BLE协议栈分层 PHY层(Physical layer 物理层) LL层(Link Layer 链路层) HCI层(Host ...

  7. 蓝牙协议栈中的 OSAL

    蓝牙协议栈里的操作系统叫做 OSAL(操作系统抽象层).它并非一个真正意义上的操作系统,它只是实现了操作系统的一些功能,如任务切换.内存管理. OSAL 产生的根源:基于蓝牙协议栈开发的产品,实际上是 ...

  8. EtherCAT (学习笔记)

    文章目录 1. 简介 1.1 运动控制 1.2 实时以太网 1.3 EtherCAT 2. EtherCAT原理介绍 2.1 实时性 2.2 端口管理 2.3 EtherCAT网络拓扑 2.4 Eth ...

  9. Event Driven Class OSAL 基于事件驱动的模拟操作系统

    EventDrivenClassOSAL详解 Event Driven Class OSAL 基于事件驱动的模拟操作系统 ##前言 什么是OSAL OSAL为:Operating System Abs ...

  10. CC2541 BLE源码阅读知识积累之OSAL小结

    最近一段时间由于项目需要,便开始在阅读TI的cc2541的BLE Stack源码,对于蓝牙4.0这块知识基本是小白,所以几乎从0开始.在没接触蓝牙之前,就知道该部分的内容较为复杂(涉及到通信等协议栈) ...

最新文章

  1. PowerTip of the Day-Add Help to Your Functions
  2. 防止SQL注入解决方案
  3. 神雕侠侣手游服务器维修点,《神雕侠侣》2021年4月1日更新维护新服开启公告
  4. 10字符串及整数操作符
  5. w3c html规范规范文档,前端开发规范
  6. spring2.5.4+hibernate3.2.6+struts2+jbpm3.2.2
  7. 让IE6-IE8 支持HTML5
  8. 洛谷p3803 FFT入门
  9. TCN机器之心的转载,后面需要实现
  10. 双系统如何干净删除Ubuntu
  11. 加解密:MD5DesAesRSARSA C#和Java适配
  12. 加州大学洛杉矶计算机排名,加州大学洛杉矶分校计算机科学硕士排名第14(2020年TFE Times排名)...
  13. kubeadm安装部署k8s(1)
  14. 云服务器通过域名访问自己的项目
  15. win32 - 保存路径对话框(SelectFolderDialog)
  16. matlab检验相关性显著性检验,显著性检验matlab.ppt
  17. Codeforces Round #835 (Div. 4) - D. Challenging Valleys
  18. 基于java的oa协同办公系统_基于JAVA的OA系统的制作毕业设计论文
  19. 企业SaaS商怎么转型做企业服务商
  20. OSS——阿里OSS

热门文章

  1. 系统分析师视频教程-张友生
  2. 成绩管理系统代码c语言,学生成绩管理系统(c语言源代码)
  3. WPF教程二:布局之StackPanel面板
  4. VSS2005 使用方法
  5. 辽宁省沈阳市谷歌高清卫星地图下载
  6. iamsese.cn -- 色色 -- 实例讲解 简易RBAC实现原理
  7. python破解excel进入密码(密码字典)
  8. 科学实证与理论研究方法
  9. centos服务器如何设置代理上网?
  10. miui android 版本下载安装,MIUI12.2.2.0稳定版安装包