- 博客(7)
- 资源 (9)
- 收藏
- 关注
原创 c++11 条件变量 std::condition_variable,多线程同步
一般来说,多线程中如果需要等待一个变量或者条件为true 或者同步多个线程,有两种方法:1 . 忙等待,不停地检查该变量是否满足条件while(pre) // polling loop{}该方式有很多缺点:占用cpu资源,变量 pre 必须多线程安全,或者为 atomic 类型。在while中sleep可以解决cpu占用为题,但是在变量满足条件时又不能及时的唤醒该线程。2 . 使用条件变量 st
2016-06-29 13:13:24 9071
原创 WAMP RPC & Publish & Subscribe c++ 实现简析 & TCP 粘包处理方法
基于tcp/ip 的 RPC和Pub&Sub 基本上都是基于 boost::asio 实现的。一个wamp_session表示一个wamp端的连接,wamp 提供了注册 callee,调用一个caller 或者向一个 topic pub&sub 数据的功能。步骤:创建一个 wamp session,建立 TPC/IP 连接注册 callee, subscribe topic etc.wamp_
2016-06-16 15:05:59 3418
原创 ethercat 同步方式 FreeRun/SMx/DC
对象字典 index 0x1C32:0x01 可以选择 ethercat 主站和从站的同步方式。 一共有三种:Free Run 模式 这种模式就是说每个slave根据自己的时间中断(未同步的timer)来处理ethercat数据,跟主站的运行周期其他从站的周期以及ethercat帧的到达时间都没关系。SMx 模式 这种模式就是slave根据SM2 或者 SM3 event 来处理e
2016-06-08 14:16:29 18381 43
原创 Lock-Free,无锁数据结构 & 无锁编程 Orocos — Muliti Writer Single Reader Queue
无锁数据结构无锁的数据结构应用越来越广泛,现在几乎所有的多核cpu都提供了 CAS 操作。实现无锁的 Muliti Writer Single Reader Queue 的关键还是 实现指针的 CAS( gcc: __sync_val_compare_and_swap ).这里有一个 Single Writer Mulity Reader 的 无锁实现 see link实现过程:创建一个数组 _bu
2016-06-03 15:59:21 3657 2
原创 Orocos ExecutionEngine 对函数Operation调用的实现
在 Orocos 中每一个 ExecutionEngine 可以属于一个线程,其拥有一个成员变量,指向 Activity 类(表示一个线程)。 该 ExecutionEngine 负责函数的调用,数据的传输等等(如下图所示) 其中每一个 ExecutionEngine 中都有一个无锁的队列 MWSRQueue 类 see linkinternal::MWSRQueue<base::Dispos
2016-06-03 11:04:24 3590
原创 Orocos OperationCaller 解析
在 Orocos 中 OperatoinCaller 表示一个可以调用其他模块的函数的对象, 如果一个模块添加了一个 Operation,则该 Operation 表示的函数可以被其他模块的 OperationCaller 调用。 在连接 ( connectService ) 调用端(OperationCaller)和被调用端(Operation)之后,该 OperatoinCaller 就能够
2016-06-02 11:10:38 3723
原创 Orocos Activity&ExecutionEngine 解析
Orocos 每一个TaskContext 类表示一个完整的模块,该模块有configure,start,stop,clean,setPeriod等等方法来控制这个模块的运行。如果使用了该模块的setActivity方法,将该模块放在一个单独的线程中运行,该模块内便独立于其他模块,根据自己的周期频率执行各个函数,读写dataport等。setActivity 方法如下:bool TaskContex
2016-06-01 13:47:20 3372
orocos rtt with xenomai & kuka lwr
2017-03-01
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人