当前位置: 首页 > news >正文

Raspberry Pi3B+之C/C++开发环境搭建

Raspberry Pi3B+之C/C++开发环境搭建

  • 1. 源由
  • 2. 环境搭建
    • 2.1 搭建C语言开发环境
    • 2.2 工程目录结构
    • 2.3 Makefile
    • 2.4 Demo (`main.c`)
  • 3. 测试工程
    • 3.1 编译
    • 3.2 运行
  • 4. 总结
  • 5. 参考资料

1. 源由

为了配合《Ardupilot开源飞控之FollowMe验证平台搭建》,以及VINS-Fusion对于图像和IMU时序的严格要求,配合uav_splitter增加一个uav_mixeragent部署在摄像头/飞控端。

agent本次将采用C/C++来实现,采用传统Makefile作为工程管理文件,便于后续的OpenIPC来做集成。

2. 环境搭建

工程开发先采用树莓派Raspberry Pi3B+作为目标板,搭建C语言开发环境并编写一个简单的工程结构来实现“Hello World”示例代码,可以按照以下步骤进行。

2.1 搭建C语言开发环境

在树莓派上,安装基本的开发工具包:

sudo apt update
sudo apt install build-essential git tree

注:其中git用于开源项目代码管控;tree更好的了解工程结构。

2.2 工程目录结构

使用以下的目录结构来组织工程文件:

$ tree .
.
├── include
├── LICENSE
├── main.c
├── Makefile
├── README.md
└── src└── main.c2 directories, 5 files
  • src/ 目录用于存放C语言的源代码。
  • include/ 目录用于存放头文件(如果有的话)。
  • Makefile 用于自动化构建过程。
  • LICENSE 用于对于开源代码许可证,建议用GPLv3.
  • Readme.md 该文件采用了MarkDown的语言格式,非常流行的文本版本管理语言格式。

2.3 Makefile

Makefile 会定义如何编译和链接C代码。以下是一个简单的示例:

# Define the compiler
CC = gcc# Define compiler options
CFLAGS = -Wall -Iinclude# Define source directory and object directory
SRCDIR = src
OBJDIR = obj# Define the target executable name
TARGET = helloworld# Define source files and object files
SRCS = $(wildcard $(SRCDIR)/*.c)
OBJS = $(SRCS:$(SRCDIR)/%.c=$(OBJDIR)/%.o)# Default target
all: $(TARGET)# Link the object files to create the executable
$(TARGET): $(OBJS)$(CC) $(OBJS) -o $(TARGET)# Compile source files into object files
$(OBJDIR)/%.o: $(SRCDIR)/%.c | $(OBJDIR)$(CC) $(CFLAGS) -c $< -o $@# Create the object file directory
$(OBJDIR):mkdir -p $(OBJDIR)# Clean up generated files
clean:rm -rf $(OBJDIR) $(TARGET).PHONY: all clean

2.4 Demo (main.c)

src/ 目录下创建一个 main.c 文件,实现简单的Hello World程序:

#include <stdio.h>int main() {printf("Hello, World!\n");return 0;
}

3. 测试工程

3.1 编译

通过以下命令编译并运行程序:

$ make        # Compile the program

3.2 运行

运行程序后,应该在终端看到:

$ ./helloworld  # Run the generated executable
Hello, World!

4. 总结

上述是一个Linux的C/C++应用最为基础的工程。

在此基础上,根据项目要求进行功能、特性的开发。

  • uav_mixer d1e6b13552a0811cc598309efeb40636bd23547f

5. 参考资料

【1】Linux应用程序之Helloworld入门

相关文章:

Raspberry Pi3B+之C/C++开发环境搭建

Raspberry Pi3B之C/C开发环境搭建 1. 源由2. 环境搭建2.1 搭建C语言开发环境2.2 工程目录结构2.3 Makefile2.4 Demo (main.c) 3. 测试工程3.1 编译3.2 运行 4. 总结5. 参考资料 1. 源由 为了配合《Ardupilot开源飞控之FollowMe验证平台搭建》&#xff0c;以及VINS-Fusion对于图…...

[笔记] 仿射变换性质的代数证明

Title: [笔记] 仿射变换性质的代数证明 文章目录 I. 仿射变换的代数表示II. 仿射变换的性质III. 同素性的代数证明1. 点变换为点2. 直线变换为直线 IV. 结合性的代数证明1. 直线上一点映射为直线上一点2. 直线外一点映射为直线外一点 V. 保持单比的代数证明VI. 平行性的代数证明…...

遥感影像-语义分割数据集:sar水体数据集详细介绍及训练样本处理流程

原始数据集详情 简介&#xff1a;该数据集由WHU-OPT-SAR数据集整理而来&#xff0c;覆盖面积51448.56公里&#xff0c;分辨率为5米。据我们所知&#xff0c;WHU-OPT-SAR是第一个也是最大的土地利用分类数据集&#xff0c;它融合了高分辨率光学和SAR图像&#xff0c;并进行了充…...

极狐GitLab 发布安全补丁版本 17.4.1、17.3.4、17.2.8

GitLab 是一个全球知名的一体化 DevOps 平台&#xff0c;很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版&#xff0c;专门为中国程序员服务。可以一键式部署极狐GitLab。 学习极狐GitLab 的相关资料&#xff1a; 极狐GitLab 官网极狐…...

汽车管理系统中使用函数

目录 setupUisetEnabledcurrentText()setTextsetFocus()query.exec(...)addWidgetconnect setupUi setupUi() 是 ui 对象的一个成员函数&#xff0c;它的作用是根据 .ui 文件中的设计&#xff0c;将设计好的组件&#xff08;如按钮、文本框、布局等&#xff09;添加到当前的窗…...

大数据分析入门概述

大数据分析入门概述 本文旨在为有意向学习数据分析、数据开发等大数据方向的初学者提供一个学习指南&#xff0c;当然如果你希望通过视频课程的方式快速入门&#xff0c;B站UP主戴戴戴师兄的课程质量很高&#xff0c;并且适合初学者快速入门。本文的目的旨在为想要了解大数据但…...

提示工程、微调和 RAG

自众多大型语言模型&#xff08;LLM&#xff09;和高级对话模型发布以来&#xff0c;人们已经运用了各种技术来从这些 AI 系统中提取所需的输出。其中一些方法会改变模型的行为来更好地贴近我们的期望&#xff0c;而另一些方法则侧重于增强我们查询 LLM 的方式&#xff0c;以提…...

自动化测试中如何高效进行元素定位!

前言 在自动化测试中&#xff0c;元素定位是一项非常重要的工作。良好的元素定位可以帮助测试人员处理大量的测试用例&#xff0c;加快测试进度&#xff0c;降低工作负担。但是在实际的测试工作中&#xff0c;我们常常遇到各种各样的定位问题&#xff0c;比如元素定位失败、元…...

UE5数字人制作平台使用及3D模型生成

第10章 数字人制作平台使用及3D模型生成 在数字娱乐、虚拟现实&#xff08;VR&#xff09;、增强现实&#xff08;AR&#xff09;等领域&#xff0c;高质量的3D模型是数字内容创作的核心。本章将引导你了解如何使用UE5&#xff08;Unreal Engine 5&#xff09;虚幻引擎这一强大…...

Linux进程被占用如何杀死进程

文章目录 前言一、根据名称进行查找程序所占用的端口号二、杀死进程总结 前言 由于Linux中&#xff0c;校园网登录的时候容易出现端口被占用&#xff0c;如何快速查找程序所占用的端口号。 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、根据名称…...

详解Xilinx JESD204B PHY层端口信号含义及动态切换线速率(JESD204B五)

点击进入高速收发器系列文章导航界面 Xilinx官方提供了两个用于开发JESD204B的IP&#xff0c;其中一个完成PHY层设计&#xff0c;另一个完成传输层的逻辑&#xff0c;两个IP必须一起使用才能正常工作。 7系列FPGA只能使用最多12通道的JESD204B协议&#xff0c;线速率为1.0至12.…...

Java面试——场景题

1.如何分批处理数据&#xff1f; 1.使用LIMIT和OFFSET子句&#xff1a; 这是最常用的分批查询方法。例如&#xff0c;你可以使用以下SQL语句来分批查询数据&#xff1a; SELECT * FROM your_table LIMIT 1000 OFFSET 0; 分批查询到的数据在后端进行处理&#xff0c;达到分批…...

xss-labs靶场第一关测试报告

目录 一、测试环境 1、系统环境 2、使用工具/软件 二、测试目的 三、操作过程 1、注入点寻找 2、使用hackbar进行payload测试 3、绕过结果 四、源代码分析 五、结论 一、测试环境 1、系统环境 渗透机&#xff1a;本机(127.0.0.1) 靶 机&#xff1a;本机(127.0.0.…...

微软PowerBI认证!数据分析师入门级证书备考攻略来啦

#微软PowerBI认证&#xff01;数据分析师入门级证书&#xff01; &#x1f603;Power BI是一种强大的数据可视化和分析工具&#xff0c;学习Power BI&#xff0c;能提高数据的分析能力&#xff0c;将数据转化为有意义的见解&#xff0c;并支持数据驱动的决策制定。 ㅤ ✨微软P…...

上海AI Lab视频生成大模型书生.筑梦环境搭建推理测试

引子 最近视频生成大模型层出不穷&#xff0c;上海AI Lab推出新一代视频生成大模型 “书生・筑梦 2.0”(Vchitect 2.0)。根据官方介绍&#xff0c;书生・筑梦 2.0 是集文生视频、图生视频、插帧超分、训练系统一体化的视频生成大模型。OK&#xff0c;那就让我们开始吧。 一、模…...

3D看车如何实现?有哪些功能特点和优势?

3D看车是一种创新的汽车展示方式&#xff0c;它利用三维建模和虚拟现实技术&#xff0c;将汽车以更真实、更立体的形式呈现在消费者面前。 一、3D看车的实现方式 1、三维建模&#xff1a; 通过三维建模技术&#xff0c;按照1:1的比例还原汽车外观&#xff0c;包括车身线条、细…...

Pytorch中不会自动传播梯度的操作有哪些?

在 PyTorch 中&#xff0c;某些生成张量的操作本身不会创建与计算图相关联的梯度信息。这些操作通常用于初始化张量&#xff0c;并且默认情况下不需要进行梯度计算。以下是一些常见的不会自动传播梯度的张量生成操作&#xff1a; 数值初始化操作&#xff1a; torch.linspace():…...

【设计模式】软件设计原则——开闭原则里氏替换单一职责

开闭原则内容引出 开闭原则 定义&#xff1a;一个软件实体&#xff0c;类&#xff0c;函数&#xff0c;模块&#xff1b;对扩展开放&#xff0c;对修改关闭。用抽象构建框架&#xff0c;用实现扩展细节。可以提高软件的可复用性和可维护性。 开发新功能时&#xff0c;尽量不修…...

项目完整开发的流程

流程 1.设计产品 2.写需求文档 2.1需求分析&#xff0c;后端设计数据库&#xff0c;建表&#xff0c;客户沟通&#xff0c;说完签字&#xff0c;留证据&#xff0c;防止后面扯皮&#xff0c;和防止后续变需求重新写业务 3.画原型图&#xff0c;也就是草图&#xff0c;初始的…...

性能测试学习6:jmeter安装与基本配置/元件/线程组介绍

一.JDK安装 官网&#xff1a;https://www.oracle.com/ 二.Jmeter安装 官网&#xff1a;http://jmeter.apache.org/download_jmeter.cgi 下载zip包&#xff0c;zip后缀那个才是Windows系统的jmeter 三.Jmeter工作目录介绍 四.Jmeter功能 1&#xff09;修改默认配置-汉化 2&am…...

脉冲神经网络:低功耗AI计算的生物启发革命

1. 脉冲神经网络&#xff1a;生物启发的低功耗计算革命2014年&#xff0c;IBM发布TrueNorth芯片时&#xff0c;其每平方厘米功耗仅20毫瓦的性能震惊了整个AI界。这款基于脉冲神经网络(SNN)的芯片&#xff0c;能耗仅为传统CPU的万分之一&#xff0c;却能够实时处理视频流中的复杂…...

深入MPSOC缓存一致性:从零配置HPC接口,让你的PL加速器告别Cache Flush

深入MPSOC缓存一致性&#xff1a;从零配置HPC接口&#xff0c;让你的PL加速器告别Cache Flush 在异构计算领域&#xff0c;MPSOC平台的缓存一致性配置一直是工程师面临的棘手问题。当PL端加速器通过HP接口与PS端交互时&#xff0c;频繁的手动缓存维护不仅增加了软件复杂度&…...

NY345固态MT29F32T08GWLBHD6-24T:B

NY345固态MT29F32T08GWLBHD6-24T:B在智能制造、交通控制、能源监测等关键领域&#xff0c;每一次写入与读取都决定着系统运行的可靠性。美光&#xff08;Micron&#xff09;MT29F32T08GWLBHD6-24T:B&#xff0c;以其32Tb大容量、工业级封装和多模式灵活切换&#xff0c;成为嵌入…...

STM32F030 HAL库驱动W25Q16实战:从数据手册到SPI读写代码(附避坑指南)

STM32F030 HAL库驱动W25Q16实战&#xff1a;从数据手册到SPI读写代码&#xff08;附避坑指南&#xff09; 1. 理解W25Q16存储芯片的核心特性 W25Q16作为一款16Mbit容量的SPI Flash存储器&#xff0c;在嵌入式系统中扮演着重要角色。这款芯片采用标准的SPI接口&#xff0c;支持单…...

Spring事件驱动:从@EventListener源码到高并发实践

1. Spring事件驱动机制入门 第一次接触Spring事件驱动时&#xff0c;我完全被各种Listener和Event搞晕了。直到在电商项目中遇到用户注册后需要执行多个后续操作的需求&#xff0c;才真正理解它的价值。想象一下&#xff0c;用户注册成功后需要发送短信、发放优惠券、记录行为日…...

Anthropic收购Stainless:AI Agent时代的连接革命

Anthropic收购Stainless&#xff1a;AI Agent时代的连接革命 1. 引言&#xff1a;从“回答”到“行动”的AI范式转移 1.1 收购概况&#xff1a;Anthropic于2026年5月宣布收购Stainless 2026年5月&#xff0c;AI领域迎来了一项颇具深意的收购案&#xff1a;Anthropic正式宣布收购…...

JPEXS Free Flash Decompiler终极指南:轻松替换SWF字体解决兼容性问题

JPEXS Free Flash Decompiler终极指南&#xff1a;轻松替换SWF字体解决兼容性问题 【免费下载链接】jpexs-decompiler JPEXS Free Flash Decompiler 项目地址: https://gitcode.com/gh_mirrors/jp/jpexs-decompiler 你是否曾遇到过SWF文件中的字体在不同设备上显示异常&…...

OpenClaw用户如何通过CLI子命令快速完成Taotoken接入配置

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 OpenClaw用户如何通过CLI子命令快速完成Taotoken接入配置 对于使用OpenClaw进行AI智能体开发的开发者而言&#xff0c;快速接入稳定…...

打卡信奥刷题(3286)用C++实现信奥题 P8929 「TERRA-OI R1」别得意,小子

P8929 「TERRA-OI R1」别得意&#xff0c;小子 题目背景 战至中途&#xff0c;蓝紫色天空瞬间变为黑压压一片&#xff0c;噬神者身上一些紫色外壳开始脱落&#xff0c;化为更小的蟒蛇&#xff0c;这些小家伙从出现开始便不要命的向你冲过来&#xff0c;刚清理掉这些小家伙&…...

Netduino Plus 2硬实时驱动WS2812:托管环境下的纳秒级GPIO控制实战

1. 项目概述&#xff1a;当托管环境遇上纳秒级时序如果你玩过嵌入式开发&#xff0c;尤其是用Arduino驱动过WS2812&#xff08;也就是Adafruit的NeoPixels&#xff09;&#xff0c;那你肯定知道那套经典的Adafruit_NeoPixel库&#xff0c;几行代码就能让灯带流光溢彩。但当你把…...