自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 (AVR开发)模拟SPI驱动HT16D35A

刚好有一个项目用的是HT16D35A作为数码管驱动,记个笔记,防止遗忘,同时单片机用的是AVR。数码管是共阴极。看数据手册,HT16D35A使用的是SPI/IIC总线驱动,在PCB布板的时候,考虑到布线难度,并没有使用内部的SPI/IIC,而是采用的模拟方式。因为应用场合并不需要特别的高效,反而需要持久运行,所以整个单片机程序结构使用的是状态机方式编写,而不是事件驱动或者是时间片轮询的写法。在手册中截了一张HT16D35A的内部结构。

2024-04-19 14:25:39 537

原创 (AVR开发)_delay_loop_1,一段内联汇编写的延时程序

也就是1/1MHZ = 1us,不知道对不对,这里所说的循环执行3个时钟周期也就是每次调用就会延时3us,即_delay_loop_1(1)就是3us,但是最多执行256次,也就是传参最大值是256,所以_delay_loop_1(256) = 768us。要准确确定该函数的延时时间,需要知道 AVR 微控制器的时钟频率以及每个循环迭代的执行时间。如果假设在每个循环迭代中,执行时间可以忽略不计,那么每次循环的延时时间将主要由循环的执行次数决定。最终结果将写回到变量。),表示要进行的延时时间(循环次数)。

2024-04-18 16:32:30 365

原创 (AVR开发)pgm_read_word

但是,请注意,使用这种方法时需要特别小心,因为强制转换会绕过编译器的类型检查,可能会导致运行时错误,尤其是如果函数实际上需要参数或返回值,而你在调用时没有提供或处理它们。a+b是一个地址计算,a是一个指向程序存储空间的指针或者是其他的结构,b是一个偏移量或者是索引,从a指向的位置选择特定的函数指针。,这个参数应该是一个函数指针。宏的展开过程将这个函数指针强制转换为指向不接受任何参数且没有返回值的函数的指针,并立即调用它。是指向函数的指针变量,它可以指向任何返回‘int’类型、带有两个‘int’参数的函数。

2024-04-18 15:35:57 603

原创 信号量---《深入学习Linux内核》学习和实践

在单处理器系统和多处理器系统有效。一个与数据结构相关的计数器。把每个信号看成一个对象。信号量是一种同步机制,用于控制多个线程或进程对共享资源的访问,防止多个线程同时访问共享资源,从而避免数据不一致和其他并发问题。down():对信号量的值-1,如果值小于0,表示该方法把正在运行的进程加入到这个信号量链表。然后阻塞进程。up():对信号量值+1,新值大于或等于0,激活信号量链表的一个或多个进程。

2024-01-15 11:15:43 811

原创 qt实现串口调试助手

最近在学习qt,于是打算搞一个串口调试助手,初学C++和QT,有理解错误希望能给出意见。总结归纳2023.09.22:能够显示串口数据。

2023-09-24 21:32:23 847

原创 verilog状态机

这个状态机包含了四个状态(S0,S1,S2,S3),每个状态下有不同的行为。在每个时钟上升沿(posedge clk)或者复位信号(reset)上升沿,状态机会根据当前的状态和条件决定下一个状态。在Verilog中,状态机可以通过使用。块用于根据当前的状态来更新输出。

2023-09-15 16:41:11 342

原创 verilog实现uart

用于实现USART接收器。在代码中,我们使用了两个always块,第一个用于实现USART接收器,第二个用于实现USART发送器。在接收器中,我们使用。在这个代码中,我们定义了一些参数,如波特率、时钟频率、采样率和比特时间。我们还定义了一些寄存器,如。来控制接收器的使能。在发送器中,我们使用。来跟踪接收的数据,并使用。来跟踪发送的数据,并使用。

2023-09-15 16:05:03 123

原创 STM32 IO口中断配置

2、配置外部中断:接下来,配置外部中断来检测上升沿。选择要用作外部中断的引脚,并相应地配置外部中断控制器。在STM32F103C8T6上,可以使用EXTI_Init函数进行配置。3、中断处理函数:现在,您需要编写中断处理函数来处理上升沿触发的中断。在您的代码中实现EXTI0_IRQHandler函数或您选择的外部中断线路的相应中断处理函数。1、配置引脚作为输入:将要检测上升沿的引脚配置为输入模式。可以使用GPIO_Init函数来完成配置。在中断处理函数中,您可以根据需要执行计数逻辑,例如增加计数器的值。

2023-09-09 13:38:28 465

原创 stm32定时器输入捕获通道配置

在配置定时器通道之前,确保已经启用了相应定时器的时钟,例如使用。启用TIM2的时钟。

2023-09-09 08:57:35 291

原创 windows安装sqlite3

win10上右击此电脑选择属性,在关于的右侧有个高级环境设置,在高级的最下面可以看到环境变量。选择系统变量里面的Path,双击然后新建选择刚才的sqlite目录,即C:\sqlite。重新回顾sqlite,之前在linux上直接安装,现在切换到windows上。输入cd:\,然后输入sqlite3,就可以看到sqlite相关的信息。1、直接解压缩到C盘,然后添加环境变量。

2023-09-05 13:53:14 282

原创 C++中的unordered_map

因此,可以通过判断 find 方法的返回值是否等于 map.end() 来判断是否存在键为 temp 的元素,从而决定是否需要将当前元素的值和下标保存到哈希表中。因此,可以通过判断 find 方法的返回值是否等于 map.end() 来判断是否存在键为 temp 的元素,从而决定是否需要将当前元素的值和下标保存到哈希表中。如果 find 方法返回的迭代器指向哈希表的尾部,则说明哈希表中不存在键为 temp 的元素,需要将当前元素的值和下标保存到哈希表中。3、在哈希表中查找是否存在键为 temp 的元素。

2023-05-29 08:37:23 3068

原创 C++:ofstream文件流操作(precison和ios_base)

比如std::ios_base::in将输入流设置为只读,std::ios_base::out设置为只写模式, std::ios_base::out设置为二进制I/O模式。这段代码使用C++文件流对象ofstream创建新文件,命名为 “adasd.txt”,通过 precision() 和 setf() 函数设置输出精度和输出格式,最后调用了 close() 函数关闭文件。ios_base提供了一些共性操作和基础成员变量,用于支持流的输入输出操作,并可以完成流的基本工作。

2023-05-15 08:48:31 866

原创 C++ primer plus笔记 --- 第17章、输入、输出和文件

C++中的输入流和输出流是对程序进行输入和输出操作的主要方式。输入流用于从外部获取数据,输出流用于向外部输出数据。C++中的输入输出操作都是通过I/O流(输入/输出流)来完成的。I/O流是指stream,它是一个抽象类,派生出了继承了它的输入流istream和输出流ostream。输入流和输出流分别和两个预定义的对象cin和cout绑定,它们在iostream头文件中定义。数据的输入和输出都是针对流对象进行操作。cin和cout对象依赖于系统,因此在不同的系统之间可能会有一些差异。

2023-05-11 09:01:06 530

原创 C++ primer plus笔记 --- 第16章、string类和标准模板库

在C++中,STL库中提供了一些预定义的函数符,可以直接使用,也可以作为其他函数符的基础。这些预定义的函数符包括:less/greater: 用于比较两个类型为T的值的大小,返回true/false。plus/minus/multiplies/divides/modulus: 分别表示加、减、乘、除、取模操作,用于支持对应的数值类型T。

2023-05-11 08:29:17 172

原创 C++ primer plus笔记 --- 第15章、友元、异常和其他

在 C++ 中,友元是一种特殊的关系,它使得一个函数或者类能够访问另一个类的私有成员变量或者成员函数。友元可以被定义为一个函数、类、成员函数、或者整个命名空间。在使用友元时,需要在被访问的类中声明友元,可以在类定义中使用friend在上面的代码中,我们通过使用friend关键字声明了一个友元类MyClass和一个友元函数,它们都能够访问类的私有成员变量。使用友元可以提高代码的灵活性和可维护性,但也会降低封装性,增大了代码的复杂度,因此应该谨慎使用。

2023-05-10 08:49:33 145

原创 C++ primer plus笔记 --- 第14章、C++中的代码重用

valarray类是C++标准库中提供的一个通用数组类。它是一个模板类,能够存储任意类型的数据,并提供了很多操作数组的函数和运算符。使用这些函数和运算符可以方便地对数组进行数学运算和算法实现。valarray类的主要特点如下:支持常规数组的操作,例如访问特定元素,对所有元素应用任意函数,以及提取部分数组。支持所有基本数学算法,例如对valarray对象进行运算,在valarray对象之间进行运算,并进行逐元素的数学函数应用。

2023-05-10 08:17:54 272

原创 C++ primer plus学习笔记 --- 第13章、类继承

一个简单的基类通常包括一些数据成员和成员函数,而这些成员函数可以用于被派生类继承和/或重写。在上述源代码中,我们定义了一个Shape类,作为几何图形的基类。Shape类有两个虚函数area()和,用于返回图形的面积和周长。这些虚函数将被派生类继承和重写。在这个例子中,我们并没有定义任何数据成员。注意,我们在虚函数的声明中使用了virtual关键字来标识这些函数。这表示这些函数是虚函数,并且需要在派生类中进行重写,以提供特定于派生类的实现。如果不使用virtual。

2023-05-09 13:10:19 374

原创 C++ primer plus笔记 --- 第12章、类和动态内存分配

在 C++ 中,我们可以使用动态内存分配来为类对象动态分配内存。动态内存分配指的是在程序运行的过程中,根据需要动态地分配内存空间。与之相对应的是静态内存分配,即在程序编译时就就已经确定了内存的分配情况,无法根据程序运行的需要进行调整。new和delete。其中,new运算符用于向操作系统申请内存空间,返回指向该空间的指针;delete运算符用于释放之前申请的动态内存空间,使该空间变为可用状态。上述代码中,我们定义了一个名为MyString的类,其中包含了指向字符数组的指针buf_和字符数组的长度。

2023-05-09 08:46:02 229

原创 C++ primer plus学习笔记 --- 第11章、使用类

运算符重载是指在C++中,可以对运算符进行重载来定义类的行为,从而使得类的对象可以像基本数据类型一样进行运算。通常情况下,运算符重载是通过类的成员函数或全局函数来实现的。其中,operator是关键字,用于声明运算符名称。在参数列表中可以定义运算符的几个操作数,如果是成员函数,则第一个参数为隐式的this指针。例如,假设定义了一个名为Vector的向量类,可以重载加号运算符,使得两个向量对象可以相加。在上述代码中,Vector类定义了一个公有成员函数,用于重载加号运算符。当对Vector。

2023-05-08 09:47:56 141

原创 C++ primer plus笔记 --- 第10章、抽象和类

在C++中,声明和定义构造函数的方法与普通函数类似。在类的定义中,可以声明构造函数,也可以定义构造函数。声明和定义构造函数的语法如下:public:MyClass();// 声明构造函数// 实现构造函数的功能还可以实现带参数的构造函数,方法与定义默认构造函数类似。public:// 声明构造函数// 实现构造函数的功能需要注意的是,函数声明时不能包含函数体,函数定义时必须包含函数体。在定义构造函数时,应当完成类的初始化、内存分配、资源申请等操作,保证类的对象能够正确地进行使用。

2023-05-08 09:12:48 131

原创 C++ primer plus学习笔记 --- 第9章、内存模型和名称空间

单独编译是指将一个大型程序划分为多个源文件,并将这些源文件分别编译为单独的目标文件,再将这些目标文件链接为最终的可执行文件。使用单独编译可以简化程序的维护和管理,并提高代码的复用性和可读性。在 C++ 中,单独编译的工具是编译器和链接器。编译器负责将源代码编译为目标文件,而链接器负责将这些目标文件链接在一起,生成最终的可执行文件。在单独编译的过程中,开发人员需要合理编写头文件和源文件,以尽可能减小重复编译的次数,从而提高编译效率。在这个示例中,我们将Circle类的定义分别放在头文件Circle.h。

2023-05-06 08:51:08 100

原创 C++ primer plus学习笔记 --- 第8章、函数探幽

C++ 内联函数是一种函数调用机制,在编译器的优化下颇为常见,其主要目的是因为函数调用在运行期间会存在一定的时间和空间开销。内联函数允许编译器将被调用的函数代码直接嵌入到调用该函数的位置,这样可以避免额外的函数调用开销和参数传递,从而提高程序的运行速度。在 C++ 中,内联函数一般通过在函数定义前面加上inline关键字来声明。在上述代码中,add()函数被声明为内联函数,通过inline关键字告诉编译器将该函数的代码展开到调用其的位置。需要注意的是,内联函数并非在所有情况下都比普通函数更快。

2023-05-06 08:24:10 110

原创 C++ primer plus学习笔记 --- 第7章、C++的编程模块

在 C++ 中,我们可以使用的语法定义函数,其中为函数名,括号中可以包含函数的参数列表。在函数定义中,我们需要指定函数的返回值类型、函数名和参数列表,以及函数体中的具体操作。int x = 1;int y = 2;// 调用 sum() 函数,计算 x 和 y 的和,结果赋值给 zreturn 0;在上面的示例代码中,我们定义了一个sum()函数,它接受两个整数参数a和b,返回它们的和。在main()函数中,我们定义了两个变量x和y,并将它们作为参数调用sum()函数,将结果赋值给变量z。

2023-05-05 13:13:21 297

原创 C++ primer plus学习笔记 --- 第6章、分支语句和逻辑运算符

if 语句是 C++ 中最基本的控制流语句之一。其中condition是一个返回 bool 类型的表达式。当condition的值为 true 时,if 语句后面的代码块将会被执行;否则,if 语句后面的代码块将被跳过。在上面的代码中,定义了变量x并将其初始化为 10。if 语句中的条件为x > 5,因此 if 语句后的代码块被执行,并将 “x is greater than 5” 输出到标准输出流中。在 if 语句中,如果只有一条语句需要执行,那么可以省略代码块的大括号。

2023-05-05 08:21:43 188

原创 C++ primer plus学习笔记 --- 第5章、循环和关系表达式

本文介绍了 C++ 中循环结构的不同类型及其用法,包括 for 循环、while 循环、do-while 循环和范围-for 循环。其中 for 循环是最常见的循环结构,可以使用多种方式进行重载。while 循环和 do-while 循环则适用于需要根据特定条件重复执行的情况。范围-for 循环则是 C++11 引入的新特性,用于简化迭代器和指针的使用。此外,本文还介绍了嵌套循环和二维数组的概念。使用二维数组时,常采用嵌套循环的方式遍历每个元素。

2023-05-04 15:49:35 372

原创 C++ primer plus笔记 --- 第4章、复合类型

string 类,必须包含头文件string,string类位于名称空间中。C++ 11字符串初始化,注意C/C++两种风格// C语言风格// C语言风格// C++风格// C++风格// C++风格C语言风格不能将一个数组赋值给另一个数组,但可以将一个string对象赋值给另一个string对象。结构(Structure)是一种用户自定义的数据类型,在程序中用于组织和存储相关的变量。结构包含一组不同的变量,这些变量可能是不同的数据类型,例如整型、浮点型、字符型等。在C++中,结构通过。

2023-05-04 08:59:48 246 1

原创 vscode连接deepin虚拟机

vscode连接deepin

2022-07-03 19:21:53 355

原创 vscode无法连接到虚拟机,显示管道错误

重装了ubuntu系统,之前用vscode连接过云服务器和之前linux版本的虚拟机。找到.ssh文件夹,比如C:\Users\Administrator\,找到.ssh文件夹然后整个删除。最后,再重装ssh-remote这个插件,即可连接。

2022-05-26 21:15:57 655

原创 (PCB)如何选中PCB中keep-out layer外框

工作中画PCB,更换CPU。但外部尺寸是一定的,这时候需要拷贝之前老的方案的PCB外框。切到keep-out layer层,选中外框的一条线,然后按住tab,就能选中PCB的整个外框,之后ctrl+c,ctrl+v就能完整的复制出来了。...

2022-05-06 10:02:17 1640

windows安装sqlite3

windows安装sqlite3

2023-09-05

空空如也

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

TA关注的人

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