树莓派基础之嵌入式开发概述

2023-11-05

一、嵌入式概述?

1.什么是嵌入式:

a)嵌入式即嵌入式系统,IEEE(美国电气和电子工程师协会)对其定义是用于控制、监视或者辅助操作机器和设备的装置,是一种专用的计算机系统;

b)国内普遍认同的嵌入式系统定义是以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功能,可靠性,成本,体积,功耗等严格要求的专用计算机系统;

c)从应用对象上加以定义来说,嵌入式系统是软件和硬件的综合体,还可以涵盖机械的附属装置

  • 事实上,所有带有数字接口的设备,如手表,微波炉,录像机,汽车,机器人等,都使用嵌入式系统,有些嵌入式系统还包含操作系统

2.嵌入式芯片选型:

单片机能搞定的
1)共享单车的锁
单片机GPS定位模块 NB-IOT模块发送定位消息 蓝牙 电磁锁

2)宿舍楼下刷卡开铁门
单片机,读卡器,电磁锁

3)快递小哥扫快递二维码
单片机,屏幕,二维码技术

4)共享汽车开锁
GSM通信模块,电磁锁(基于汽车锁改造)

低端单片机搞不定的,用ARM架构,比如STM32,比如ARM+LINUX+QT,比如安卓系统
1)人脸识别
比如C51的摄像头,清晰度低,算法慢, 准确度低

2)带人机交互的
C51,STM32配合屏幕,UI自定义底层UI风格体验差,开发量大

QT方案:通常基于Linux,STM32跑不了Linux,所以用nanopi,树莓派,2440等

安卓的方案:基于安卓,高通的,华为海思等

3.什么是ARM:
公司名字:
英国ARM公司(ARM公司总部设立在上海,执行中国地区所有的产品业务和售后支持。其中在深圳办事处,专门处理ARM相关技术问题。)

硬件架构的一种:
ARM架构(STM32,高通,骁龙,海思,树莓派的Cortex-A53d等)
Intel架构(AMD)
MIPS架构
powerPC架构

二、树莓派开发笔记

1.树莓派刷机:
在这里插入图片描述
2.树莓派登录:
2.1 HDMI 视频线 连接到显示器

2.2 串口
2.2.1 设备破解
默认情况,树莓派的串口和蓝牙连接。
想办法断开蓝牙连接,把串口用来数据通信
a)观看树莓派的启动过程,字符

b)修改系统配置,串口登入树莓派
1)打开SD卡根目录的"config.txt"这个文件,将以下内容添加在最后一行并且保存

dtoverlay=pi3-miniuart-bt
这段代码用于停止了蓝牙,解除了对串口的占用。

2)然后再打开SD卡根目录的"cmdline.txt",将里面的内容全部替换成以下内容

dwc_otg.lpm_enable=0 console=tty1 console=serial0,115200 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait

2.2.2
默认账号:pi
默认密码:raspberry

2.3 通过网络登入树莓派
2.3.1)让树莓派入网
修改

  sudo nano /etc/wpa_supplicant/wpa_supplicant.conf

在这里插入图片描述

nano是文档编辑器,已进入便可以编写。
Ctrl+o保存,会有提示是否写入。我们按回车,Ctrl+x退出
sudo reboot 重启树莓派
sudo shutdown -h now 关机树莓派

2.3.2) 固定树莓派IP地址

  sudo nano /etc/rc.local

在这里插入图片描述

2.4 图形方式登入树莓派
2.4.1)首先在树莓派在终端用指令下载一个开源软件xrdp(远程桌面)

sudo apt-get install xrdp

2.4.2)下载好之后在pc机上用远程桌面登入树莓派

3.VIM更新到好用的版本
3.1)默认的源是国外的,apt-get 安装的时候失败,我们更新成国内的源
3.2)
先使用命令编辑sources.list文件

sudo nano /etc/apt/sources.list

把之前的源用#键注释掉,然后使用下面的源贴进来
在这里插入图片描述

deb http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ stretch main contrib non-free rpi

更新源

sudo apt-get update

安装新版VIM

sudo apt-get install vim

4.树莓派和windows的File Zilla文件共享
在这里插入图片描述
拖拽的方式实现双方的传输。强调的是IP地址前面要加sftp,以免传输过程中丢失数据

三、Linux库引入之分文件编程

1.分文件编程:
好处:
分模块编程的思想
比如在工作中,一个大项目:
网络 A同学做
超声波 B同学做
点击 C同学做

对公司而言可以大大提高效率:
a.功能责任划分
b.方便调试
c.主程序简洁

2.来段简单代码演示下:
主函数文件代码

#include<stdio.h>
#include"text.h"//包含调用函数的文件名
int main()
{
    printf("xiaopapa handsome!\n");
    papa();
    return 0;
}

调用函数文件代码:

#include<stdio.h>
void papa()
{
     printf("yes i think so!\n");
}

主函数需要包含调用函数的函数名的文件名,所以文件名是:
文件名是text.h

void papa();//文件内容是调用函数的函数名

运行结果:

两个文件一起编译,然后形成一个可执行程序
在这里插入图片描述
注意:

  • include<stdio.h> <>是指当你gcc编译一个文件的时候默认情况下,会自动帮你去 /usr/include下找到stdio.h的文件。“ ” 是指会在当前目录下去找 text.h的文件,找不到会去include下去找,找不到就报错

四、Linux库引入之动态库和静态库

库的介绍:
一个“程序函数库”简单来说就是一个文件包含了一些编译好的代码和数据,这些编译好的代码和数据可以在事后供其他的程序使用。程序函数库可以使整个程序更加模块化,更容易重新编译,而且更方便升级。

程序函数库可以分为3种类型:静态函数库(static libraries),共享函数库(shared libraries),动态加载函数库(dynamically loaded libraries):

1.静态函数库,是在程序执行前(编译)就加入到目标程序中去了;

优点:
1)静态库被打包到应用程序中,加载速度快

2)发布程序无需提供静态库,因为已经在APP中,移植方便

缺点:
1)链接是完整的拷贝至可执行文件中,多次使用就有多份冗余拷贝

2)更新,部署,发布麻烦

2.动态函数库,是在程序执行时动态(临时)由目标程序去调用;

优点:
1)链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序共用,节省内存

2)程序升级简单,因为APP里面没用库的源代码,升级之后只要库的名字不变,函数名以及参数不变,只是实现做了优化,就能加载成功

缺点:
1)加载速度比静态库慢

2)发布程序需要提供依赖的动态库

五、静态库的生成和使用

1.静态库的制作
格式 xxxx.a
第一步)gcc demo2.c -c 生成 demo2.o 文件

第二部)ar rcs libdemo2.a demo2.o 生成 libdemo2.a 的静态文件库

2.库的使用

编译 gcc demo1.c -l demo2 -L ./ -o mainProStatic  

生成mianProStatic可执行文件
-l demo2中的 -l 是制定要用的静态库,库名砍头去尾
-L 则是告诉gcc编译器从-L指定的路径去找静态库。默认是从 /usr/lib 或者 /usr/local/lib 去找

3.下面请看示例:
在这里插入图片描述

六、动态库的生成和使用

1.动态库的制作:

gcc -shared -fpic demo2.c -o libdemo2.so

-shared 指生成动态库

-fpic 指在生成目标文件时就得使用该选项,以生成位置无关的代码

2.动态库的使用:

gcc demo1.c -ldemo2 -L ./ -o mainProDy

3.引用动态库,怎么指定动态库的位置:
带动态库的程序,可以指定该程序运行的时候,在 LD_LIBRARY_PATH 所指定的路径去找库文件

例如:

export  LD_LIBRARY_PATH="/home/pi/Text"

相当于在此路径配置了环境变量,该路径下的目标程序的动态库可以被等到执行。
在这里插入图片描述

但是该路径设置的环境变量只能在该终端窗口运行,所以我们可以在该路径下写个shell脚本,让他另外开一个终端窗口也可运行:
例如我创建一个文件:touch text2

export LD_LIBRARY_PATH="/home/pi/Text"
./mainProDy

然后我们在终端上给该文件赋予可执行权限:chmod +x text2
这样我们就可以直接运行该 text2 文件了,./text2 相当于运行了 ./mainProDy 程序。
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

树莓派基础之嵌入式开发概述 的相关文章

  • UFT的使用

    UFT是一种自动化测试工具 以VBScript为内嵌语言 其支持功能测试和回归测试自动化 可用于软件应用程序和环境的测试 基本功能包括 创建测试 检验数据 增强测试 运行测试脚本 分析测试结果 维护测试 视图分为 关键字视图和专家视图 UF

随机推荐

  • matlab敏感性分析代码,sobol敏感性分析 matlab代码

    sobol 参数敏感性分析 参考 csdn https blog csdn net xiaosebi1111 article details 46517409 wiki https en wikipedia org wiki Varianc
  • spring框架:简介+依赖注入

    目录 一 spring简介 二 创建项目 三 spring创建对象 四 SpringBean管理 1 注入实现 XML 2 注入实现 注解 一 spring简介 spring诞生与2003年 是一个轻量级的 IOC Inversion Of
  • Guns 技术文档 v5.1

    stylefeng 2018 10 17 10 22 字数 27433 阅读 4795 Guns 技术文档 v5 1 stylefeng技术文档 Guns 技术文档 v5 1 1 序言 1 1 文档简介 1 2 Guns教程 1 3 获取帮
  • 为何会频繁收到垃圾短信?使用这3种方法,跟垃圾短信说再见

    为何会频繁收到垃圾短信 使用这3种方法 跟垃圾短信说再见 在这个信息传播途径比较广泛的年代 我们会经常收取到一些垃圾短信 影响我们正常的生活 这些号码中大部分显示的都是一串很长的数字 有的时候还会收到模仿官方的号码的短信类型 这些垃圾信息
  • IOException parsing XML document from ServletContext resource

    错误是我们学习的机会 不要错过明白明这个错误原因的机会 那么我们就可以更加深刻得理解这个问题 在启动springmvc的程序去访问的时候 报IO异常 一般情况下IO异常就是文件找不到 详细错误如下 org springframework b
  • python程序打包exe,亲测版

    经过鄙人的多次摸索 总结如下 用到的打包工具是Pyinstaller 如果python安装没问题的话 在cmd控制台里输入 pip install Pyinstaller 如果下载失败 多半是网络的原因 Pyinstaller安装成功后 进
  • seaborn.heatmap参数介绍

    Seaborn的heatmap各个参数介绍 seaborn heatmap seaborn heatmap data vmin None vmax None cmap None center None robust False annot
  • 微信小程序钱包支付页面案例

    小程序钱包页面 效果图 WXML代码
  • 数据结构 图 part1

    文章目录 图 定义 形式化定义 ADT 有向图和无向图 有向图 无向图 完全有向图和完全无向图 完全无向图 完全有向图 术语 邻接顶点 子图 权 网 度 顶点的度 路径 路径长度 连通图与连通分量 强连通图与强连通分量 存储结构一 邻接矩阵
  • realme支持鸿蒙系统,realme Q3 Pro:接受不了这四个缺点,请谨慎入手!

    64MP主摄 可能不是你想的那样 realme Q3 Pro的64MP像素后置主摄传感器也是发布会中没有提到的 其实这个主摄并非GT系列的IMX682传感器 而是豪威科技的OV64B传感器 IMX682的底更大 向来有底大一级压死人的说法
  • MySQL错误处理--1146错误

    在MySQL的主从复制过程中 出现了1146错误 提示的错误原因是 在默认的数据中找不到指定的表 show slave status G 现实的同步状态 Slave IO Running YESSlave SQL Running NoLas
  • WebGL(二)——什么是WebGL

    WebGL 二 什么是WebGL 什么是WebGL WebGL 全写Web Graphics Library 字面意义理解就是web图像库 是一种3D绘图协议 也可以说是一个负责图形处理的JavaScript API 可在任何兼容的Web浏
  • 蒙特卡洛方法(入门详解)

    一 定义 蒙特卡洛又称统计试验法 是基于概率论的算法 其实质就是将问题转化为一个概率问题 并用计算机模拟产生一堆随机数 再对随机数进行统计工作 蒙特卡洛模拟方法 建立概率模型 计算机模拟 数理统计 二 原理 大数定理证明 在大样本的情况下
  • 顶刊IJCV 2022!基于深度学习的图像去模糊综述来了!

    点击下方卡片 关注 CVer 公众号 AI CV重磅干货 第一时间送达 点击进入 gt CV 微信技术交流群 转载 机器之心 本文提出了一个图像去模糊方向的综述 来自澳大利亚国立大学 中山大学 美国加州大学 Merced 分校 日本乐天研究
  • 前端不使用 i18n,如何优雅的实现多语言?

    前言 关于ERP管理系统的多语言 或者其他应用的多语言一直是我们比较麻烦的问题 大部分是使用 i18n 在代码里进行配置 如果想要修改语言就要自己去改代码 今天我们分享一下如何不使用 i18n 去实现多语言 用到以下的技术栈 ERP管理系统
  • [Python图像处理] 四十一.Python图像平滑万字详解(均值滤波、方框滤波、高斯滤波、中值滤波、双边滤波)

    该系列文章是讲解Python OpenCV图像处理知识 前期主要讲解图像入门 OpenCV基础用法 中期讲解图像处理的各种算法 包括图像锐化算子 图像增强技术 图像分割等 后期结合深度学习研究图像识别 图像分类应用 希望文章对您有所帮助 如
  • 安卓手机玩游戏卡顿怎么解决_告别卡顿 打造Android手机的“游戏模式”

    如今的手游 除了大型3D单机游戏以外 对硬件的需求其实谈不上太过苛刻 比如 王者荣耀 哪怕是骁龙430级别的处理器也能流畅运行 而之所以游戏过程中偶尔出现卡顿 可能还是一些细节设置没有优化到位 有的手机已经自带游戏模式了 问题是没有这个功能
  • 烂大街的 Spring 循环依赖问题,你真以为自己会了吗?

    什么是循环依赖 所谓的循环依赖是指 A 依赖 B B 又依赖 A 它们之间形成了循环依赖 或者是 A 依赖 B B 依赖 C C 又依赖 A 形成了循环依赖 更或者是自己依赖自己 它们之间的依赖关系如下 这里以两个类直接相互依赖为例 他们的
  • google GMS测试环境搭建详细教程

    1 解压jdk tar xvf jdk 8u172 linux x64 tar gz 2 配置java环境 sudo chmod 777 etc profile sudo vim etc profile 3 测试java java vers
  • 树莓派基础之嵌入式开发概述

    树莓派初见 一 嵌入式概述 二 树莓派开发笔记 三 Linux库引入之分文件编程 四 Linux库引入之动态库和静态库 五 静态库的生成和使用 六 动态库的生成和使用 一 嵌入式概述 1 什么是嵌入式 a 嵌入式即嵌入式系统 IEEE 美国