精华内容
下载资源
问答
  • 文件夹结构: src文件夹:预处理的源文件 html HTML源文件和模板 images原始压缩图像 js个预处理脚本文件 scss个预处理的Sass .scss文件 build文件夹:编译/处理过的文件 html编译的静态HTML文件 images压缩...
  • Apollo Cyber RT自定义组件文件结构头文件源文件BUILD编译文件DAGLaunch运行参考资料 写在前面。网上关于Cyber RT中自定义组件的有很,其中大部分直接翻译apollo官方github教程——如何使用 Cyber RT 来创建一个新...

    写在前面。网上关于Cyber RT中自定义组件的有很多,其中大部分直接翻译apollo官方github教程——如何使用 Cyber RT 来创建一个新的组件,并未对其中的个个语句给出详细的解释。在次前提下,整理网上资料和翻阅源代码,自学整理,记录在此。2019.11.10

    文件结构

    • 程序头文件
    • 程序源文件
    • BUILD bazel编译所需
    • DAG 依赖文件
    • Launch文件

    头文件

    /*common_component_example.h*/
    // std
    #include <memory>
    // cyber
    #include "cyber/class_loader/class_loader.h"
    #include "cyber/component/component.h"
    #include "cyber/examples/proto/examples.pb.h"
    
    using apollo::cyber::examples::proto::Driver;
    using apollo::cyber::Component;
    using apollo::cyber::ComponentBase;
    /*需要继承Component类,并实现Init和Proc成员函数
      若继承自Component<>,则CommonComponentSample中没有继承Proc函数,无需实现*/
    class CommonComponentSample : public Component<Driver, Driver> {
     public:
      bool Init() override;
      bool Proc(const std::shared_ptr<Driver>& msg0,
                const std::shared_ptr<Driver>& msg1) override;
    };
    /*使用CYBER_REGISTER_COMPONENT宏定义把组件类注册成全局可用*/
    CYBER_REGISTER_COMPONENT(CommonComponentSample)
    

    源文件

    /*common_component_example.cc*/
    #include "cyber/examples/common_component_example/common_component_example.h"
    #include "cyber/class_loader/class_loader.h"
    #include "cyber/component/component.h"
    
    bool CommonComponentSample::Init() {
      /*apollo采用google::LogMessage记录日志文件,并保存在apollo/data/log/mainborad.INFO文件中*/
      AINFO << "Commontest component init";
      return true;
    }
    
    bool CommonComponentSample::Proc(const std::shared_ptr<Driver>& msg0,
                                   const std::shared_ptr<Driver>& msg1) {
      AINFO << "Start common component Proc [" << msg0->msg_id() << "] ["
            << msg1->msg_id() << "]";
      return true;
    }
    

    BUILD编译文件

    # 从apollo/tools/cpplint.bzl文件中加载cpplint
    load("//tools:cpplint.bzl", "cpplint")
    
    # default_visibility指定了这个包的默认可见规则。可见的情况下才能被其他package调用。
    package(default_visibility = ["//visibility:public"])
    
    # 构建二进制文件
    cc_binary(
        # 构建二进制文件的名字
        name = "libcommon_component_example.so",
        # 
        linkopts = ["-shared"],
        # 
        linkstatic = False,
        # 引用当前包中的目标
        deps = [":common_component_example_lib"],
    )
    
    # 构建库
    cc_library(
        # 构建库的名字
        name = "common_component_example_lib",
        # 源文件
        srcs = [
            "common_component_example.cc",
        ],
        # 头文件
        hdrs = [
            "common_component_example.h",
        ],
        # 依赖包
        # //表示根目录,格式//相对路径/包名:目标名
        # 若不指定目标名则目标名与报名相同
        deps = [
            "//cyber",
            "//cyber/examples/proto:examples_cc_proto",
        ],
    )
    
    # apollo自定义的方法,必须添加到末尾
    # 原型为cpplint(data=None, extra_srcs=None)
    # 可以传入额外的配置(data)和源文件(extra_srcs)
    # 参见:/apollo/apollo/tools/cpplint.bzl 53行
    cpplint()
    

    DAG

    # Define all coms in DAG streaming.
    # 与官方教程(component_config)不同此处为:module_config
    # 参见:/apollo/cyber/mainboard/module_controller.cc 129行
    module_config {
        # 模块路径
        module_library : "/apollo/bazel-bin/cyber/examples/common_component_example/libcommon_component_example.so"
        # 组件
        components {
            # 类名
            class_name : "CommonComponentSample"
            # 配置
            config {
                # 组件的名字
                name : "common"
                # 接收消息的通道,因为在头文件中自定义的类继承自Component<Driver, Driver>,
                # 模板中含有两个量,因此此处*必须*要有两个readers
                # 参见源码:/apollo/apollo/cyber/component/component.h 237行
                readers {
                    channel: "/apollo/prediction"
                }
                # 接收消息的通道
                readers {
                    channel: "/apollo/test"
                }
            }
        }
    }
    

    Launch

    <cyber>
        <module>
            <name>common</name>
            <dag_conf>/apollo/cyber/examples/common_component_example/common.dag</dag_conf>
            <process_name>common</process_name>
        </module>
    </cyber>
    

    ## 编译

    # 如果已经完成apollo的编译,建议使用第二条
    # 仅编译所有文件夹中的内容
    bash /apollo/apollo.sh build
    # 仅编译cyber文件夹中的内容
    bash /apollo/apollo.sh build_cyber
    

    运行

    cyber_launch start /apollo/cyber/examples/common_component_example/common.launch
    

    参考资料

    如何使用 Cyber RT 来创建一个新的组件
    Bazel学习笔记

    展开全文
  • C开发经验

    2020-04-24 17:00:22
    2.对源文件,如果a文件要访问b文件的函数指针而调用b文件中的函数,前提是b文件的这个函数指针在b调用之前,要在a中定义和声明,否则会出现系统卡死的问题,因为调用一个初始化的函数指针,系统不知道掉到哪里...

    1. IAR中,函数指针参数如果为void,那么定义函数指针和函数实体时也要写上void,否则编译会报错。

    2.对多个源文件,如果a文件要访问b文件的函数指针而调用b文件中的函数,前提是b文件的这个函数指针在b调用之前,要在a中定义和声明,否则会出现系统卡死的问题,因为调用一个未初始化的函数指针,系统不知道掉到哪里去了。也有个办法就是调用的时候判断是否为NULL。
          还有就是在定义结构体时,全局结构体初始化这个函数指针为NULL,其他文件使用时判断是否为null,或者全局结构体中初始化这个函数指针其他文件不管多早运行,都可以使用这个函数指针,因为已经在全局结构体成员初始化时初始化过了,即编译阶段就初始化了。并不是运行的时候构造的。

    3. 如果a.h中定义一个结构体的某个成员类型为b.h中定义的结构体类型,即使a.h包含了b.h,编译也不会通过,因为头文件展开只会在.c源文件中进行,不会在.h文件中进行。两个方法解决:

    (1)把a.h定义的这个结构体放在a.c中定义,然后a.c中包含b.h,这样这个结构体的那个成员的类型就可以使用b.h中定义的类型了。

    (2)在a.h定义的结构体时,要使用另外.h文件结构体类型的成员定义为void *类型,这样在c文件中初始化时把这个void*指针指向b.h中结构体类型的实体,这样也能编译通过,也能实现目的。任何类型指针可以赋值给void*,但是void*类型要赋值给其他类型指针就需要强制转换为其他类型才能赋值。

    4. 定义一个二维数组,要想某个指针指向这个数组,可以定义一个二维数组指针:

    int a[5][6]

    int(*p)[6]; //p是指向长度为6的数组的指针

    然后p=a,这样访问p就相当于访问a了。

    4. 关于结构内存占用字节对齐--两个原则

    (1)结构体每个成员相对于结构体首地址的偏移量必须是成员本身占用内存的整数倍。

    (2)结构体占用总内存大小为结构体最宽基本类型成员大小的整数倍。

    展开全文
  • 使用方法:按解压后文件结构复制到易安装目录.+调试信息长度去除限制,以前输出信息太会被自动清空。+源文件名+_Command.ini 可以定义编译参数,格式如下[linker]extra_args= /MAP; extra_args用于指定附加给链接...
  • java源码包---java 源码 大量 实例

    千次下载 热门讨论 2013-04-18 23:15:26
     Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...
  • 如果指定文件系统,将使用现有的文件系统格式。  Map  显示驱动器号与物理设备名称的映射。该信息在运行 fixboot 和 fixmbr 命令时非常有用。  map 命令仅在使用故障恢复控制台时才可用。  Map [ arc]  ...
  • java源码包2

    千次下载 热门讨论 2013-04-20 11:28:17
     Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...
  • java源码包3

    千次下载 热门讨论 2013-04-20 11:30:13
     Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...
  • java源码包4

    千次下载 热门讨论 2013-04-20 11:31:44
     Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...
  • 凯撒加密解密程序 1个目标文件 1、程序结构化,用函数分别实现 2、对文件的加密,解密输出到文件 利用随机函数抽取幸运数字 简单 EJB的真实世界模型(源代码) 15个目标文件 摘要:Java源码,初学实例,基于EJB的真实...
  • 凯撒加密解密程序 1个目标文件 1、程序结构化,用函数分别实现 2、对文件的加密,解密输出到文件 利用随机函数抽取幸运数字 简单 EJB的真实世界模型(源代码) 15个目标文件 摘要:Java源码,初学实例,基于EJB的真实...
  • 目的:编写一个实际可用的makefile,能自动编译当前目录下所有.c源文件,并且任何.c、.h或依赖的源文件被修改后,能自动重编那些改动了的源文件改动的不编译。 二 要达到这个目的,用到的技术有: 1-使用...
  • 凯撒加密解密程序 1个目标文件 1、程序结构化,用函数分别实现 2、对文件的加密,解密输出到文件 利用随机函数抽取幸运数字 简单 EJB的真实世界模型(源代码) 15个目标文件 摘要:Java源码,初学实例,基于EJB的真实...
  • JAVA上百实例源码以及开源项目

    千次下载 热门讨论 2016-01-03 17:37:40
     Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...
  • 实际上在前面的各章中我们已经次使用了文件,例如源程序文件、目标文件、可执行文件、库文件 (头文件)等。文件通常是驻留在外部介质(如磁盘等)上的, 在使用时才调入内存中来。从不同的角度可对文件作不同的分类...
  • 代码模块化,分类定义了头文件与源文件,几乎使用全局变量,虽然这样做可能传参比较复杂,但使项目模块化,可读性更高 头文件与函数定义: FileO,h&&FileO.c,这个模块设计到了登陆与许多文件操作...
  • 10. "信息框"、"输入框"、"多文件对话框"命令增加了一个父窗口参数,为通用型,可以传递窗口或窗口句柄. 11. 解决了易模块重新编译后"继续公开"选项自动丢失的问题. 12. 在IDE标题栏最左边显示当前工程的工程名(程序...
  • C#微软培训教材(高清PDF)

    千次下载 热门讨论 2009-07-30 08:51:17
    14.2 态 性 .159 14.3 抽象与密封 .163 14.4 继承中关于属性的一些问题.169 14.5 小 结 .172 第四部分 深入了解 C#.174 第十五章 接 口 .174 15.1 组件编程技术 .174 15.2 接 口 定 义 .177 15.3 ...
  • 代码语法错误分析工具pclint8.0

    热门讨论 2010-06-29 07:00:09
    编译这个文件,看下你的编译器给你多少警告,再运行下lint, 可以自己对比一下。 我的机器上,VC产生0 errors 0 warnings, 而lint程序产生了如下8条警告信息,有些还是很有用处的提示,这里就不一一分析了. test.cpp...
  • C#微软培训资料

    2014-01-22 14:10:17
    14.2 态 性 .159 14.3 抽象与密封 .163 14.4 继承中关于属性的一些问题.169 14.5 小 结 .172 第四部分 深入了解 C#.174 第十五章 接 口 .174 15.1 组件编程技术 .174 15.2 接 口 定 义 .177 15.3 ...
  • 想要札器完成的工作用Jaa语言表达出来,写成Java源文件,然后把源文件进行编译,形 成 class文件,最后就可以在JaⅦa运行环境中运行了。运行阶段的工作由Java平台自身提供 我们不需要做什么上作。 六:Java技术三大特性 1...
  • 你必须知道的495个C语言问题

    千次下载 热门讨论 2015-05-08 11:09:25
    4.7 我有些解析外部结构的代码,但是它却崩溃了,显示出了“unalignedaccess”(对齐的访问)的信息。这是什么意思? 作为函数参数的指针 4.8 我有个函数,它应该接受并初始化一个指针:voidf(int*ip){...
  • 4.7 我有些解析外部结构的代码,但是它却崩溃了,显示出了“unaligned access”(对齐的访问)的信息。这是什么意思? 76 作为函数参数的指针 76 4.8 我有个函数,它应该接受并初始化一个指针:void f(int *ip){ ...
  • 4.7 我有些解析外部结构的代码,但是它却崩溃了,显示出了“unaligned access”(对齐的访问)的信息。这是什么意思? 76 作为函数参数的指针 76 4.8 我有个函数,它应该接受并初始化一个指针:void f(int *ip){ ...
  • 注意备份源文件名,微软的文件选取对话框控件 ------------------------------------------------------ 详情请关注经典论坛数据库版和Paintblue.net的程序发布区 程序编制: V37 paintblue.net (2004-11-20) 版权...
  • 《你必须知道的495个C语言问题》

    热门讨论 2010-03-20 16:41:18
    4.7 我有些解析外部结构的代码,但是它却崩溃了,显示出了“unaligned access”(对齐的访问)的信息。这是什么意思? 47 作为函数参数的指针 47 4.8 我有个函数,它应该接受并初始化一个指针:void f(int *ip)...
  • 注意备份源文件名,微软的文件选取对话框控件 ------------------------------------------------------ 详情请关注经典论坛数据库版和Paintblue.net的程序发布区 程序编制: V37 paintblue.net (2004-11-20) 版权...

空空如也

空空如也

1 2 3 4 5
收藏数 100
精华内容 40
关键字:

多文件结构源文件未编译