- 博客(80)
- 收藏
- 关注
原创 C++基础篇 第七天 异常、智能指针、nullptr,auto
等。而C语言中没有内置的异常类型概念,错误通常以错误码或特定的返回值表示。3. 异常的传播:在C++中,异常可以在调用栈上进行传播,即从抛出异常的地方一直传播到能够处理异常的地方。而在C语言中,错误处理通常是通过返回错误码或特定值来传递的。4. 异常处理的开销:由于。
2023-08-02 15:30:48
638
原创 TCP实现FTP功能
FTP(File Transfer Protocol)是一种用于在计算机网络上传输文件的标准协议。它允许用户通过网络将文件从。
2023-07-19 19:02:26
1897
原创 《数据结构》栈,队列,双向链表
(称为栈),把能进行插入和删除的这一端叫栈顶,另一端成为栈底。(1)顺序栈的存储结构是顺序存储,链式栈的存储结构是链式存储。先进后出:first in last out FILO。后进先出:last in first out LIFO。先进先出、后进后出 FIFO LILO。(2)顺序栈的长度受限制,而链栈不会。
2023-07-18 17:19:12
1580
原创 《数据结构》数据结构概念,顺序表,链表
1》数据与数据之间的逻辑规律和数据在计算机中如何表示(存储)概念:描述数据之间的逻辑规律和联系,即元素与元素之间的关系。(保存的数据元素个数是固定的) #define N 10。数据项:是数据元素的基本单位,描述数据元素拥有的信息。数据:不只是一个单独的数值、是一个集合的概念。数据:不只是一个单独的数值,是一个集合的概念。数据元素:数据的最小单位,由基本的数据项构成。2》解决问题的方法(实现代码的逻辑思想)概念:数据的逻辑结构在计算机中的具体实现。数据结构:数据的逻辑结构存储结构及操作。
2023-07-18 15:29:30
1018
原创 C语言-指针数组,函数,string
1.已知字符数组a[10]和b[10]已知字符数组a[10]和b[10]中元素的值递增有序,用指针实现将两个数组中元素按照递增顺序输出。1. 在使用手动开辟堆区空间时,要注意内存泄漏当指针指向开辟堆区空间首地址时,又对指针赋值,则没有指针指向开辟的堆区空间会导致内存泄漏。输入一个字符串,内有数字和非数int字符,如a123x456,将其中连续的数作为一个整数,依次存放到整形数组a中。2.编写一个函数,函数的2个参数,第一个是一个字符,第二个是一个char *,返回字符串中该字符的个数。
2023-07-15 16:10:39
439
原创 C语言-排序,初识指针
猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个,第二天早上又将剩下的桃子吃掉一半,又多吃了一个。在计算机存储超过一个字节数据的时候,会存在数据存储顺序的不同,分为大端和小端。p+n:访问了高地址方向第n个数据的地址,指针的指向不发生变化。p-n:访问了低地址方向第n个数据的地址,指针的指向不发生变化。p++:指针向高地址方向移动一个数据单位,指针的指向发生变化。p--:指针向低地址方向移动一个数据单位,指针的指向发生变化。小端:低地址存放低字节数据,高地址存放高字节数据。
2023-07-15 12:30:30
633
原创 C语言-初识数组
3. strlen不计算\0,sizeof计算\0,字符数组省略元素个数时,sizeof比strlen大1。//以地址a开始,将sizeof(a)个字节设置为0。//以地址a开始,将sizeof(a)个字节清空为0。2.编写一个程序,找出1000以内所有的完数,所谓完数就是一个数恰好等于它的因子之和,注意:字符串赋值经常容易忽略数组的长度,一定要注意数组越界!访问元素 :数组名[下标],下标从0开始,到n-1;访问元素:数组名[下标], 下标从0开始,到n-1;数组名 :代表数组的首地址,地址常量,
2023-07-14 22:46:25
460
原创 C语言-分支语句和循环
判断表达式或变量的值,和case后面的常量进行匹配,如果能匹配上就执行后面的语句块,遇到break就结束switch,当case都不匹配,直接执行default后面的语句块。1.从终端上输入一个字符并在终端上输出这个字符,当输入字符为‘q’时,程序结束。练习:从终端输入一个学生的成绩,判断学生成绩,打印成绩级别。练习:从终端输入一个学生的成绩,判断学生成绩,打印成绩级别。首先执行表达式1给循环变量赋初值,判断表达式2是否成立,如果成立就进入循环执行语句块,然后执行增值减值语句,1.从终端输入3个整数;
2023-07-14 21:41:10
562
原创 C语言-运算符,变量,常量
编写一个程序,要求输入水的夸脱数,然后显示这么多水中包含多少水分子。表示:3.0e-23 打印格式:%f或%e。一个水分子的质量约为3.0*10^-23g,1夸脱水大约有950g,在逻辑与运算中,如果前面的表达式为假,则后面的表达式不执行。在逻辑或运算中,如果前面的表达式为真,则后面的表达式不执行。概念:在程序运行中其值不会发生变化的量。&&(逻辑与) :全真则真,一假则假。||(逻辑或) :一真则真,全假则假。(逻辑非) :非真即假,非假即真。概念:在程序运行中其值发生变化的量。有效数据位数6-7位。
2023-07-14 20:08:40
414
原创 C语言-C语言基础知识
回退(回退和前进在代码跳转中非常有用,可以帮助我们看一些接口的原始定义)检查语法错误,有错就报错,没错就转换成汇编语言,生成汇编文件。从低位开始,每3个二进制为一组,转换成一位8进制,不够补零。从低位开始,每4位二进制为一组转换为一个16进制,不够补零。1位8进制可以转换为3位二进制来表示,八进制以0开头。最低位是2的0次方,向左依次递增,将有1的位求和。:对选中的代码自动加注释,再按一次可以去掉注释。分类:关键字、运算符、标识符、分隔符、标点符号。高级语言 c c++ java。
2023-07-14 17:39:46
302
原创 C语言-ubuntu下的命令
练习: 将Music文件夹的权限修改为当前用户可读可写不可执行,组内用户可写可执行,组外用户仅可读。2.将/etc下的passwd文件拷贝到my-dir目录下,并命名为farsight。3.将/etc下的groff目录拷贝到my-dir下,并重命名为hello。c:字符设备文件 鼠标、键盘 /dev/input/mouse。o :在当前行的下一行插入新行,并在新行上开始输入文本。O :在当前行的上一行插入新行,并在新行上开始输入文本。:查看当前路径下所有文件包括隐藏文件。
2023-07-14 16:58:23
2817
原创 《刷题2》场景模拟
使用extern关键字进行引用int k[5];char c;} DATE;DATE cow;double dog;} too;DATE max;则语句 printf("%d",sizeof(struct date)+sizeof(max));的执行结果是:答案:521.平衡二叉树任意节点的左子树和右子树的高度差最多为12.所有节点的左子树和右子树都是平衡二叉树3.在最坏的情况下,查找、插入和删除操作具有较好的时间复杂度什么是字节对齐:1.数据结构的起始地址必须是某个特定数值的倍数。
2023-07-13 22:13:50
2168
原创 认识MQTT(C语言)
注意: 官方订阅和发布是两个例子,需要整合到一个代码里,最后只启动一个进程。提示:mqtt的连接类似与TCP的连接,有且仅有一个连接。通信时不要用中文,我们终端默认是utf-8编码,而fx软件用的是其它编码,会出现乱码现象。你不得不看的图文并茂的MQTT协议通信过程!图文并茂讲解MQTT协议通信过程,深入理解MQTT协议工作过程。但是在根目录下进行编写执行代码是不妥的,我们一般在家目录下自己的文件夹进行编写。是因为修改了程序的这部分导致的,但并不影响我们的测试。》2.开启linux下的MQTT服务器。
2023-07-10 22:39:32
1314
原创 《刷题1》单片机开发题
中断源产生请求单片机相应中断:将程序计数器PC和各个寄存器状态压入栈中保护现场中断服务程序运行:跳转到对应中断处理函数进行处理恢复现场:中断处理完成后,将寄存器状态恢复返回原任务:程序计数器跳回被中断处,继续执行原来任务。
2023-07-10 22:06:49
667
原创 一文搞懂JSON
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,常用于将数据结构化地传输和存储。它由键值对组成,采用类似于JavaScript对象的格式来表示数据。JSON易于阅读和编写,并且易于解析和生成,成为广泛应用于Web应用程序和数据交换的标准格式之一。
2023-06-28 20:06:54
13934
原创 内核链表的使用
将下面的数据节点信息转换为链表结构,并遍历输出。type为1代表bool类型,2代表整形,3代表浮点型。它是一种灵活、高效的数据结构,适用于各种场景和问题的解决方案。上面是一个学生结构体,假设我们换了一个老师结构体,上面的链表的实现逻辑不变,但还是需要进行大量修改。但是linux提供的内核链表还是不太满足初学者需求,我从某些途径获取到了一个。,在主函数中利用封装的接口生成一个学生链表,并遍历输出链表的学生信息。为了提高开发效率,减少重复工作,linux内核给我们提供了链表。
2023-06-28 18:48:12
394
原创 应用层控制灯,自动创建设备节点,ioctl函数
在开发板上进行运行的时候每次都需要将文件移动到nfs挂载的文件下,耗时耗力,修改makefile能解决这个问题。此时执行make命令能把生成的.ko文件和a.out文件加载到/opt/6818/rootfs/rootfs下。每次我们都需要自己创建设备节点,站在用户层面想,用户是不会自己创建设备节点的,所以上面驱动还是需要优化。生成的可执行文件是在arm开发板上运行,所以编译使用交叉编译工具链。安装后自动生成了hello文件(在dev目录下)驱动是开发板上的驱动,编译依赖开发板上的内核。
2023-06-28 15:21:08
528
原创 基础的git命令使用
注意:文中所有命令的代表必选参数,[ ]代表可选参数,中内容为对参数的解释,输入命令时候需要进行替换,比如git add 代表git add这个命令后面要跟一个文件名,比如git add test.txt。在还未成为git仓库的文件夹中,右键菜单打开“Git Bash Here”终端。git add :*代表所有的文件--- git add *注意你的文件夹路径,一定要在新建的文件夹里,可使用cd 命令进入。git reflog :显示引用记录,引用记录包括所有的提交信息。
2023-06-27 12:36:44
1608
原创 应用程序传递数据给驱动和驱动操作LED灯
因为驱动是基于开发板写的,编译的时候使用开发板内核。结合我驱动系统移植篇的博客可以知道我的nfs搭建在。数据从应用层到驱动,又从驱动又回到了应用层。Linux内核启动之后,操作的全是虚拟地址。使用gcc编译器进行编译,生成可执行文件。想要让灯灭,将三个引脚输出低电平就可。1个为4字节,大小就应该写36。将hello.ko放到此文件下。添加设备文件权限(不能忘记)Led灯的寄存器是物理地址。
2023-06-20 18:34:01
559
原创 导出符号表和字符设备驱动
若是不安装add.ko文件在安装hello.ko时候会出现add.o未定义的情况。验证分析:分析hello.c源代码得出拆卸hello.ko文件会调用add函数。运行应用层的可执行程序,我的是a.out文件。关于fops结构体,我们只用到几个就可。使用gcc进行编译,生成a.out文件。在驱动同级目录下创建test.c文件。hello文件的Makefile。add文件的Makefile。我们可以看到在生成一个。可以手动创建设备文件。
2023-06-20 14:34:36
765
原创 驱动多文件编译和驱动命令行传参
重点看:obj-m:=demo.o 和 demo-y+=hello.o add.o两句(前面的makefile在我上片帖子已经做了解析)我使用了hello.c和add.c两个文件。注:按住传递命令行数组时候使用下方命令。上图就能看到我的驱动只有一个变量ww。下面教程,以数组驱动为例。关于变量的描述成功出现。
2023-06-19 22:57:17
1009
原创 驱动模块和printk函数
KERNELDIR:= b/modules/$(shell uname -r)ild/:这行代码定义了一个变量KERNELDIR,它指定了内核源代码的路径。它使用了uname -r命令来获取当前正在运行的内核的版本号,并将其与b/modules/路径拼接在一起。与all目标类似,它使用-C选项指定了内核源代码的路径,M选项指定了模块源代码的路径,clean表示清理。在这个Makefile中,hello.o是一个示例模块的名称,你可以根据自己的需求修改它。在这个规则下,它定义了要执行的命令。
2023-06-19 18:28:08
1749
原创 Modbus通信介绍 网络高级工具使用
Modbus通信协议具有多个变种,其中有支持串口,以太网多个版本,其中最著名的是运行在串口上的协议采用二进制表示形式紧凑的数据结构通信效率高,应用广运行在串口上的协议采用ASCII码传输利用特殊字符作为字节开始和结束标志传输数据低,只用传输数据量少的时候才考虑使用运行在以太网上的协议采用主从问答方式进行通信Modbus Tcp是应用层协议,基于传输层Tcp协议实现Modbus Tcp端口号默认是502模拟的是实际的控制设备,相当于服务器端,用于响应主机的请求。
2023-06-17 12:17:00
1924
1
原创 系统移植 编译uboot和linux源码及驱动配置
1.下载自己想用的源码放到linux目录下(自己随意决定目录)》2.解压文件包作者按照自己的压缩包进行解压sudo tar -xvf u-boot-2014.07-netok.tar.bz2 解压安装包解压后得到此文件》3.确认Makefile文件在u-boot-2014.07目录下执行进入Makefile文件,找到下面位置修改成自己用的编译链工具200 endif》4.进行uboot编译-》1.开发板环境设置注1:为当前使用的开发板的名字。
2023-06-15 20:28:11
1160
原创 系统移植 搭建nfs服务器,启动盘,内核安装和加载
1.将资料中“源文件”目录下的“rootfs-A53-ok.tar”拷贝到 ubuntu 中 nfs 工作目录下。》1.将资料中“源文件”中的 ubootpak.bin 文件放到 Ubuntu 内的文件夹中。0x41000000 目标写入地址,十六进制地址,将数据写入到 eMMC 中的指定扇区。》1.虚拟机--》可移动设备--》 realtek USB3.0-CRW---》连接。》4.将根文件系统镜像写入到 EMMC 中指定的扇区。》2.将内核镜像写入到 EMMC 中指定的扇区。
2023-06-14 19:26:49
2033
原创 系统移植 网络环境配置和TFTP服务器搭建
注:windows开启或者关闭防火墙影响开发板和linux能否链接到windows。在开发板输入ping 192.168.1.125会出现两种情况。如果你是电脑的网口,那需要改一下速率。检查硬件连接、检查服务器 IP 网卡配置等。每次打开ubuntu都需要重启此服务。网关IP(gateway ip)服务器IP(server ip)saveenv //保存所有。查看验证文件是否到当前目录下。网络掩码(netmask)在服务器工作目录下创建文件。IP地址(Ipaddr)
2023-06-13 19:05:07
2379
1
原创 基础汇编语言编程
汇编语言是一种低级程序设计语言,用于编写计算机程序。它是与特定计算机体系结构相关的,通过使用符号代表机器指令和数据,以便于人们理解和编写程序。由于汇编语言是与特定体系结构相关的,所以每种计算机体系结构都有自己的汇编语言。常见的汇编语言包括x86(用于大多数个人电脑)、ARM(用于移动设备和嵌入式系统)等。本文主要记录基础ARM汇编语言。编写汇编语言程序需要对计算机体系结构和指令集有深入的了解,并且编写的程序可以直接在相应的计算机上运行。
2023-06-10 12:00:25
2475
原创 网络编程 lesson7 广播组播和本地通信
网络编程中的广播是一种通信方式,用于向网络中的多个主机发送消息或数据。它被广泛应用于局域网(LAN)或广域网(WAN)环境中,使得一台主机能够向整个网络中的其他主机发送消息,而不需要逐个发送给每个目标主机。广播可以被看作是一种单向通信模式,其中发送方将消息广播到网络上的所有主机,而接收方则可以选择是否接收该消息。这使得广播非常适用于一些场景,如发送实时事件通知、传递系统状态更新或进行服务发现等。
2023-06-07 22:57:08
999
原创 STM32G0x0系列 入门试验代码整理
串口输出“hellowolrd”,当发送完成后触发中断,打印“Transmit Completed!单片机正常执行LED灯闪烁程序,当检测到按键按下时通过串口输出“Key Interrupt!
2023-06-05 11:27:18
1573
原创 STM32G0x0系列-软件定时器解决HAL_Delay问题
HAL_Delay函数使用了中断机制来实现延时功能,当在中断函数中调用HAL_Delay函数需要考虑中断优先级问题。这样无疑让开发难度增加,我们可以通过分析HAL_Delay的源代码写出一个自己的软件定时器,来解决这个问题。
2023-05-31 21:32:21
1225
原创 网络编程 lesson6 服务器模型和网络超时检测
在网络模型中,服务器模型是指在计算机网络中扮演服务器角色的计算机系统或软件。它用于接收和处理客户端的请求,并向客户端提供所需的服务或资源。客户端/服务器模型:这是最常见的服务器模型之一。在这种模型中,客户端(例如个人计算机、智能手机或其他设备)发送请求到服务器,服务器处理这些请求并返回响应。这种模型适用于诸如网页浏览、电子邮件、文件传输等各种应用。分布式服务器模型:在分布式服务器模型中,多台服务器协同工作,共同处理客户端的请求。
2023-05-28 14:56:44
957
原创 网络编程 lesson5 IO多路复用
epoll 是一种事件驱动的 I/O 复用机制,用于高效地处理大量的文件描述符(sockets、文件等)的并发 I/O 操作。它在 Linux 操作系统中提供,用于替代旧的 select和 poll 系统调用。注意:epoll是 Linux 特有的系统调用,无法在其他操作系统上直接使用。其他操作系统通常使用不同的机制,如 kqueue(BSD 系统)和 IOCP(Windows)来实现类似的功能。
2023-05-27 17:43:55
1137
原创 STM32G0x0系列-点亮一盏灯(寄存器)
当 GPIO 引脚用于 ADC 采集电压的输入通道时,则需要选择“模拟输入”功能,因为经过施密特触发器后信号只有 0、1 两种状态,所以 ADC 外设要采集到原始的模拟信号,信号源输入必须在施密特触发器之前。因为没有上拉和下拉,所以当IO口没有接输入的时候,此时的电平状态会是一个不确定的值,信号进入后不经过上拉电阻或者下拉电阻,关闭施密特触发器,经由另一线路把电压信号传送到片上外设模块。该模式是STM32复位之后的默认模式,一般用作对开关按键的读取或用于标准的通讯协议,比如IIC、USART的等。
2023-05-26 21:08:01
1801
2
原创 Cortex-M0的内核架构
Cortex-M0支持多种类型的异常,包括硬件中断、软件中断(通过软件指令触发)、错误中断等。当中断事件发生时,处理器会立即停止当前执行的任务,并转而执行一个与该中断事件相关联的中断处理程序(Interrupt Service Routine,ISR)。异常可以是由于程序错误(例如除以零或无效的指令)引起的,也可以是由硬件事件(例如存储器错误或外设错误)引起的。这些是Cortex-M系列的一些常见产品线,每个产品线都具有不同的特性和适用范围,可以根据具体应用的需求选择适合的处理器内核。
2023-05-26 19:42:48
4684
原创 QT课程 UI设计
QAbstractButton是按钮的抽象类,(第一遍)建议一个类如果有抽象基类,优先查看抽象基类的文档。按钮的相关属性有:需要注意的是单选按钮默认在同一个布局层次中互斥。按钮点击后会触发信号,我们看看按钮的信号(第二遍)建议一个类如果有抽象基类,优先查看抽象基类的文档。
2023-05-24 16:47:04
5219
原创 QT课程 QT介绍
Qt是一个基于C++开发语言的图形用户界面开发(GUI)框架。界面开发知识Qt的一部分,实际上Qt也可以支持很多其他的功能,比如:网络编程、文件IO、图形图像处理等。Qt在嵌入式领域最大的功能是进行上位机开发。#include "dialog.h": 这是包含头文件的指令,将之前定义的dialog.h头文件包含进来,以便在当前源文件中使用Dialog类。
2023-05-23 18:30:54
1938
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人