自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 MySQL数据库(五):事务

事务就是多条sql语句,要么这多条语句都执行,要么都不执行。任何一个步骤执行失败都会回滚所有步骤。例:银行转账1.要查看支票账户的余额是否高于转账金额2.从支票账户余额减去转账金额3.在储蓄账户余额加上转账金额这三个步骤就是一个事务,任何一个执行失败就要回滚所有步骤。

2024-06-24 12:46:47 211

原创 MySQL数据库(四):视图和索引

定义视图建议以"_v"开头,create view 视图名 as select语句;

2024-06-24 10:07:04 445

原创 MySQL数据库(三):读取数据库数据

上一节,我们介绍了数据库的基本操作,以及最后演示了如何使用库来连接数据库,在实际应用中,我们通常需要按照指定的条件对数据库进行操作,即增删改查操作,这是非常重要的!这一节我们继续通过一个例子,来演示如何查询数据库。

2024-06-24 01:54:50 113

原创 MySQL数据库(二):数据库基本操作

MySQL是一种流行的关系型数据库管理系统,广泛用于Web应用和各种数据存储需求。通过本次介绍,您将学习如何进行MySQL数据库的基本操作,包括创建数据库和表、插入和查询数据、更新和删除记录。这些基础知识将为您打下坚实的数据库操作基础。

2024-06-24 00:43:27 624

原创 MySQL数据库(一):数据库介绍与安装

数据库 :它就是存放数据的仓库,实际上它就是一个存数据的文件,并且是可以持久化存储的,是存在磁盘上的,但这个文件不能由我们直接操作,因此又提供了一个数据库管理系统,因此,我们平时所说的数据库既包含了存储数据的文件,又包含了一个管理和操作这个文件的一个系统,这个系统称之为数据库管理系统,因此,我们平时说的数据库是存放数据的文件和数据库管理系统之和,数据库是一个按数据结构来存储和管理数据的计算机软件系统。

2024-06-23 22:18:10 571

原创 嵌入式开发二十一:定时器之通用定时器

STM32F407 的通用定时器有 10 个,为了更好的区别各个定时器的特性,我们列了一个表 格,如下所示:STM32F4 的通用定时器包含一个 16 位或 32 位自动重载计数器(CNT),该计数器由可编 程预分频器(PSC)驱动。STM32F4 的通用定时器可以被用于:测量输入信号的脉冲长度(输入 捕获)或者产生输出波形(输出比较和 PWM)等。使用定时器预分频器和 RCC 时钟控制器预分频器,脉冲长度和波形周期可以在几个微秒到几个毫秒间调整。

2024-06-21 23:57:31 569

原创 嵌入式开发二十:定时器之基本定时器

定时器(Timer)最基本的功能就是定时了,比如定时发送 USART 数据、定时采集 AD 数据等等。如果把定时器与 GPIO 结合起来使用的话可以实现非常丰富的功能,可以测量输入信号的脉冲宽度,可以生产输出波形。定时器生产 PWM 控制电机状态是工业控制普遍方法,这方面知识非常有必要深入了解。下面对定时器的用途做个简单介绍:STM32F4系列微控制器的定时器具有广泛的用途。1. 基本定时器(TIM6 和 TIM7)简单计时:用于生成定时中断。DAC 触发:用于触发数模转换(DAC)。

2024-06-20 13:58:56 792

原创 嵌入式开发十九:SysTick—系统定时器

SysTick 定时器也叫SysTick 滴答定时器,它是 Cortex-M4 内核的一个外设, 被嵌入在 NVIC 中,用来产生SYSTICK异常(异常号:15)。它是一个 24 位向下递减的定时器,每计数一次所需时间为 1/SYSTICK,SYSTICK 是系统定时器时钟,它可以直接取自系统时钟,还可以通过系统时钟 8 分频后获取,本套程序中我们采用后者,即每计数一次所需时间为 1/(168/8)us,换句话说在 1us 的时间内会计数 21 次。

2024-06-20 00:58:21 1046

原创 嵌入式开发十八:USART串口通信实验

上一节我们学习了串口通信的基本理论,串口通信是学习单片机的一个重要的一步,非常重要,这一节我们通过实验来学习串口通信的使用,以及串口的接收中断的使用。

2024-06-19 23:05:40 882

原创 Linux基础 (十八):Libevent 库的安装与使用

Libevent 是一个高效的、轻量级的事件通知库用于开发需要处理大量并发连接的网络应用程序。它提供了一种机制来执行回调函数,当特定事件发生在文件描述符上,或在超时发生时,Libevent 可以处理不同类型的事件,包括 I/O 事件、信号事件和定时事件。为每种事件类型定义相应的处理回调函数。例如,针对新连接的事件,定义一个回调函数来处理新连接;针对读写事件,定义相应的回调函数来处理数据的读写操作。这些回调函数是处理事件的核心逻辑,通过它们来实现具体的业务逻辑。

2024-06-15 00:30:25 618

原创 Linux基础 (十七):I/O 复用函数的使用

select 系统调用的用途是:在一段指定时间内,监听用户感兴趣的文件描述符的可读、 可写和异常等事件。selecst 成功时返回就绪(可读、可写和异常)文件描述符的总数。如果在超时时间内没有任何文件描述符就绪,select 将返回 0。elect 失败是返回-1.如果在 select 等待 期间,程序接收到信号,则 select 立即返回-1,并设置 errno 为 EINTR。select() 第一个参数是描述符最大值加一,第二个是读事件,第三个是写事件,第四个是异常事件,第五个参数是超时时间。

2024-06-13 20:51:57 579

原创 Linux基础 (十六):HTTP 协议与 web 服务器

本篇博客,我们将共同探索HTTP协议的工作原理,理解它是如何在客户端和服务器之间传递信息的。我们将深入研究HTTP请求和响应的结构,了解状态码、头部信息和常见的HTTP方法。同时,我们还会讨论HTTPS的安全机制,了解如何保护数据的传输安全。

2024-06-12 08:29:06 891

原创 Linux基础 (十五):TCP 协议特点和UDP协议

握手只能是三次:例如客户端连接服务器后然后关闭了,服务器收到了并回复客户端,此时服务器就认为和客户端建立了链接,这个链接就一直保持着,但是客户端已经没了,所以还需要客户端第三次进行确认回复,来确保双方都保持链接。4、三次握手时可能出现什么攻击?

2024-06-09 22:18:42 1204 2

原创 FreeRTOS基础(十四):事件标志组

1.4 事件标志组与队列、信号量的区别。

2024-06-09 15:33:07 1030

原创 FreeRTOS基础(十三):队列集

一个队列只允许任务间传递的消息为同一种数据类型,如果需要在任务间传递不同数据类型的消息时,那么就可以使用队列集!它的。

2024-06-09 14:52:11 1099

原创 FreeRTOS基础(十二):信号量

本篇博客,我们详细介绍另一个重要的应用,信号量。目录一、信号量的简介1.0 举例理解1.1 FreeRTOS中的应用1.2 队列与信号量的对比二、二值信号量2.1 二值信号量的概念 2.2 二值信号量的API函数接口2.2.1 使用二值信号量的过程2.2.2 创建二值信号量函数2.2.3 释放二值信号量函数2.2.4 获取二值信号量函数2.3 二值信号量实验四、计数型信号量4.1 计数型信号量的概念4.2 计数型信号量的API函数接口4.2.1 使用计数信号量的过程4.2.2 创建计数信号量函数4.2.

2024-06-09 09:42:27 909

原创 FreeRTOS基础(十一):消息队列

假设有一个全局变量a = 0,现有两个任务都在对变量a进行自增操作(写操作),如下图所示:对于自增操作它不是原子操作,会经过一系列的步骤,最后才将自增后的结果写入到寄存器,如果任务2的优先级高于任务1,在任务1将自增后的2即将写入到a之前,任务2打断任务1进行自增操作,任务2拿到的是a为1,然后再进行的自增,两个任务执行完后自增其实只进行了一次数据无保护,导致数据不安全,当多个任务同时对该全局变量操作时,数据易受损!!

2024-06-07 00:52:09 572

原创 Linux基础 (十四):socket网络编程

我们用户是处在应用层的,根据不同的场景和业务需求,传输层就要为我们应用层提供不同的传输协议,常见的就是TCP协议和UDP协议,二者各自有不同的特点,网络中的数据的传输其实就是两个进程间的通信,两个进程在通信时,传输层使用TCP协议将一方进程的应用层的数据传输给另一方进程的应用层,我们这一节就是基于TCP协议讲解网络数据的传输。

2024-06-05 20:46:33 1033

原创 Linux基础 (十三):计算机网络基础概论

IP 地址有分 IPV4 和 IPV6 两种类别格式,IPV4 是类似”A.B.C.D”的格式,它是 32 位 的,用“.”分成四个段,每个段是 8 个位(值为 0-255),用 10 进制表示。IPV6 地址是 128 位,格式类似”XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX”,用“:“分成 8 个 段,每个段 16 个位,用 4 个 16 进制数表示。Windows平台可使用图像化界面查看:ipconfigifconfig。

2024-06-05 12:04:37 1407

原创 FreeRTOS基础(十):FreeRTOS任务状态查询API函数介绍

此函数用于获取指定任务的任务优先级,使用该函数需将宏置12.2.2 改变某个任务的任务优先级此函数用于改变某个任务的任务优先级,使用该函数需将宏为12.2.3 获取系统中任务的任务数量此函数用于获取系统中任务的任务数量。

2024-06-04 21:58:41 873

原创 Linux基础 (十二):Linux 线程的创建与同步

线程库提供了丰富的接口来创建、管理和同步线程。不同的操作系统和编程语言提供的线程库接口可能有所不同,但大多数线程库都提供了一些常见的基础功能。下面以POSIX线程库(Pthreads)为例,介绍一些常用的线程库接口,使用线程库需要提前引入线程库头文件。线程库需要引入的头文件 #include <pthread.h>初始化信号量。sem: 指向信号量对象的指针。pshared: 指定信号量是否在进程间共享。若为0,表示线程间共享;若非0,表示进程间共享。value: 信号量的初始值。

2024-06-03 19:08:43 1284 1

原创 FreeRTOS基础(九):FreeRTOS的列表和列表项

列表是 FreeRTOS 中的一个数据结构,概念上和链表有点类似,列表被用来跟踪 FreeRTOS中的任务。任务处在不同的状态下,就挂载在不同的列表中(比如就绪列表、阻塞列表、挂起列表)。而列表项就是存放在列表中的项目,一个列表项就关联着一个任务,可以说:列表代表处于某种状态的任务的集合,列表项就代表处于当前状态下的某一个任务。如下图所示:列表相当于链表,列表项相当于节点,FreeRTOS 中的列表是一个双向循环链表。

2024-06-02 23:32:20 950

原创 FreeRTOS基础(八):FreeRTOS 时间管理

FreeRTOS 的相对延时函数vTaskDelay是一个常用的任务延时函数。相对延时:指每次延时都是从执行函数vTaskDelay()开始,直到延时指定的时间结束。它使当前任务进入阻塞状态一段指定的时间,以节拍(ticks)为单位。函数原型:void vTaskDelay( const TickType_t xTicksToDelay );参数:xTicksToDelay(将调⽤任务转换到就绪状态前保持在阻塞状态的滴答中断次数)参数: 指定要延迟的时钟节拍数。

2024-06-02 16:56:15 882

原创 FreeRTOS基础(七):临界段代码保护及调度器挂起与恢复

临界段代码保护是直接屏蔽了中断(管理范围内),系统任务调度靠中断,ISR也靠中断,因此它的影响还是非常大的!!!二、任务调度器的挂起和恢复2.1 概念挂起就是暂停的意思,任务调度器挂起就是:任务不能再进行切换/调度,恢复就是任务调度器可以重新进行任务的切换。仅仅针对的是任务调度器,就是是否可以发生任务切换!2.2任务调度器的挂起和恢复API函数。

2024-06-02 10:40:40 1171

原创 FreeRTOS基础(六):中断管理

1.1 中断的概念让CPU打断正常运行的程序,转而去处理紧急的事件(中断服务函数ISR),当中断事件处理完毕后,处理器可以恢复到中断前的状态,继续执行之前的程序,就叫中断。

2024-06-02 00:05:03 1072

原创 FreeRTOS基础(五):任务挂起与恢复

FreeRTOS 的配置文件configMAX_SYSCALL_INTERRUPT_PRIORITY //定义了可以使用 FreeRTOS API 的最高中断优先级。configKERNEL_INTERRUPT_PRIORITY //定义了 FreeRTOS 内核的优先级我们知道,Stm32一共有10个系统中断(内核中断),FreeRTOS便可以对这些系统中断进行管理;第一个宏其实代表的是FreeRTOS可以管理的中断的最高的优先级;在 ARM Cortex-M 微控制器上,优先级数值越低,优先级越高。

2024-06-01 16:36:12 1056

原创 FreeRTOS基础(四):静态创建任务

通过前面的讲解,我们知道动态创建任务的API函数如下:与动态创建的任务相比,只是后面两个参数发生了变化,其实这在前面讲过了,这是因为:静态创建任务时,任务的任务控制块以及任务的栈空间所需的内存,需用户分配提供,通常在bass段申请一个足够大的全局数组即可!该函数返回该任务的任务句柄!其实,我们需要定义的入口参数就是这个API函数的参数,提前定义好,然后传入参数,他就会自动的为我们创建好对应的任务,并且处于一种就绪态。其实就是函数名,我们知道函数名就是函数的入口地址,就是一个函数指针。

2024-06-01 13:16:53 1157

原创 FreeRTOS基础(三):动态创建任务

通过上一讲我们知道动态创建任务的API函数如下:其实,我们需要定义的入口参数就是这个API函数的参数,提前定义好,然后传入参数,他就会自动的为我们创建好对应的任务,并且处于一种就绪态。其实就是函数名,我们知道函数名就是函数的入口地址,就是一个函数指针其实也就是函数名对应的字符串,要用双引号括起来动态创建任务,#define START_TASK_STACK_SIZE 128 //定义任务堆栈大小为128字(1字等于4字节)不需要传参,我们直接给NULL即可;

2024-06-01 11:02:47 1200

原创 FreeRTOS基础(二):任务创建和删除的API函数(熟悉)

注意:每个任务都有属于自己的任务控制块,类似身份证任务栈栈顶,在任务切换时的任务上下文保存、任务恢复息息相关三、静态创建任务函数。

2024-05-30 01:57:19 284

原创 FreeRTOS基础(一):FreeRTOS入门

裸机:直接对硬件资源的编程,所有功能函数放在主循环中,同⼀时间只能单⼀任务运行。裸机又称为前后台系统,前台系统指的中断服务函数,后台系统指的大循环,即应用程序。RTOS是指一类系统,如 FreeRTOS,uC/OS,RTX,RT-Thread 等,都是 RTOS 类操作系统。FreeRTOS 是一个免费的嵌入式实时操作系统,其开源、轻量级、可移植的特点使其成为许多嵌入式开发者的首选。在近几年的使用排名上位居前列。

2024-05-29 23:49:12 655

原创 Linux基础 (十一):进程间通信

无名管道主要应用于父子进程间的通信。无名管道的创建如下:无名管道,没有名字,只能靠文件描述符,文件描述符不能给到别的进程,只能fork,让子进程拿到数据。因此,应该先创建无名管道,再fork产生子进程。semget是可以创建信号量也可以获取已经存在的信号量的,第一个参数是key 两个进程想使用同一个信号量,只要key值相同就可以;第二个参数是创建信号量的个数;第三个参数是标志位,创建信号量的权限。创建对应的sem.h对信号量的操作函数进行声明,以及对联合体semun进行定义。

2024-05-28 00:11:15 758

原创 Linux基础 (十):Linux 信号的使用

目录一、信号的基本概念二、信号处理常见方式概览三、修改信号的响应方式 – signal()3.1 简单复习结束前台进程3.2 改变SIGINT信号的响应方式3.3 自定义方式改变进程对信号的响应3.4 进程对信号作出两种响应四、发送信号 – kill()五、利用信号解决僵死进程问题 Linux 信号(signals)是一种用于进程间通信(Inter-Process Communication,IPC)的机制,允许进程通过发送和接收信号来通知其他进程某些事件的发生。信号是中断处理的一种手段,可以

2024-05-27 00:58:41 776

原创 Linux基础 (九):Linux 进程复制与替换

在Linux操作系统下,主函数(main函数)的参数通常用于接收从命令行传递给程序的输入。argc和argv和envp。参数详解argcint代表命令行参数的数量。包括程序名在内,传递给程序的参数总数。argc至少为1,因为程序名总是第一个参数。argv或是一个字符指针数组,每个元素都是指向一个字符串的指针。argv[0]指向程序名(包含路径的程序名,或者是只包含程序名,取决于如何运行程序)。其余的元素(从argv[1]到)指向传递给程序的命令行参数。argv[argc]

2024-05-27 00:04:21 1012

原创 Linux基础(八):计算机基础概论

一台计算机可以抽象成下图: CPU 中包含控制器和运算器, 内存就是存储器。I/O 设 备就是输入设备和输出设备,如:键盘、显示器、鼠标、硬盘、网卡。所有设备都只能直接和内存打交道。

2024-05-26 16:09:27 305

原创 Linux基础(七):Linux 系统上的库文件生成与使用

库是一组预先编译好的方法/函数的集合。在 64 位的系统上有些库也可能被存储在/usr/lib64 下。库有两种,一种是静态库,其命令规则为libxxx.a,一种是共享库,其命令规则为libxxx.so。Linux系统存储库的头文件(函数的声明)一般会被存储在下Linux系统存储的库(函数的具体实现)/lib 和 /usr/libLinux系统存储的二进制可执行程序/bin和/usr/bin第一步:先将需要生成库文件的所有“.c“文件编译成“.o”文件。

2024-05-26 12:33:29 1100

原创 Linux基础(六):Linux 系统上 C 程序的编译与调试

当源码文件比较多的时候就不适合通过直接输入gcc命令来编译,这时候就需要一个自动化的编译工具, 这就是make工具,make是一条命令,makefile是一个文件,两个搭配使用,完成项目自动化构建。make:一般说GNU Make,是一个软件,用于将源代码文件编译为可执行的二进制文件,make工具主要用于完成自动化编译。make工具编译的时候需要Makefile文件提供编译文件。Makefile:make工具所使用的文件,Makefile指明了编译规则。

2024-05-26 00:18:49 1023

原创 Linux基础(五):常用基本命令

我们知道,windows系统是以图形界面操作的,非常形象易用,而Linux则是以命令字符的该来进行操作的,相对window来讲并不直观,具有一定的门槛。什么是命令?命令是对系统进行管理的指令,就像在windows上你要创建一个文件,你需要用鼠标或键盘点击创建,而在linux上你需要输入命令来创建,达到的效果是一样的。你想要删除文件、编辑文本、重启系统…等等操作都要通过命令来执行,所以说,命令是Linux系统管理的重要方式,要使用Linux系统必须要掌握Linux命令。

2024-05-25 19:47:14 918

原创 Linux基础(四):Linux系统文件类型与文件权限

各位看官,好久不见,在正式介绍Linux的基本命令之前,我们首先了解一下,关于文件的知识。

2024-05-24 23:05:42 1031

原创 Linux基础(三):入门基础

命令行:即 Linux 终端( Terminal ),是一种命令提示符页面。以纯"字符"的形式操作系统,可以使用各种字符化命令对系统发出操作指令。命令:即 Linux 程序。一个命令就是一个 Linux 的程序。命令没有图形化页面,可以在命令行(终端中)提供字符化的反馈。在 Linux 操作系统中,命令行处于核心的地位。命令行是一种对操作系统的输入和输出界面,与图形界面对应。目前,在计算机操作系统中图形界面成为主流。

2024-05-20 00:51:36 625

原创 Linux基础(二):环境搭建

本文准备从0开始,一步步搭建一套属于自己的Linux系统环境,这将是后续学Linux、用Linux、Linux环境编程、应用和项目部署、工具实验等一系列学习和实践的基石,希望对小伙伴们有帮助。提前备好Linux编程实验环境非常重要,建议人手一套,这样以后每当学完一个理论知识需要实践时,立马就可以拿到上面去练手了。因此本文先把环境给搭建起来!

2024-05-19 17:12:53 1264

空空如也

空空如也

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

TA关注的人

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