树莓派初见

  • 一、嵌入式概述?
  • 二、树莓派开发笔记
  • 三、Linux库引入之分文件编程
  • 四、Linux库引入之动态库和静态库
  • 五、静态库的生成和使用
  • 六、动态库的生成和使用

一、嵌入式概述?

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 程序。

树莓派基础之嵌入式开发概述相关推荐

  1. 【创科之龙】零基础学习嵌入式开发以及项目实战开发【第二期视频】

    [创科之龙]零基础学习嵌入式开发以及项目实战开发[学习交流零基础火热进行ing] 大家好,我是aiku,上期的项目学习资料在电子发烧友论坛上分享,大家觉得都很好. 在这里我首先要感谢电子发烧友给我们的 ...

  2. 零基础python嵌入式开发_python写嵌入式

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 我最近在移植python到嵌入式linux上,但是总是有部分模块,比如socke ...

  3. 嵌入式开发概述(树莓派介绍)

    目录 嵌入式定义 嵌入式芯片选型 ARM架构 ARM树莓派 嵌入式定义 国内普遍认同的嵌入式系统的定义是以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功耗.可靠性.成本.体积.功耗等严 ...

  4. IAR 8051 嵌入式开发概述

    节选自IAR C/C++ Compiler User Guide ,47 ~ 58 页 使用IAR 构建工具开发嵌入式软件 通常,嵌入式软件是为特定的微处理器编写的.程序的主要流程被设计成一个无限循环 ...

  5. 零基础python嵌入式开发_零基础Python入门教程

    第01课 python基础之python介绍 课时1python的职业方向和工资 试听 00 : 15 : 54 开始学习 课时2环境的安装 试听 00 : 14 : 16 开始学习 课时3基础班课程 ...

  6. 树莓派与嵌入式开发的关系

    树莓派与嵌入式开发的关系 树莓派是一款基于Linux系统的单板机电脑.它由英国的树莓派基金会所开发,目的是以低价硬件及自由软件刺激在学校的基本的计算机科学教育.树莓派被赋予的希望是,能够帮助全世界的孩 ...

  7. 一次完整的嵌入式开发课程设计经历(附:项目工程及关键代码)

    终于结束了一个星期的嵌入式课程设计(其实也就五天时间),简单说一下这个培训的过程吧.首先介绍了一下Linux的基础知识吧(反正后来也没用上),包括怎么在虚拟机中操作文件以及一些基础的操作命令,然后介绍 ...

  8. 嵌入式开发入门设计 —— 色盲检测系统

    目录 前言 设计目标 搭建环境 1.虚拟机与 windows 挂载共享文件目录 2.搭建虚拟测试环境(屏幕) 3.启动虚拟测试环境(屏幕) Code 1.打开(bmp)图片(open函数) 2.读取( ...

  9. 【Java开发语言 01】第一章 Java语言概述(基础常识+Java语言概述+Java程序运行机制及运行过程+Java语言环境的搭建+开发体验hello world+错误:编码GBK的不可映射字符)

    java入门-第一章Java语言概述 1基础常识 软件开发 人机交互方式 常用的DOS命令(win系统,有一些直接通过命令执行的) 2 Java语言概述 什么是计算机语言 关于面向对象和面向过程 Ja ...

最新文章

  1. 实战:使用Telnet排除网络故障
  2. CVPR'21 | Involution:超越convolution和self-attention的神经网络新算子
  3. 如何首次在 Exchange Server 2003 SP1 上部署 RPC over HTTP
  4. php7取系统信息,操作系统-如何获取运行PHP的操作系统?
  5. numpy基本用法多维数组
  6. python表单防重复提交_关于PHP使用token防止表单重复提交的方法
  7. CNN转换为SNN的算法
  8. 的garch预测_精品细读|基于隐含波动率、已实现波动率和GARCH模型波动率的预测...
  9. MySQL下实现先排序后分组查询(问题记录)
  10. wpf datagrid 计算两个列的差值_天体到达指定方位角的时间计算
  11. Kubernetes(K8s) 1.14.3 单机版配置 node 节点 是 taint 时解决方法
  12. Android视频的操作
  13. UCOSII实时操作系统启动原理和理解
  14. coreldraw梯形校正_CDR绘图教程,教你CorelDRAW如何绘制等腰梯形
  15. 在c语言中 根据数据的组织形式,文件工作组织形式 文件的基本组织方式有哪几种?...
  16. C#学习笔记:子类于父类的构造函数的关系【By Myself】
  17. 合理运营在线教育社群
  18. 计算机专业云平台管理试题,练习题云平台/计算机软考考试试题-考试系统
  19. 似然函数、最大似然估计简单理解
  20. 电脑蓝屏终止代码及其解决方法

热门文章

  1. 解决新电脑开机无法跳过联网(找不到网络控制流进程)
  2. window下Nexus私服高级搭建
  3. 用Python将excel表格按照列拆分为多个表格
  4. L3级自动驾驶接管实验测试平台及其应用研究
  5. 1.22-1.23板卡调试日志
  6. cf #823 Div.2(A~C)
  7. 达梦数据库实例服务无法启动(一)
  8. python适合做网站吗_零基础学python—做网站
  9. 【GitHub】GitHub上值得收藏的100个精选前端项目!
  10. java中浏览器电脑的分辨率_关于移动端适配,你必须要知道的