Linux嵌入式开发笔记(七)ROS2中C++的API函数原型

21 篇文章 2 订阅
5 篇文章 1 订阅

学着学着,网上的资源就越来越少了,只有匹配自己项目的资源越来越少,授之以鱼不如授人以渔。我就记录一下学习的过程经验,相互学习。

学习完ROS2中的pub/sub,service/client,action等通信示例,大概了解其机制,也就可以自己创建工程,实现一个节点从节点A订阅,处理后发布给节点B;同时作为服务器,处理节点C中客服端的请求,再作为客服端向节点D中服务器请求数据算法处理。总之,可以实现单节点的多重形式通信,但是很多都是在ROS2示例中学习的,函数原型是什么,是如何处理的,就不得而知了。今天记录一下,ROS2中C++涉及函数原型的学习过程。

程序中声明了 #include "rclcpp/rclcpp.hpp" ,就从他开始。(我这里是介绍的一种方法,聪明的你是可以触类旁通,举一反三的)

在ROS2安装路径中,搜索rclcpp.hpp ,找到并打开rclcpp.hpp。(我的路径为ros2_ws/src/ros2/rclcpp/rclcpp/include/rclcpp/rclcpp.hpp)

 

 

这三个图就是其主要内容,其注释很好的展示了函数原型在何处声明:比如

rclcpp::Node就在rclcpp/node.hpp中进行了声明,可以在当前路径中的上一级查找并打开node.hpp,查看其函数原型。 我目前是要查看rclcpp::spin_until_future_complete的函数原型,所以对应上面截图中注释,找到并打开rclcpp/executor.hpp,在里面找到如下内容:

这里就详细介绍了这个rclcpp::spin_until_future_complete的函数原型。这个函数实现的功能就是:旋转(阻塞)直到①将来完成 或 ②等待超时或 ③rclcpp被中断。

其有两个输入,一个返回值。

     \ param [in] future等待的未来。 如果成功,将来可以安全使用此功能。

     \ param [in] timeout可选的超时参数,该参数传递给Executor :: spin_node_once。

      -1是永远的阻止,0是非阻止的。

       如果阻塞循环中花费的时间超过了此超时,则返回TIMEOUT返回码。

     \ return返回代码,是SUCCESS,INTERRUPTED或TIMEOUT之一。(这里对应着此文件开头定义的枚举:enum class FutureReturnCode {SUCCESS, INTERRUPTED, TIMEOUT};)

是不是瞬间明白了许多,这样就可以学习示例中的函数原型,也可以学习和使用示例中没有的函数原型。如果有时间,后续会把所有的API函数整理出来。

自己可以在自己的工程中去试试~

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
#include"..\ucos-ii\includes.h" /* uC/OS interface */ #include "..\ucos-ii\add\osaddition.h" #include "..\inc\drv.h" #include <string.h> #include <math.h> #pragma import(__use_no_semihosting_swi) // ensure no functions that use semihosting ///******************任务定义***************/// OS_STK Main_Stack[STACKSIZE*8]={0, }; //Main_Test_Task堆栈 void Main_Task(void *Id); //Main_Test_Task #define Main_Task_Prio 12 /**************已经定义的OS任务************* tcp监控任务 11 以太网物理层监控任务 8 触摸屏任务 9 键盘任务 10 lcd刷新任务 59 系统任务 1 *****************************************************/ ///*****************事件定义*****************/// OS_EVENT *Nand_Rw_Sem; //Nand_Flash读写控制权旗语 //and you can use it as folloeing: // Nand_Rw_Sem=OSSemCreate(1); //创建Nand-Flash读写控制权旗语,初值为1满足互斥条件// // OSSemPend(Nand_Rw_Sem,0,&err); // OSSemPost(Nand_Rw_Sem); OS_EVENT *Uart_Rw_Sem; //Uart读写控制权旗语 //and you can use it as folloeing: // Uart_Rw_Sem=OSSemCreate(1); //创建Uart读写控制权旗语,初值为1满足互斥条件// // OSSemPend(Uart_Rw_Sem,0,&err); // OSSemPost(Uart_Rw_Sem); ////////////////////////////////////////////////////////// void initOSGUI() //初始化操作系统的图形界面 { initOSMessage(); initOSList(); initOSDC(); initOSCtrl(); initOSFile(); } ///////////////////////////////////////////////////// // Main function. // ////////////////////////////////////////////////////

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值