上位机图像处理和嵌入式模块部署(树莓派4b和类muduo网络编程)

news2024/11/14 13:39:33

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

  

        既然是linux编程,那么自然少不了网络编程。在linux平台上面,有很多的网络编程库可以选择,大的有boost、qt,小的有libevent,总觉得用的不是很顺手。其实在linux上面,还有一个国人写的网络库muduo,是比较小巧的,使用上面也很方便,大家可以多多使用。本身它是面向linux服务器多线程编程的,用它来写一个类ros的通信框架,再合适不过了。

        本次实验用的是一个同学改写的类muduo,正版的muduo代码地址,大家可以参考这个链接。原版的muduo相对干净一点,基本上mkdir build && cd build && cmake .. && make就可以了。此外,正版本muduo所有的可执行文件都安装在build的bin目录下。

https://github.com/chenshuo/muduo/tree/master

1、下载代码

        代码可以直接从github上面下载。

https://github.com/shenmingik/muduo

2、解压代码

        解压的话就比较容易了,直接输入unzip muduo-main.zip即可。

3、开始编译

        解压的目录下面有一个build目录,里面的文件全部删除。cd到build目录里面,直接输入cmake ..即可。

4、编译过程中的两个问题

        cmake生成makefile之后,就可以开始编译了。编译过程中有两个问题,一个是提示我们找不到string定义,还有一个提示我们找不到snprintf的定义。解决方法也不复杂,首先需要Thread.hpp里面添加一个#include <string>的声明。另外snprintf的问题,则在Thread.cpp当中添加一个#include <pthread.h>的声明,这样就没什么问题了。

        至此,如果一切正常,就可以在lib目录下看到生成的动态库libmymuduo.so了。

5、准备编译example中的测试文件

        example里面有一个testserver.cc文件,可以用来测试和编译,

#include <TcpServer.hpp>
#include <string>
#include <functional>

using namespace std;
using namespace placeholders;

class EchoServer
{
public:
    EchoServer(EventLoop *loop, InetAddress &addr, string name)
        : server_(loop, addr, name), loop_(loop)
    {
        //注册回调函数
        server_.set_connection_callback(bind(&EchoServer::on_connection, this, _1));
        server_.set_message_callback(bind(&EchoServer::on_message, this, _1, _2, _3));

        //设置线程数量
        server_.set_thread_num(3);
    }
    void start()
    {
        server_.start();
    }

private:
    //连接建立或者断开的回调
    void on_connection(const TcpConnectionPtr &conn)
    {
        if (conn->connected())
        {
            LOG_INFO("conn up: %s", conn->get_peeraddr().get_ip_port().c_str());
        }
        else
        {
            LOG_INFO("conn down: %s", conn->get_peeraddr().get_ip_port().c_str());
        }
    }

    //可读事件回调
    void on_message(const TcpConnectionPtr &conn, Buffer *buffer, TimeStamp time)
    {
        string msg = buffer->retrieve_all_asString();
        conn->send(msg);
        conn->shutdown();
    }

private:
    EventLoop *loop_;
    TcpServer server_;
};

int main()
{
    EventLoop loop;
    InetAddress addr(8000);
    EchoServer server(&loop, addr, "echo 01");
    server.start();
    loop.loop(); //启动main loop的底层poller
    return 0;
}

        输入g++ testserver.cc -I../include -g -o testserver ../lib/libmymuduo.so之后,提示我们头文件不对,这个时候把头文件当中的mymuduo/删去就可以编译通过了。

6、执行tesetserver程序

        编译没有问题之后,就可以开始执行了。首先需要把so文件从lib目录拷贝过来,接着就是./testserver开始执行,这个时候提示我们找不到动态库文件,其实配置一下LD_LIBRARY_PATH就可以了。

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$PWD

        执行后的打印应该是这样的,

feixiaoxing@raspberrypi:~/Desktop/mudoo/muduo-main/MyMuduo/example $ ./testserver
[INFO]2024-04-21 13:18:35 : func = update_channel fd = 4 events = 3 index = -1

[INFO]2024-04-21 13:18:35 : func = update_channel fd = 7 events = 3 index = -1

[INFO]2024-04-21 13:18:35 : EventLoop 0x7f8a17e5d0 start looping

[INFO]2024-04-21 13:18:35 : func = update_channel fd = 9 events = 3 index = -1

[INFO]2024-04-21 13:18:35 : EventLoop 0x7f8996e5d0 start looping

[INFO]2024-04-21 13:18:35 : func = update_channel fd = 11 events = 3 index = -1

[INFO]2024-04-21 13:18:35 : EventLoop 0x7f8915e5d0 start looping

[INFO]2024-04-21 13:18:35 : func = update_channel fd = 5 events = 3 index = -1

[INFO]2024-04-21 13:18:35 : EventLoop 0x7fcaf25c10 start looping

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1612762.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python3如何提取汉字

采用正则表达式的方法对字符串进行处理。 str1 "&#xff5b;我%$是&#xff0c;《速$.度\发》中 /国、人"&#xff08;1&#xff09;提取汉字 汉字的范围为”\u4e00-\u9fa5“&#xff0c;这个是用Unicode表示的。 import re res1 .join(re.findall([\u4e00-\u9fa…

如何对图片进行压缩和缩放

在手机像素越来越高的时代&#xff0c;照片的体积也在不断地膨胀&#xff0c;大部分情况下我们是不需要这么大的图片的&#xff0c;这个时候我们就需要对图片进行压缩或者缩放了&#xff0c;今天教大家如何缩小图片体积 打开智游剪辑&#xff08;官网: zyjj.cc&#xff09;&…

MySQL慢查询怎么办?需要关注Explain的哪些关键字?

目录 1-引言&#xff1a;什么是慢查询1-1 慢查询定义1-2 为什么排查慢查询 2-核心&#xff1a;慢查询排查2-1 慢查询定位2-2 慢查询解决2-2-1 Explain 排查慢查询2-2-2 Explain 重点关键字 3-总结&#xff1a;慢查询知识点小结 1-引言&#xff1a;什么是慢查询 1-1 慢查询定义…

LabelMe数据集格式问题

注意图片的通道数&#xff0c;之前我们都说RGB&#xff0c;但是在这里要看图片位深。 图像是rgba四个通道的&#xff0c;第四个通道是透明通道。 注意png格式的不只是文件名后缀是 .png &#xff0c;也可能是后缀名是 .jpg 但是图片里面的深度是为32的&#xff0c;常规的后缀是…

如何使用JSONB类型在PostgreSQL中存储和查询复杂的数据结构?

文章目录 解决方案1. 创建包含JSONB列的表2. 插入JSONB数据3. 查询JSONB数据4. 创建索引以优化查询性能 示例代码结论 在PostgreSQL中&#xff0c;JSONB是一种二进制格式的JSON数据类型&#xff0c;它允许你在数据库中存储和查询复杂的JSON数据结构。与普通的JSON类型相比&…

Matlab新手快速上手2(粒子群算法)

本文根据一个较为简单的粒子群算法框架详细分析粒子群算法的实现过程&#xff0c;对matlab新手友好&#xff0c;源码在文末给出。 粒子群算法简介 粒子群算法&#xff08;Particle Swarm Optimization&#xff0c;PSO&#xff09;是一种群体智能优化算法&#xff0c;灵感来源于…

flutter 实现表单的封装包含下拉框和输入框

一、表单封装组件实现效果 //表单组件 Widget buildFormWidget(List<InputModel> formList,{required GlobalKey<FormState> formKey}) {return Form(key: formKey,child: Column(children: formList.map((item) {return Column(crossAxisAlignment: CrossAxisAlig…

【BUG】Hexo|GET _MG_0001.JPG 404 (Not Found),hexo博客搭建过程图片路径正确却找不到图片

我的问题 我查了好多资料&#xff0c;结果原因是图片名称开头是_则该文件会被忽略。。。我注意到网上并没有提到这个问题&#xff0c;遂补了一下这篇博客并且汇总了我找到的所有解决办法。 具体检查方式&#xff1a; hexo生成一下静态资源&#xff1a; hexo g会发现这张图片…

配置静态路由实现全网互通

1、实验环境 如图下所示&#xff0c;三台路由器R1&#xff0e;R2&#xff0c;R3两两互连&#xff0c;每台路由器上都配置了Loopback地址模拟网络环境。 2、需求描述 需要在三台路由器上配置静态路由&#xff0c;以实现各网段之间的互通。 若要实现全网互通,必须明确如下两个问…

【GlobalMapper精品教程】075:将影像的颜色赋予点云实现点云真彩色

文章目录 一、加载点云与影像数据二、将影像色彩赋予点云三、保存色彩点云四、注意事项一、加载点云与影像数据 加载本实验数据(data075.rar)中的影像、点云数据,并用Globalmapper提供的卷帘工具(快速浏览图像)查看: 启动卷帘工具,左右拖动实现卷帘效果: 影像VS点云:…

【硬十宝典】——1.4【基础知识】电源完整性——理解与设计

定义&#xff1a; 电源完整性&#xff08;Power integrity&#xff09;简称PI&#xff0c;是确认电源来源及目的端的电压及电流是否符合需求。 电源完整性在现今的电子产品中相当重要。有几个有关电源完整性的层面&#xff1a;芯片层面、芯片封装层面、电路板层面及系统层面。…

EelasticSearch使用

1. Easy-ES介绍 Easy-Es 2. 导入依赖包 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><exclusions>//排除框架中原有的依赖包<exclusion><groupId>org.elast…

Elasticsearch:(二)2.安装kibana

1.环境安装介绍: 安装java环境安装Elasticsearch安装kibana安装Elasticsearch-head插件 本节文章主要讲解kibana的安装。 2.下载 下载Elasticsearch对应的版本,参考官方自身产品兼容版本:支持一览表 | Elastic 下载地址:Kibana 7.17.20 | Elastic Kibana 7.17.20 | Ela…

机器学习与深度学习 --李宏毅(笔记与个人理解)Day 20

Day 20 RNN 2 实际使用和其他应用 在实际的学习&#xff08;training&#xff09;过程中是如何工作的&#xff1f; step 1 Loss step 2 training Graindent Descent 反向传播的进阶版 – BPTT CLIpping 设置阈值~ 笑死昨天刚看完关伟说的有这玩意的就不是好东西 Why&#xff1…

FastChat启动与部署通义千问大模型

FastChat简介 FastChat is an open platform for training, serving, and evaluating large language model based chatbots. FastChat powers Chatbot Arena, serving over 10 million chat requests for 70 LLMs.Chatbot Arena has collected over 500K human votes from sid…

详细剖析多线程4----锁策略(八股文/面试常考)

文章目录 前言一、常见锁策略(八股文)1.1乐观锁和悲观锁1.2轻量级锁和重量级锁1.3自旋锁和挂起等待锁1.4普通互斥锁和读写锁1.5公平锁和非公平锁1.6可重入锁和不可重入锁1.7总结 二、synchronized内部原理三、CAS四、JUC(java.util.concurrent) 的常见类4.1Callable 接⼝4.2Ree…

基于SpringBoot+Vue七匹狼商城系统的设计与实现

系统介绍 近年来随着社会科技的不断发展&#xff0c;人们的生活方方面面进入了信息化时代。计算机的普及&#xff0c;使得我们的生活更加丰富多彩&#xff0c;越来越多的人使用通过网络来购买各类的商品。早期商品的销售和购买都是通过实体店&#xff0c;这种购买方式需要耗费…

openGauss学习笔记-267 openGauss性能调优-TPCC性能调优测试指导-网络配置-网卡多中断队列设置

文章目录 openGauss学习笔记-267 openGauss性能调优-TPCC性能调优测试指导-网络配置-网卡多中断队列设置267.1 操作步骤 openGauss学习笔记-267 openGauss性能调优-TPCC性能调优测试指导-网络配置-网卡多中断队列设置 本章节主要介绍openGauss数据库内核基于鲲鹏服务器和openE…

[jinja2]模板访问对象属性

甚至可以用. 访问字典 .访问一般用得是最多的

R绘图--峰峦图/山脊图/ggridges包

山脊图是部分重叠的线图&#xff0c;可产生山脉的印象。它们对于可视化分布随时间或空间的变化非常有用。 绘图 加载包和数据 # install.packages("ggridges") # 加载包 library(ggplot2) library(ggridges) library(viridis) library(tidyverse)# 准备输入数据 d…