CyberRT框架非常优秀,我想把它单独拎出来编译安装,作为一个第三方的框架使用,类似于Ros,可以更方便的编写CyberRT模块程序,因为对Bazel不太熟,就选择用最熟的CMake来完成这项工作。目前在虚拟机上已经编译通过,并且所有测试用例均已通过,但是单元测试scheduler_classic_test中
FOR_EACH(i, 0, 20) { cyber::SleepFor(std::chrono::milliseconds(i)); }
理论上来说应该只有200ms左右,但是实际上需要20S左右,这与期望严重不符,如果将其替换为this_thread::sleep_for 就恢复正常;不知道是我移植的问题,还是协程在虚拟机上的表现与物理机不一致造成的。
关于协程的函数栈切换时,目前CyberRT在x64平台上保留了大约7个寄存器,是否虚拟机上并非如此?
我又再次使用apollo官方镜像、在官方docker内编译了CyberRT,单元测试结果与我重新构建编译后的结果一致,是否就能定位是虚拟机的问题?
CMake工程脚本及相关补丁、脚本均已上传git,附上链接。。。
scheduler Async测试用例用时过高,问题已经定位,因为协程队列只有一个协程任务时,如果该协程也让出cpu,将没有其他协程能够唤醒它,processor将一直休眠到context_->Wait(),程序中实际上调用了条件变量wait_for休眠了1000ms。为什么apollo会将此处设置为1000ms呢,既然没人协程对象了,唤醒频繁点理论上也没啥问题,还能提高实时性。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
我也理解不了这个默认1000ms的原因
请问有遇到组件模式proc函数调用不到的情况吗,我cmake编译生成测试组件模式就是不行
common/timer 这两个样例组件都不行,proc就是死活触发不了
@yhangzzz 我在实体Ubuntu 1804上把apollo 7.0的cyber 单独领出来,自己做了一下cmake 适配,然后代码里面做了一下路径修改,编译通过后就运行他的样例,common_component_example 和timer_component_example ,发现两个proc 回调都触发不了,调试打印提示Detect forward jumps in time,然后我测试listener 和talker 样例,这两个都是可以的,运行ok ,你那边把 cyber 领出来时,有做什么特殊代码修改吗,额,对了,我在我的环境里,把你的代码拿过来试了一遍,也是同样的问题
登录 后才可以发表评论