自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(49)
  • 收藏
  • 关注

原创 基于全志H616的智能垃圾桶项目

超声波测距模块,sg90,蜂鸣器,全志H616,SU-03语音模块。设备工厂:控制sg90舵机,超声波测距模块和蜂鸣器;简单工厂模式:分模块思想编程,使代码更易于维护;指令工厂:控制语音和Socket客户端收发指令;记录工厂:控制文件和数据库的读写。

2023-07-26 09:14:54 230

原创 STM32智能小车项目

硬件接线 B-1A -- PA0 B-1B -- PB1 A-1A -- PA1 A-1B -- PB10。引脚设计: B-1A -- PB0 B-2A -- PB1 A-1A -- PB2 A-1B -- PB10。跟随小车: 跟随模块(左) -- PA8 跟随模块(右) -- PA9。硬件接线 B-1A -- PB0 B-1B -- PB1 A-1A -- PB2 A-1B -- PB10。

2023-07-09 15:56:05 1792 1

原创 基于树莓派的智能家居项目及代码

基于树莓派的智能家居。智能家居用到的硬件有:树莓派3B+、SU-03语音识别模块、pi 摄像头、继电器组、小灯、火焰传感器、蜂鸣器、电磁锁、超声波测距模块、DHT11温湿度检测模块,433M射频编解码模块或者红外模块,面包板等。采用了简单工厂模式的一个设计方式。稳定,拓展性更强。通过工厂创建一个通用的接口,集中管理设备和指令。创建了两个工厂:设备工厂和指令工厂。设备工厂:用于管理卧室灯,餐厅灯,楼梯灯,浴室灯,火焰传感器,蜂鸣器,电磁锁,超声波,摄像头等设备。

2023-07-04 21:20:45 2782 3

原创 智能家居Android设计

【代码】智能家居Android设计。

2023-07-03 22:29:51 328

原创 FreeRTOS之互斥量

但是Task H在等待Task L释放信号量的过 程中,中等优先级任务M抢占了任务L,从而延迟了信号量的释放时间,导致Task H阻塞了更长时 间,这种现象称为优先级倒置或反转。优先级继承:当一个互斥信号量正在被一个低优先级的任务持有时, 如果此时有个高优先级的任 务也尝试获取这个互斥信号量,那么这个高优先级的任务就会被阻塞。在多数情况下,互斥型信号量和二值型信号量非常相似,但是从功能上二值型信号量用于同步, 而互斥型信号量用于资源保护。参数: 无 返回值: 成功,返回对应互斥量的句柄;

2023-07-29 10:09:38 256

原创 FreeRTOS之计数型信号量

计数型信号量相当于队列长度大于1 的队列,因此计数型信号量能够容纳多个资源,这在计数型 信号量被创建的时候确定的。实操 实验需求 创建一个计数型信号量,按下 KEY1 则释放信号量,按下 KEY2 获取信号量。返回值: 成功,返回对应计数型信号量的句柄;失败,返回 NULL。uxInitialCount:创建信号量时分配给信号量的计数值。参数: uxMaxCount:可以达到的最大计数值。计数型信号量相关 API。什么是计数型信号量?

2023-07-29 09:43:43 544

原创 FreeRTOS之二值信号量

信号量这个名字,我们可以把它拆分来看,信号可以起到通知信号的作用,然后我们的量还可以 用来表示资源的数量,当我们的量只有0和1的时候,它就可以被称作二值信号量,只有两个状 态,当我们的那个量没有限制的时候,它就可以被称作为计数型信号量。信号量也是队列的一种。二值信号量其实就是一个长度为1,大小为零的队列,只有0和1两种状态,通常情况下,我们用 它来进行互斥访问或任务同步。实操 实验需求 创建一个二值信号量,按下 KEY1 则释放信号量,按下 KEY2 获取信号量。返回值: 成功,返回对应二值信号量的句柄;

2023-07-29 09:03:36 203

原创 FreeRTOS之队列

2. 数据传递方式 采用实际值传递,即将数据拷贝到队列中进行传递,也可以传递指针,在传递较大的数据的时候 采用指针传递。返回值: 如果队列创建成功,则返回所创建队列的句柄。队列又称消息队列,是一种常用于任务间通信的数据结构,队列可以在任务与任务间、中断和任 务间传递信息。4. 出队、入队阻塞 当任务向一个队列发送消息时,可以指定一个阻塞时间,假设此时当队列已满无法入队。创建一个队列,按下 KEY1 向队列发送数据,按下 KEY2 向队列读取数据。创建队列时,需要指定队列长度及队列项目大小。

2023-07-29 08:39:32 248

原创 任务的创建与删除

调度器就是使用相关的调度算法来决定当前需要执行的哪个任务。FreeRTOS中开启任务调度的函数是 vTaskStartScheduler() ,但在 CubeMX 中被封装为 osKernelStart()。

2023-07-29 08:00:04 153

原创 FreeRTOS简介

Free即免费的,RTOS的全称是Real time operating system,中文就是实时操作系统。注意:RTOS不是指某一个确定的系统,而是指一类操作系统。比如:uc/OS,FreeRTOS,RTX, RT-Thread等这些都是RTOS类操作系统。FreeRTOS是一个迷你的实时操作系统内核。作为一个轻量级的操作系统,功能包括:任务管 理、时间管理、信号量、消息队列、内存管理、记录功能、软件定时器、协程等,可基本满 足较小系统的需要。

2023-07-27 15:27:14 566

原创 嵌入式数据库之SQLite

轻量化,易用的嵌入式数据库,用于设备端的数据管理,可以理解成单点的数据库。传统服务器型数据 库用于管理多端设备,更加复杂。SQLite是一个无服务器的数据库,是自包含的。这也称为嵌入式数据库,这意味着数据库引擎作 为应用程序的一部分运行。MySQL需要运行服务器,MySQL将需要客户端和服务器架构通过网络进行交互。SQLite和MySQL的优缺点对比:基于嵌入式的数据库主要有:SQLite,Firebird,Berkeley DB,eXtremeDB。

2023-07-27 08:07:20 416

原创 libcurl库简介

libcurl是一个跨平台的网络协议库,支持http, https, ftp, gopher, telnet, dict, file, 和ldap 协议。libcurl同样支持HTTPS证书授权,HTTP POST, HTTP PUT, FTP 上传, HTTP基本表单上传,代理,cookies,和用户认证。libcurl的官网库下载函数只能用一次。(其实在调用curl_global_cleanup 函数后仍然可再用)

2023-07-25 16:37:43 134

原创 HTTPS简介

http协议是明文传输的,因此很容易被截取和解析,泄漏个人数据。https协议是在http和tcp之间多添加了一层,进行身份验证和数据加密。

2023-07-25 16:30:25 511

原创 HTTP协议简介

这个也是最不好分析的,原则上post肯定要比get安全,毕竟传输参数时url不可见,但也挡不住部分人闲的没事在那抓包玩。而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);get请求,没有请求主体部分!主要的响应数据,在浏览器的主体区域显示的数据都是相应主体!第一行,包含三个信息:请求方式,url,http协议版本。

2023-07-25 16:15:31 53

原创 OSI模型简介及socket,tcp,http三者之间的区别和原理

OSI 模型(Open System Interconnection model):一个由国际标准化组织提出的概念模型,试图提供一个使各种不同的计算机和网络在世界范围内实现互联的标准框架。它将计算机网络体系结构划分为七层,每层都可以提 供抽象良好的接口。了解 OSI 模型有助于理解实际上互联网络的工业标准——TCP/IP 协议。OSI 模型各层间关系和通讯时的数据流向如图所示:显然、如果一个东西想包罗万象、一般时不可能的;在实际的开发应用中一般时在此模型的基础上进行裁剪、整合!七层模型介绍。

2023-07-25 15:10:40 1164

原创 Linux系统编程之进程

孤儿进程:父进程如果不等待子进程退出,在子进程之前就结束了自己的“生命”,此时子进程叫做孤儿进程。Linux避免系统存在过多孤儿进程,init进程收留孤儿进程,变成孤儿进程的父进程。那么A叫做父进程,B叫做子进程,父子进程是相对的概念,理解为人类中的父子关系。a.使用ps指令查看,实际工作中,配合grep来查找程序中是否存在某一个进程。进程是程序的一次运行活动,通俗点意思是程序跑起来了,系统中就多了一个进程。子进程退出状态不被收集,变成僵死进程(僵尸进程)父进程等待子进程退出,并收集子进程的退出状态。

2023-07-25 10:56:30 36

原创 Linux系统编程之文件

​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ Mode:一定是在flags中使用了O_CREAT标志,mode记录待创建的文件的访问权限创建函数。O_TRUNC :打开文件时,如果这个文件中本来是有内容的,而且为只读或只写成功打开,则将其长度截短为0。操作成功时,返回文件指针相对于文件头的位置。

2023-07-25 07:41:26 110

原创 Linux原生串口开发

【代码】Linux原生串口开发。

2023-07-09 21:29:53 53

原创 H616基于wiringPi的串口开发

【代码】H616基于wiringPi的串口开发。

2023-07-09 20:23:57 81

原创 OLED屏—IIC协议

从命令运行结果能观察到系统支持I2C-3和I2C-5的驱动,而H616的外设我们看到只有一个IIC接 口,用的是IIC-3。由 26pin 的原理图可知, Orange Pi Zero 2 可用的 i2c 为 i2c3。启动 linux 系统后, 先确认下/dev 下存在 i2c-3 的设备节点。Linux一切皆文件,每个硬件设备“对应”一个文件,由驱动程序提供映射。开始测试 i2c, 首先安装 i2c-tools。使用官方提供的oled_demo.c。

2023-07-09 20:09:52 140

原创 全志H616的SG90舵机开发

ITIMER_VIRTUAL //数值为1,进程执行时递减计时器的值,发送的信号是SIGVTALRM。ITIMER_PROF //数值为2,进程和系统执行时都递减计时器的值,发送的信号是SIGPROF。返回说明: 成功执行时,返回0。it_interval:计时器的初始值,一般基于这个初始值来加或者来减,看控制函数的参数配置 it_value:程序跑到这之后,多久启动定时器。ITIMER_REAL //数值为0,计时器的值实时递减,发送的信号是SIGALRM。which:三种类型。

2023-07-09 19:10:22 46

原创 全志H616超声波测距

波发出去的那一下,开始启动定时器 波回来的拿一下,我们开始停止定时器,计算出中间经过多少时间 怎么算距离 距离=速度(340m/s)*时间/2。超声波测距模块是用来测量距离的一种产品,通过发送和收超声波,利用时间差和声音传播速度, 计算出模块到前方障碍物的距离。由低电平跳转到高电平,表示开始发送波 怎么知道接收了返回波 Echo,由高电平跳转回低电平,表示波回来了。接线参考:模块除了两个电源引脚外,还有TRIG,ECHO引脚。怎么算时间 Echo引脚维持高电平的时间?怎么知道开始发了 Echo信号?

2023-07-09 17:45:10 165

原创 全志H616外设库之wiringPi库

1.下载wiringPi库。

2023-07-09 17:40:39 98

原创 全志H616香橙派简介及登录

USB转TTL模块GND、TX和RX引脚需要通过杜邦线连接到开发板的调试串口上。1.串口登录:使用USB转TTL模块,使用MobaXterm免费好用。a.USB转TTL模块的GND接到开发板的GND上。b.USB转TTL模块的RX接到开发板的TX上。c.USB转TTL模块的TX接到开发板的RX上。登录方式:串口登录,SSH登录。4.修改内核启动日志级别。用户:orangepi。密码:orangepi。密码:orangepi。

2023-07-09 17:26:43 350 1

原创 设计模式简介

工厂模式(Factory Pattern)是 最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。

2023-07-07 22:45:52 26

原创 Linux内核驱动

为了管理这些设备,系统为设备编了号,每个设备号又分为主设备号和次设备号。主设备号用来区分不同种类的设备,而次设备号用来区分同一类型的多个设备。那么,可以写一个LED灯的字符设备驱动程序,可以将其主设备号注册成5号设备,次设备号分别为1和2。拷贝: scp ./drivers/char/pin4driver.ko [email protected]:/home/pi/Driver。拷贝到 /home/duyong/SYSTEM/linux-rpi-4.14.y/drivers/char。

2023-07-07 22:31:20 63

原创 文件系统的认知

不管是什么文件类型,不管文件是磁盘还是设备,都只用open read write统一操作。(装系统的位置)也可以随意在C盘存放文件. D盘(用户随意发)就是对各种文件系统的一个抽象,它为各种文件系统提供了一个通用的接口,以上说的方法:就是文件管理系统(程序),简称文件系统。按照功能来分区,每个分区严格存放文件(开发者)文件系统是操作系统用于明确存储设备组织文件的方法。常规认知: 根目录,不是分区,和windows不同。文件系统(文件管理系统的方法)的种类有哪些?什么是文件系统目录结构?

2023-07-07 07:25:24 29

原创 Android Activity生命周期

Android Activity 是 Android 应用程序的重要组成部分,代表应用程序中的一个屏幕。当用户在应用程序中执行某些操作时,例如启动应用程序或切换到不同的屏幕,Android 操作系统会按照特定的顺序调用 Activity 的生命周期方法。这些方法定义了 Activity 的状态和生命周期,你可以使用这些方法来执行一些操作并处理应用程序的状态。Android Activity生命周期。

2023-07-02 07:55:47 31

原创 树莓派Linux源码配置

sudo mount /dev/sdb1 data1 一个fat分区,是boot相关的内容,kernel的img。编译完成后最终生成 .config文件 ,该文件指导Makefile去把又用的东西配置成内核。在本目录生成一个kernel_new.img文件,这个文件就是要放到sd卡中的文件。厂家提供配置好的Linux内核源码,比如:买了树莓派,提供树莓派linux内核源码。为驱动代码做铺垫,驱动底层代码需要一个编译好的内核,编译之前必须配置合适的内核;树莓派1的工程是bcmrpi_defconfig;

2023-06-23 23:06:36 211

原创 Linux内核源代码目录树结构

和32位PC相关的代码存放在i386目录下,其中比较重要的包括kernel(内核核心部分)、mm(内存管理)、math-emu(浮点单元仿真)、lib(硬件相关工具函数)、boot(引导程序)、pci(PCI总线)和power(CPU相关状态)。在i386体系下,系统引导将从arch/i386/kernel/head.s开始执行,并进而转移到init/main.c中的main()函数初始化内核。内核的最核心部分,包括进程调度、定时器等,和平台相关的一部分代码放在arch/*/kernel目录下。

2023-06-23 21:45:58 221 1

原创 ubuntu安装后基础工具安装命令

【代码】ubuntu安装后基础工具安装命令。

2023-06-23 21:35:10 134 1

原创 软链接与硬链接

【代码】软链接与硬链接。

2023-06-23 21:17:03 30 1

原创 树莓派的交叉编译和编译

1.C51 交叉编译的发生在keil(集成环境上面):在windows上面编写C51代码,编译成可执行代码,如xxx.hex,在C51上运行。2.在ubuntu上面编写树莓派的代码,编译成可执行代码,如a.out,在树莓派上运行,不是在ubuntu linux上面运行。test_1智能在ubuntu运行,test_2智能在树莓派上运行。编译:是在一个平台上生成该平台的可执行代码。交叉编译器(交叉编译工具链):交叉编译需要用到的工具。在一个平台上生成另一个平台上的可执行代码。树莓派-也需要交叉编译。

2023-06-23 21:14:18 113 1

原创 树莓派更新VIM

【代码】树莓派更新VIM。

2023-06-23 20:38:00 58 1

原创 树莓派的刷机和登录方式介绍

2.然后再修改根目录的"cmdline.txt",将里面的内容全部替换成以下内容,以防万一,请先备份好这个文件的原内容。1.打开SD卡根目录的"config.txt"文件,将以下内容添加在最后并且保存。这样就停止了蓝牙,解除了对串口的占用。Ctrl+o 保存,会有提示是否写入。Nano是文档编辑器,已进入便可以编写。将SD卡插入树莓,接上电源启动。默认密码:raspberry。

2023-06-23 20:30:46 475 1

原创 Android WebView 的使用

Android WebView在Android平台上是一个特殊的View,它能用来显示网页,这个WebView类可以被用来在app中仅仅显示一张在线的网页,当然还可以用来开发浏览器。WebView内部实现是采用渲染引擎(WebKit)来展示view的内容,提供网页前进后退、网页放大、缩小、搜索等功能。WebView是一个基于WebKit引擎、展现Web页面的控件,Android的WebView在低版本和高版本采用了不同的WebKit版本内核。

2023-06-23 16:29:51 408 1

原创 Android的Handler消息处理机制

【代码】Android的Handler消息处理机制。

2023-06-23 07:52:26 64 1

原创 Android开发之服务器与客户端搭建

网络访问不能在主线程(UI线程)中进行,否则程序会崩溃。要创建线程来发起网络访问。

2023-06-22 11:41:36 738 1

原创 Android开发之页面跳转

右击src->New->Other->Android Activity->Next->Blank Activity->输入页面名字即可。SecondActivity:接收参数。1.如何创建多个页面。

2023-06-22 00:53:55 3643 1

原创 安卓按键响应的几种方式

/2.2实现接口类,在类中实现onclicked方法,写业务代码@Overridebreak;break;@Override//1.绑定 局部变量button和xml中的button, findViewById//3.2.3为1,2两部做的准备进行绑定。使得按键被按下后执行你写的业务代码。

2023-06-22 00:47:55 140 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除