zoukankan      html  css  js  c++  java
  • apollo Xilinx Zynq 平台移植记录

    • 为了做自动驾驶,考察了ros2和apollo,最后还是选择了apollo,原因很简单,好移植。apollo用的是bazel编译系统,为了兼容已有工程,我用CMake构建,构建过程中遇到了一些坑,连基本的talker, listen例子也无法正常工作,也在git上反馈过,但是apollo的arm平台是Xavier,只能自己解决,趁项目告一段落特记录如下:
    1. fastcdr,protobuf序列化的问题,cyber里面调用protobuf序列化后的字符串会含有''结束字符,再经fastcdr序列化时,fastcdr直接转成c-string,导致最终大小不一致。以下underlay_message.cc文件里更新的代码。
    void UnderlayMessage::serialize(eprosima::fastcdr::Cdr& scdr) const {
      scdr << m_timestamp;
      scdr << m_seq;
      std::vector<char> data_vector(m_data.size());
      data_vector.assign(m_data.begin(), m_data.end());
      scdr << data_vector;
      scdr << m_datatype;
    }
    
    void UnderlayMessage::deserialize(eprosima::fastcdr::Cdr& dcdr) {
      dcdr >> m_timestamp;
      dcdr >> m_seq;
      std::vector<char> data_vector;
      dcdr >> data_vector;
      m_data.assign(data_vector.begin(), data_vector.end());
      dcdr >> m_datatype;
    }
    
    1. 协程优化问题,release模式或者-O2优化选项,有些语句会被优化调,如果改为debug模式,库的体积又太大,我的解决办法是对特定的函数
      static void Yield()__attribute__((optimize("-O0")));
      static void Yield(const RoutineState &state)__attribute__((optimize("-O0")));
      static void SetMainContext(const std::shared_ptr<RoutineContext> &context)__attribute__((optimize("-O0")));
      static CRoutine *GetCurrentRoutine()__attribute__((optimize("-O0")));
      static char **GetMainStack()__attribute__((optimize("-O0")));
    
    1. fastddr库的第三方memory库,需要确定NODE_SIZE的大小,x86可以自动确定,但是arm平台需要先编译nodesize_dbg工具,再在arm平台上执行生成container_node_sizes_impl.hpp,将其替换掉memory的build目录下src/container_node_sizes_impl.hpp文件,注意在源码的src/CMakeLists.txt里修改如下几行。避免container_node_sizes_impl.hpp被覆盖。
        message(WARNING "cannot generate container_node_sizes_impl.hpp, node size information will be unavailable")
        #file(WRITE  ${CMAKE_CURRENT_BINARY_DIR}/container_node_sizes_impl.hpp "#define FOONATHAN_MEMORY_NO_NODE_SIZE")
        #set(FOONATHAN_MEMORY_NO_NODE_SIZE 1 PARENT_SCOPE)
    
  • 相关阅读:
    js与jquery常用数组方法总结
    js 对象深复制,创建对象和继承
    Web前端面试常识
    jQuery插件开发之boxScroll与marquee
    jQuery插件开发之windowScroll
    《将博客搬至CSDN》
    蓝桥杯 翻硬币
    AcWing 756.蛇形矩阵
    货仓选址
    费解的开关
  • 原文地址:https://www.cnblogs.com/chenzhengxi/p/14641289.html
Copyright © 2011-2022 走看看