- 博客(69)
- 收藏
- 关注
原创 全志H616开发篇:SG90舵机开发
如下图所示,最便宜的舵机sg90,常用三根或者四根接线,黄色为PWM信号控制用处:垃圾桶项目开盖用、智能小车的全比例转向、摄像头云台、机械臂等 常见的有0-90°、0-180°、0-360°怎么控制转角 向黄色信号线“灌入”PWM信号。PWM波的频率不能太高,50hz,即周期=1/频率=1/50=0.02s,20ms左右数据: 不同的PWM波形对应不同的旋转角度,以20ms为周期,50hz为频率的PWM波。
2024-12-15 20:44:53
279
原创 全志H616开发篇:超声波测距
超声波测距模块是用来测量距离的一种产品,通过发送和收超声波,利用时间差和声音传播速度, 计算出模块到前方障碍物的距离型号:HC-SR04接线参考:模块除了两个电源引脚外,还有TRIG,ECHO引脚Trig,给Trig端口至少10us的高电平Echo信号,由低电平跳转到高电平,表示开始发送波Echo,由高电平跳转回低电平,表示波回来了Echo引脚维持高电平的时间!波发出去的那一下,开始启动定时器 波回来的拿一下,我们开始停止定时器,计算出中间经过多少时间距离=速度(340m/s)*时间/2。
2024-12-15 20:01:00
301
原创 全志H616开发篇:基于官方外设开发
git clone https://github.com/orangepi-xunlong/wiringOP //下载源码cd wiringOP //进入文件夹sudo ./build clean //清除编译信息。
2024-12-11 21:41:34
609
原创 全志H616开发篇:刷机和系统启动和网络配置
就像买了电脑,出厂带有windows操作系统,才算是正在的电脑,开发板需要烧写对应的系统固件,才 能正常发挥作用Orangepi Zero2 全志H616开发板PC机TF卡及读卡器 操作系统镜像SDFormatter TF卡的格式化工具Win32Diskimager 刷机工具USB转TTL,用于系统烧写后的串口登录开发板。
2024-12-11 20:52:39
679
原创 全志H616开发篇:概述
学习平台至于用树莓派,海思,全志都无所谓,初级工程师掌握的是Linux-ARM的软硬件架构开发,主要是Linux系统的学习,只有入职后的中高级工程师才会考虑算法或者协议对底层硬件的差异化,本部分的内容以树莓派讲解,海康威视,OPPO,全志,移远等公司可以完美过度,所以板材的选择根据教程就行,学的是Linux系统。这个领域的程序员一般分三个方向:应用开发、系统开发、算法工程师。3.运行内存 1GBDDR3(与GPU共享)6.视频输出 MicroHDMI20a。9.电源指示灯和状态指示灯。
2024-12-10 18:08:40
617
原创 linux篇:网络编程
大端字节序(将高序字节存储在起始地址):Big endian。UDP->面向报文(不可靠 优:数据量大)常见的字节序:小端字节序(将低序字节存储在起始地址):Little endian。字节序是指多字节数据在计算机内存中存储或者网络传输时各字节的存储顺序。缺陷:无法多机通讯(Linux服务器与手机、51单片机等的通信)数据:协议(http\tcp\udp)(进行对话)socket套接字:TCP->面向连接(可靠)listen在服务端,客户端没有。四.socket服务端代码实现。网络字节序=大端字节序。
2024-12-10 17:12:32
387
原创 linux篇:线程
典型的Linux进程可以看成只有一个控制线程,一个进程在同一时刻只做了一件事情。有了多个控制线程后,在程序设计时可以把进程设计成在同一时刻不止一件事,每个线程各自处理独立的任务。进程是程序执行的一个实例。线程本身不具有内存空间。一个进程里面可以创建多个线程。进程本身不是基本运行单位,而是线程的容器,程序本身只是指令、数据及其组织形式的描述,进程才是程序(那些指令和数据)的真正运行实例。进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其他进程产生影响,而线程只是一个进程中的不同执行路径。
2024-12-07 16:48:31
737
原创 Linux篇:进程间通信
多个进程之间交换信息的方法只能是经由fork或exec传送打开文件,或者通过文件系统,本节将说明进程间相互通信技术——IPC(进程间通信)是消息的链接表,存放在内核中,一个消息队列由一个标识符来标识。看成是1一种特殊的文件,不是普通的文件 ,只存在于内存中。半双工(数据只能在一个方向上流动),具有固定的读端和写端。只能用于亲缘关系的进程间的通信(父子进程或兄弟进程之间)指无名管道,是unix系统IPC最古老的形式。也称命名管道,它是一种文件类型,消息队列 信号量 共享存储。套接字 streams。
2024-12-06 14:29:08
198
原创 Linux篇:进程
每个进程都有一个非负整数表示的唯一ID,叫做pid,类似身份证,Pid=0:称为交换进程作用---进程调度Pid=0:init进程作用---系统初始化注意:编程调用getpid函数获取自身的进程标识符,getppid获取父进程的进程标识符。
2024-10-10 21:48:06
301
原创 Linux篇:open与fopen的区别
open返回文件描述符,而文件描述符是unix系统下的一个重要概念,unix下的一切设备都是以文件的形式操作,如网络套接字、硬件设备等,当然包括普通正规文件。低级文件IO运行在内核态,高级文件IO运行在用户态。fopen是ANSIC标准中C语言库函数,在不同系统中应该调用不同的内核api,返回的是一个指向文件结构的指针。open是unix系统调用函数(包括Linux),返回是文件描述符,它是文件在文件描述符表里的索引。fopen是c标准函数,拥有良好的移植性,而open是unix系统调用,移植性有限。
2024-10-07 21:31:00
173
原创 Linux篇:文件打开、创建与读写
在Linux中要操作一个文件,一般是先open打开一个文件,得到文件描述符,然后对文件进行读写操作(其他操作),最后是close关闭文件即可。Flags:O_RDONLY只读打开 O_WRONLY只写打开 O_RDWR可读可写打开。Pathname:要打开的文件名(含路径,缺省为当前路径)可读 r 可写w 执行x 可读可写rw。ls -l 列出所有清单。
2024-10-07 11:24:20
710
原创 QT篇:多态
想象一下,你有一个遥控器(这就像是一个基类的指针),这个遥控器可以控制不同的电子设备(这些 设备就像是派生类)。无论是电视、音响还是灯光,遥控器上的“开/关”按钮(这个按钮就像是一个虚函 数)都能控制它们,但具体的操作(打开电视、播放音乐、开灯)则取决于你指向的设备。3. 通过基类的引用或指针调用虚函数: 当我们使用基类类型的指针或引用来调用虚函数时,实际调用的是对象的实际类型(派生类) 中的函数版本。接口与实现分离:我们可以设计一个稳定的接口,而将具体的实现留给派生类去处理。
2024-10-04 17:37:29
411
原创 QT篇:继承
然 后,我们可以创建几个派生类,如 Lion 、 Elephant 和 Bird ,这些类继承自 Animal 类,并添加或 修改特定于它们自己的特性和行为。在C++中,继承可以是公有(public)、保护(protected)或私有(private)的,这决定了基类成员在 派生类中的访问权限。Lion 、 Elephant 和 Bird 是派生类,它们继承了 Animal 的特性,并根据自身的特性重写了。2. 扩展性:子类可以扩展父类的功能,添加新的属性和方法,或者重写(覆盖)现有的方法。
2024-10-04 17:35:49
486
原创 QT篇:析构函数
以下是关于 C++ 中析构函数需要了解的十个要点的表格: 标注粗体部分,是能快速上手的内容,方便后续QT的学习,而没有粗体的部分,会在QT结束后,如果安 排C++深入讲解的课程的话,会安排到。当 obj 的生命周 期结束时(即离开了它的作用域), MyClass 的析构函数被自动调用,负责清理资源,防止内存泄露。3. 自动调用:当对象的生命周期结束时(例如,一个局部对象的作用域结束,或者使用 delete 删除 一个动态分配的对象),析构函数会被自动调用。没有正确实现析构函数,可能导致资源泄露或其他问题。
2024-10-04 17:31:43
507
原创 QT篇:构造函数
构造函数的名称与类的名称是完全相同的,并且不会返回任何类型,也不会返回 void。构造函数可用于 为某些成员变量设置初始值。默认的构造函数没有任何参数,但如果需要,构造函数也可以带有参数。类的构造函数是类的一种特殊的成员函数,它会在每次创建类的新对象时执行。构造,那构造的是什么呢?构造成员变量的初始化值,内存空间等。
2024-10-04 17:29:21
460
原创 QT篇:重载
这种做法在设计类的时候是很有用的,因为它可以确保某些函数不 会意外地改变对象的状态,同时也使得这个函数可以在常量对象上被调用。这意味着你可以定义类似于内置类型的运算符行为,使你的自定义类型更加 直观和易于使用。在这个例子中, operator+ 被重载为一个成员函数,接受一个 Point 类型的常量引用作为参数,并返 回两个点相加的结果。示例2:假设我们有一个简单的 Point 类,我们可以重载 + 运算符来实现两个点的加法。2. 至少有一个操作数是用户定义的类型:不能重载两个基本类型的运算符。
2024-10-04 17:26:43
404
原创 QT篇:引用
官方没有明确说明,但是引用确实不是传统意义上的独立变量,它不能“变”嘛 试想变量名称是变量附属在内存位置中的标签,您可以把引用当成是变量附属在内存位置中的第二 个标签。在C语言中,一个数据对应一个内存,通过由一个变量名来访问这个内存空间的数据,叫做直接访问,相 对直接访问,有个间接访问的说法,叫做指针。引用变量是一个别名,也就是说,它是某个已存在变量的另一个名字。当返回一个引用时,要注意被引用的对象不能超出作用域。所以返回一个对局部变量的引用是不合法 的,但是,可以返回一个对静态变量的引用。
2024-10-04 17:21:18
386
原创 QT篇:权限初识
在这个示例中, balance 是一个 private 成员变量,它不能被类的外部直接访问。银行的账户是一个模板,是一个类,有存款人信息和账户额度,而具体的存款人视为一个对象, 一个对象不能私自修改账户额度,需要通过一个操作流程,比如去ATM或者柜台进行操作才能修改 到账户额度, 所以,存款人信息和账户额度设计成私有权限,通过公有的操作流程,也就是公有函数去操作私有 变量。public 权限相当于我们学习C语言结构体一样,不考虑访问权限的存在,但是要注意,类中不写权 限,默认是私有权限。
2024-10-04 17:15:54
343
原创 QT篇:类
C++ 中的类(class)是一种编程结构,用于创建对象。这些对象可以拥有属性(即数据成员)和行为 (即成员函数或方法)。类的概念是面向对象编程的核心之一,其主要目的是将数据和与数据相关的操 作封装在一起。例如,如果你有一个“汽车”类,它可能包含颜色、品牌、型号等属性(数据成员),以及 启动、停止、加速等行为(成员函数)。每当你基于这个类创建一个对象时,你就有了一个具体的汽 车,具有这些属性和行为。C++ 类的基本结构通常包含:1. 数据成员(Attributes):定义类的属性。
2024-10-04 17:11:59
749
原创 QT篇:从C语言快速入门
C++ 中的输入和输出(I/O)主要是通过标准库中的输入输出流来实现的。最常用的是 iostream 库,它 提供了用于输入和输出的基本流类,包括 cin 、 cout 、 cerr 和 clog。1.标准输出流 ( cout )2.标准输入流 ( cin )3.标准错误流 ( cerr ) 和标准日志流 ( clog )cerr 用于输出错误消息。与 cout 不同, cerr 不是缓冲的,这意味着它会立即输出。clog 类似于 cerr ,但它是缓冲的。它通常用于记录错误和日志信息。
2024-10-04 17:05:00
1223
原创 QT篇:C++基础
1.定义命名空间假设我们要创建一个命名空间来包含与圆形相关的功能。我们可以命名这个命名空间为 Cir :在这个头文件中,我们定义了一个名为 Cir 的命名空间,其中包含了计算圆的面积和周长的函数,以及 圆周率常量 PI。2.使用命名空间在另一个文件中,我们可以使用这个命名空间中定义的函数和常量:在 main.cpp 中,我们首先包含了定义 Cir 命名空间的头文件。然后,我们可以使用 Cir:: 前缀来访 问该命名空间中的函数和常量。
2024-10-03 18:24:12
933
原创 QT篇:QT介绍
Qt 是一个跨平台的应用程序和用户界面框架,用于开发图形用户界面(GUI)应用程序以及命令行工 具。它最初由挪威的 Trolltech (奇趣科技)公司开发,现在由 Qt Company 维护,2020年12月8日发 布QT6。Qt 使用 C++ 语言编写,支持多种编程语言通过绑定进行使用。对于许多开发者和小型企业来说,Qt 的开源版提供了一个强大且灵活的开发框架,而对于需要额外支持 和专有功能的大型企业或具有特定需求的项目,商业版则提供了所需的服务和资源。学习QT5和QT6都是可以的,无论选择哪个版本,Q
2024-10-03 18:00:30
643
原创 FreeRTOS篇15:中断管理
任何中断的优先级都大于任务!在我们的操作系统,中断同样是具有优先级的,并且我们也可以设置它的优先级,但是他的优先 级并不是从 015 ,默认情况下它是从 515 ,0~4 这 5 个中断优先级不是 FreeRTOS 控制的(5是 取决于 configMAX_SYSCALL_INTERRUPT_PRIORITY)。
2024-10-03 16:56:05
172
原创 FreeRTOS篇14:软件定时器
简单可以理解为闹钟,到达指定一段时间后,就会响铃。STM32 芯片自带硬件定时器,精度较高,达到定时时间后会触发中断,也可以生成 PWM 、输入 捕获、输出比较,等等,功能强大,但是由于硬件的限制,个数有限。软件定时器也可以实现定时功能,达到定时时间后可调用回调函数,可以在回调函数里处理信 息。
2024-10-03 16:38:38
1047
原创 FreeRTOS篇12:任务通知
FreeRTOS 从版本 V8.2.0 开始提供任务通知这个功能,每个任务都有一个 32 位的通知值。按照FreeRTOS 官方的说法,使用消息通知比通过二进制信号量方式解除阻塞任务快 45%, 并且更加 省内存(无需创建队列)。在大多数情况下,任务通知可以替代二值信号量、计数信号量、事件标志组,可以替代长度为 1的队列(可以保存一个 32 位整数或指针值),并且任务通知速度更快、使用的RAM更少!
2024-10-03 15:32:43
999
原创 FreeRTOS篇10:互斥量
系统中有3个不同优先级的任务H/M/L,最高优先级任务H和最低优先级任务L通过 信号量机制,共享资源。目前任务L占有资源,锁定了信号量,Task H运行后将被阻塞,直到Task L释放信号量后,Task H才能够退出阻塞状态继续运行。但是Task H在等待Task L释放信号量的过 程中,中等优先级任务M抢占了任务L,从而延迟了信号量的释放时间,导致Task H阻塞了更长时 间,这种现象称为优先级倒置或反转。
2024-10-03 11:44:55
395
原创 FreeRTOS篇9:计数型信号量
计数型信号量相当于队列长度大于1 的队列,因此计数型信号量能够容纳多个资源,这在计数型 信号量被创建的时候确定的。
2024-10-03 11:14:08
354
原创 FreeRTOS篇8:二值信号量
二值信号量其实就是一个长度为1,大小为零的队列,只有0和1两种状态,通常情况下,我们用 它来进行互斥访问或任务同步。互斥访问:比如门钥匙,只有获取到钥匙才可以开门任务同步:比如我录完视频你才可以看视频。
2024-10-03 10:57:47
495
原创 FreeRTOS篇7:队列
队列又称消息队列,是一种常用于任务间通信的数据结构,队列可以在任务与任务间、中断和任 务间传递信息。为什么不使用全局变量?如果使用全局变量,兔子(任务1)修改了变量 a ,等待树獭(任务3)处理,但树獭处理速度很 慢,在处理数据的过程中,狐狸(任务2)有可能又修改了变量 a ,导致树獭有可能得到的不是 正确的数据。在这种情况下,就可以使用队列。兔子和狐狸产生的数据放在流水线上,树獭可以慢慢一个个依 次处理。关于队列的几个名词:1)队列项目:队列中的每一个数据;
2024-10-03 10:15:15
932
原创 FreeRTOS篇6:任务综合小实验
创建 4 个任务:taskLED1,taskLED2,taskKEY1,taskKEY2,任务要求如下:taskLED1:间隔 500ms 闪烁 LED1;taskLED2:间隔 1000ms 闪烁 LED2;taskKEY1:如果 taskLED1 存在,则按下 KEY1 后删除 taskLED1 ,否则创建 taskLED1;taskKEY2:如果 taskLED2 正常运行,则按下 KEY2 后挂起 taskLED2 ,否则恢复 taskLED2。
2024-10-02 17:30:42
524
原创 FreeRTOS篇5:任务的状态
类似暂停,通过调用函数 vTaskSuspend() 对指定任务进行挂起,挂起后这个任务将不被执行, 只有调用函数 xTaskResume() 才可以将这个任务从挂起态恢复。处于就绪态的任务是指那些能够运行(没有被阻塞和挂起),但是当前没有运行的任务,因为同 优先级或更高优先级的任务正在运行。当任务处于实际运行状态称之为运行态,即CPU的使用权被这个任务占用(同一时间仅一个任务 处于运行态)。如果一个任务因延时,或等待信号量、消息队列、事件标志组等而处于的状态被称之为阻塞态。1)Running 运行态。
2024-10-02 17:01:19
281
原创 FreeRTOS篇4:任务调度
调度器就是使用相关的调度算法来决定当前需要执行的哪个任务。FreeRTOS中开启任务调度的函数是 vTaskStartScheduler() ,但在 CubeMX 中被封装为。
2024-10-02 16:53:19
387
原创 FreeRTOS篇3:任务的创建与删除
任务可以理解为进程/线程,创建一个任务,就会在内存开辟一个空间。比如: 玩游戏、陪女朋友,都可以视为任务Windows 系统中的 MarkText 、谷歌浏览器、记事本,都是任务。任务通常都含有 while(1) 死循环。
2024-10-02 16:38:28
426
原创 STM32篇(HAL):SPI
W25Q128 是华邦公司推出的一款 SPI 接口的 NOR Flash 芯片,其存储空间为 128 Mbit,相当于16M 字节。Flash 是常用的用于储存数据的半导体器件,它具有容量大,可重复擦写、按“扇区/块”擦除、掉 电后数据可继续保存的特性。Flash 是有一个物理特性:只能写 0 ,不能写 1 ,写 1 靠擦除。
2024-10-02 15:17:37
1610
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人