- 博客(32)
- 收藏
- 关注
原创 初识C++(入门)
一、C++简介与核心增强C++起源由Bjarne Stroustrup于1982年在C语言基础上扩展面向对象特性而来,完全兼容C语言。核心目标:提供更高效的抽象机制(如类、模板),支持复杂软件开发。C++对C语言的增强命名空间:解决全局符号(变量、函数)命名冲突问题。引用:提供变量的别名,避免指针的复杂操作。函数与运算符重载:允许同名函数根据参数类型/数量区分功能。面向对象:封装、继承、多态(未在示例中展开)。泛型编程:模板(template)支持类型无关的代码。异常处理try/catch。
2025-04-01 17:18:02
698
原创 UDP__网络编程——Linux
1. 定义与作用功能:区分网络与主机:通过与IP地址按位“与”运算,提取网络号和主机号。划分子网:将大网络分割为小网络,优化地址分配和管理。格式:32位二进制数,通常以点分十进制表示(如 `255.255.255.0`)。2. 计算方法网络号:`IP地址 & 子网掩码`示例:IP地址:`192.168.3.99`子网掩码:`255.255.255.0`网络号:`192.168.3.0`主机号:`IP地址 & 反子网掩码`
2025-03-14 15:26:43
948
原创 can总线
CAN 最初出现在80年代末的汽车工业中,由德国 Bosch 公司最先提出。当时,由于消费者对于汽车功能的要求越来越多,而这些功能的实现大多是基于电子操作的,这就使得电子装置之间的通讯越来越复杂,同时意味着需要更多的连接信号线。提出 CAN 总线的最初动机就是为了解决现代汽车中庞大的电子控制装置之间的通讯,减少不断增加的信号线。于是,他们设计了一个单一的网络总线,所有的外围器件可以被挂接在该总线上。1993年,CAN 已成为国际标准 ISO11898(高速应用)和 ISO11519(低速应用)。
2025-03-14 15:05:04
993
原创 SPI——通讯协议
SPI(Serial Peripheral Interface)串行外围设备接口。是由Motorola公司开发, 用来在微控制器和外围设备芯片之间提供一个低成本、易使用的接口。这种接口可以用来连接存储器、AD转换器、DA转换器、实时时钟、LCD驱动器、传感器、音频芯片、甚至其他处理器。与标准的串行端口不同, SPI是一个同步协议接口,所有的传输都参照一个共同的时钟,这个同步时钟信号由主机(处理器)产生。接收数据的外设(从设备)使用时钟对串行比特流的接收进行同步化。
2025-01-01 14:57:38
875
原创 wire单总线通信
1-Wire(单总线)是一种由Maxim Integrated(原Dallas Semiconductor)开发的串行通信协议,它允许通过单根信号线进行数据传输,同时传输时钟和数据,实现双向通信。这种协议具有节省I/O口资源、结构简单、成本低廉、便于总线扩展和维护等优点,广泛应用于温度传感器、湿度传感器、逻辑器件、时钟芯片等多种传感器和存储器中。
2025-01-01 14:57:27
867
原创 IIC总线
I2C(Inter-Integrated Circuit 集成电路)总线是Philips公司在八十年代初推出的一种串行、半双工的总线, 主要用于近距离、低速的芯片之间的通信;I2C总线有两根双向的信号线,一根数据线SDA用于收发数据,一根时钟线SCL用于通信双方时钟的同步;I2C总线硬件结构简单,简化了PCB布线,降低了系统成本,提高了系统可靠性,因此在各个领域得到了广泛应用。I2C总线是一种多主机总线,连接在 I2C总线上的器件分为主机和从机。主机有权发起和结束一次通信,从机只能被动呼叫;
2024-12-28 15:02:24
957
原创 ADC(模拟数字转化器)
ADC 用于将模拟值从现实世界转换为数字值,如1和0。那么这些模拟值是什么?这些是我们在日常生活中看到的,比如温度、速度、亮度等。但是ADC 能否将温度和速度直接转换为0和1等数字值?当然不是。ADC只能将模拟电压值转换为数字值。因此,无论我们想要测量哪个参数,都应该先将其转换为电压,这种转换可以在传感器的帮助下完成。例如,为了将温度值转换为电压,我们可以使用热敏电阻,同样,为了将亮度转换为电压,我们可以使用LDR。一旦转换成电压,我们就可以在ADC的帮助下读取。
2024-12-28 15:02:08
810
原创 RTC--时钟芯片
原因是CPU的定时器时钟功能只在“通电时”运行,断电时停止。当然,如果时钟不能连续跟踪时间,则必须手动设置时间。如今,通过接收标准电波(传输各国标准时间的电波)来自动调整时间的手表越来越多,但它是一种不应该在室内携带的电子设备。RTC有一个与CPU单独分离的电源,如纽扣电池(备用电池),即使主机电源关闭,它也保持滴答作响,随时可以实时显示时间。然后,当计算机再次打开时,计算机内置的定时器时钟从RTC读取当前时间,并在此基础上供电的同时,时间在其自身机制下显示。
2024-12-06 22:00:29
1442
原创 WDOG--看门狗
要将超时值重新加载到计数器,正确的服务序列首先写入0x_5555,然后写入0x_AAAA到看门狗服务寄存器(WDOG_WSR)。计时器将在计数器达到零并且WDOG输出系统复位信号时超时,WDOG_RESET_B_DEB并断言WDOG_B(WDT位应在看门狗控制寄存器WDOG_WCR)中设置)。只有设置了warm_reset_enable位,才会启用WARM复位。如果你的程序跑飞了,那么就不会再去喂狗了,如果超过了喂狗的时间,那么狗就会 自己生成一个信号来重新reset你的CPU,让程序重新开始。
2024-12-06 15:01:31
963
原创 流水线——ATPCS
如果在子程序中使用了寄存器v1~v8中的某些寄存器,则子程序进入时必须保存这些寄存器的值,在返回前必须恢复这些寄存器的值。在传递参数时,将所有参数看作是存放在连续的内存字单元的字数据。(3)由于冯诺依曼结构,仅有一个线作为数据和地址传输,所以执行BL(分步执行)指令时,线被占用,等待BL指令执行结束,数据/地址总线才被释放——这就是阻断流水线的原因和过程。仅有一个线作为数据和地址传输,所以执行LDR/STR指令时,线被占用,等待LDR指令执行结束,数据/地址总线才被释放——这就是阻断流水线的原因和过程。
2024-12-05 18:11:13
1195
原创 信号量(数组)
SETALL: Set the semval values for all semaphores of the set using arg.array,后面是属于可变参数列表,根据不同的命令有不同的参数。[将信号量值(semval)设置为该集合的第semnum个信号量的arg.val,同时更新与该集合相关联的semid_ds结构的sem_ctime成员。成功:根据不同的命令有不同的返回值,可以查看帮助文档关于 RETURN 的说明。semnum:信号量的编号,信号量的编号从0开始。
2024-12-05 18:10:16
996
原创 多进程和多线程基础概念LINUX
直接访问物理地址,会导致地址空间没有隔离,很容易导致数据被修改通过虚拟地址空间可以实现每个进程空间都是独立的,操作系统会映射到不用的物理地址区间,在访问时互不干扰.进程状态分为三个基本状态,即运行态,就绪态,阻塞态。在五态模型中,进程分为新建态、终止态,运行态,就绪态,阻塞态。并发:有限的 cpu 核芯的情况下 ,利用快速交替(时间片轮转)执行来达到宏观上的同时执行。虚拟地址 : 虚拟地址并不代表真实的内存空间,而是一个用于寻址的编号。并行:在 cpu 多核的支持下,实现物理上的同时执行。
2024-08-22 17:10:39
2111
原创 字符函数&内存函数———C语言
原理:将num个字节的值从源指向的位置复制到目标指向的内存块。原型:void * memmove ( void * destination, const void * source, size_t num );原型:void * memcpy ( void * destination, const void * source, size_t num );原理:将ptr指向的内存块的前num个字节设置为指定的值(解释为unsigned char)destination的起始地址在src起始地址之后。
2024-08-21 16:26:56
1092
原创 字符串函数———C语言
原理:字符串以'\0'作为结束标志,strlen函数返回的是在字符串中'\0'前面出现的字符个数(不包括'\0')参数指向的字符串必须要以'\0'结束。原型:char * strncpy ( char * destination, const char * source, size_t num );原型:char * strncat ( char * destination, const char * source, size_t num );原理:将一个字符串的指定数量的字符追加到另一个字符串的末尾。
2024-08-21 16:26:26
1007
原创 内存(动态开辟)———C语言
如果开辟成功,则返回一个指向开辟空间的指针如果开辟失败,则返回一个NULL指针,因此malloc的返回值要进行检查返回值的类型是 void* ,所以malloc函数并不知道开辟空间的类型,具体在使用时由使用者决定如果参数size=0,malloc的行为是标准未定义的,取决于编译器。<1>在编译的过程中,会在数据区为该变量开辟空间,如果代码中未对其进行初始化,则系统默认初始化为0。<2>如果原指针指向的空间之后没有足够的内存空间,该函数会重新找一块新的内存区域,按照指定大小重新开辟空间。
2024-08-19 17:21:59
696
原创 联合体(共用体)———C语言
联合体也是一种特殊的自定义数据类型,这种类型定义的变量也包含一系列成员,特点是这些成员共用同一块空间(所以联合体也叫共用体)。#include <stdio.h>// 联合体char c;int i;// 计算联合体类型在内存中所占空间的大小// 使用联合体类型声明变量return 0;
2024-08-19 17:21:42
509
原创 结构体———C语言
在进行命名时易出现结构体类型书写不便时使用typedef关键字给结构体类型起别名,也可对int等类型名进行重命名方便后续的修改。// 存放结构体指针类型的变量。功能: 给一个已经存在的类型取别名,可以通过别名来定义变量。使用typedef有利于类型名的修改便于代码的修改。//类似于链表的一个节点。// struct tag 结构体类。// struct 结构体关键字。省略名字,直接在最后面进行命名。// tag 结构体标签。
2024-08-15 18:05:23
339
1
原创 C语言———函数(Linux)
**自定义函数***ret_type fun_name(para1,*) 函数名与功能相关联性极强使用小驼峰式命名法或中间下划线法statement;// 函数体 如果有返回值,在函数体内使用returnret_type 返回类型 由所需数据类型决定(如果没有返回值:void)fun_name 函数名para1 函数参数一个函数只能返回一种类型的数据 函数:传几个接几个定义函数不能嵌套,但是能够嵌套调用(例如在这个定义的函数中调用另一个定义好的)函数 {最好一个函数控制一种功能}
2024-06-28 10:03:46
1814
原创 C语言———指针(Linux)
取地址:&(取地址符)+变量名打印地址: 使用%p通过解引用操作符,可以获取地址中存放的值:*&变量名===>*地址常量===>地址存放的值保存地址: 【数据类型(指针类型——>与变量名有关) 变量名(指针变量——>简称指针) = 取地址表达式】eg:指针变量是用来保存地址。
2024-06-21 20:34:35
1835
原创 C语言---数组如此简单(Linux)
分配字节总数=存储元素个数*类型对应的字节 如上int为4个byte存有10个元素因此共有40byte个空间在打印Jack时出现重复打印的情况是由于非字符串没有自带\0自动将带有\0的字符串型打印出来从而使得打印停止(主要是操作系统的原因)字符串自带“\0”使打印结束,遇到\0就结束打印。而"[ ]"类型的就没有\0计算长度:1.sizeof:功能是计算一个数据类型的大小,这个类型可以是数组、函数、指针、对象等,单位为字节,它的返回值是long unsigned int类型,是一个无符号整数。
2024-06-12 06:00:00
715
原创 C语言———循环语句(Linux)
循环体---->决定循环的功能(重复的代码块)i没有进行循环变量的更新。循环嵌套循环嵌套的循环式多重嵌套,内层列外层行(多重)for(定义循环变量;do while语法结构:do-while循环。while(循环条件)--->决定循环次数。全局变量,局部变量(看最近上面的使用范围)break终止最近的或是当前的循环。变量的作用域:变量的使用范围。continue跳过当前循环。}while(循环条件);特点:{至少执行一次}(Linux上是用不的)(可能一次也不会执行)
2024-06-04 21:20:39
965
2
原创 C语言———选择语句(Linux)
使用switch结构进行改进:(使用switch的弊端就是case会顺延过去遇到零就会继续运行相应的代码,因此需要调整对应的条件)通常自己想要0~9,%后就加上9也可在其后面加一使其打印出1~10。语句块........;语句块........;break含义成功匹配,完成打印后停止运行(位置可进行互换前提是每个语句后都要带break;建议time 内写入NULL。语句块.......;语句块.......;else if(条件2)else if(条件3)
2024-05-27 21:45:03
884
原创 C语言———运算符(Linux)
系统默认的转化规则(向范围更大的兼容) *乘号 整数相乘还是整数 保证输出结果为小数C*(C*1.0)/除号%整数取余eg:198%10=8 198%100=98 198/100%10=1;C++先参与运算再自增++C先自增再参与运算< > = != ==v eg:条件1&&条件2 此表达式的结果要为真,条件1和条件2都必须成立eg:条件1&&条件2 此表达式的结果要为真,条件1或条件2成立一个就行了将假的变成假的,假的变成真的,eg:!条件1(条件真结果假,条件假结果真)对二进制位
2024-05-20 21:38:48
688
1
原创 Ubuntu系统中如何设置共享目录
输入此命令(用于查看物理共享目录) vmware-hgfsclient输入以下命令(创建虚拟机中的共享文件夹) sudo mkdir /mnt/hgfs将虚拟机进行挂载(但此操作需要每次开机时都要运行)执行如下命令将一劳永逸用于打开fstab文件 sudo vim /etc/fstab点击 i 进入插入模式并在该文件的尾行添入保存并退出即可提示:若没有安装vim 需要对其进行安装在终端中执行如下命令 sudo apt install vim。
2024-05-19 22:00:55
1622
1
原创 初识C语言
1,C语言是一门面向过程的计算机编程语言,与C++、C#、Java等面向对象编程语言有所不同。C语言的设计目标:是提供一种能以简易的方式编译、处理低级存储器、仅产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。C语言描述问题比汇编语言迅速、工作量小、可读性好、易于调试、修改和移植,而代码质量与汇编语言相当。2,C语言诞生于美国的贝尔实验室,由丹尼斯·里奇(Dennis MacAlistair Ritchie)以肯尼斯·蓝·汤普森。
2024-05-16 19:26:06
378
1
原创 C语言———基本打印(Linux)
先声明再使用 在main函数中声明一个变量(局部),没有赋值,系统将会分配一个随机值,若全局变量如果没有赋值系统会给它赋值一个0。打印sizeof用%zd或%ld(size_t------>无符号整数) sizeof运算符计算变量在内存中开辟空间的大小。补码相加可得:111111111 11111111 11111111 11111111 11111101。补码相加可得:111111111 11111111 11111111 11111111 11111101。
2024-05-16 15:04:07
2176
1
原创 初识ubtuntu系统
链接:https://pan.baidu.com/s/1rXMxY2v2_u1pVvrWbhIPPA?pwd=zczb提取码:zczb按照如下步骤即可。
2024-05-07 14:51:25
849
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人