自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(30)
  • 问答 (2)
  • 收藏
  • 关注

原创 GIC中断分组介绍(IMX6ull为例)

IMX6ULL使用了GIC(Generic Interrupt Controller,通用中断控制器)来管理中断。GIC负责接收来自各个设备和处理器内核的中断信号,并根据优先级和配置规则将这些中断分派给适当的处理器核心进行处理。Cortex-A7内核具有多个中断类型,但其中最重要的是复位中断和IRQ(普通中断请求)中断。对于IMX6ULL而言,主要关注的是IRQ中断,因为外部设备和内部事件通常都会触发这类中断。从左到右 中断控制器-->中断分发器-->cpu管理单元-->cpu核。

2025-01-10 18:39:59 697

原创 单片机常用外设开发流程(1)(IMX6ULL为例)

软件复位(SWR)也可以重置计数器的值,除下面寄存器的对应位(ENMOD EN STOPEN WAITEN DBGEN)第二部分包括3种:高频时钟(ipg_clk_highfreq)、低频时钟(ipg_clk_32K)、第一部分包括2种:外部时钟(GPT_CLK)和晶体管震荡时钟(ipg_clk_24M)硬件复位也可以重置计数器的值,但是GPT的输出比较寄存器除外(OCR1-3)(1)设置多路复用的引脚(SW_MUX_CTL)也可以说是选择让引脚以哪种工作模式工作。

2025-01-02 15:07:40 516

原创 汇编指令总结、练习、C与汇编混合使用

汇编指令进行了系统总结方便忘记的时候查看,写了几个例子可以对照例子进行分析到底干了什么,加强对指令的记忆,最后就是汇编如何和C相互使用

2024-12-30 07:22:06 1065

原创 Linux基础命令以及常识

例子2 chmod +0777 test.c 将文件修改成 rwx rwx rwx权限的文件(这个适合总体修改)例子1 chmod u+w test.c 这就是给文件所有者加上写的权限(这个适合针对某一个修改)sudo tar -xvf work.tar.gz/work.tar.bz2 -C 指定的目录。sudo usermod -l 新用户名 -d /home/新用户名 -m 旧用户名。sudo tar -xzvf work.tar.gz 不写默认解压在当前文件夹下。

2024-09-22 05:29:22 511

原创 C++模版进阶(特化、分离)

在C++中主要是为了解决“一刀切”的问题,当我们定义一个模板(无论是函数模板还是类模板)时,它旨在为多种类型提供通用的解决方案。然而,在实际应用中,有些类型可能并不适合这种通用的处理方式,或者我们可以为这些类型提供更加高效、更加符合直觉的实现方式。它允许我们为特定的类型或类型组合提供定制化的实现,而不影响其他类型的通用实现。简单来说,模板特化就是“为特定的类型或情况提供定制化的模板实现”。// 假设我们有一个模板对,我们想对第一个类型为int的情况进行特化。// 调用部分特化的版本。// 调用特化的版本。

2024-07-22 18:17:23 320

原创 C++泛型编程

在C++中,模板主要分为两种:(1)函数模板:允许你定义一个通用的函数,这个函数可以处理不同的数据类型。函数模板的格式通常如下所示:// 函数体其中T和U等是类型参数,它们代表任意的数据类型。在调用函数时,编译器会根据传递的参数类型来实例化相应的函数版本。

2024-05-17 11:30:51 713

原创 C/C++内存管理

(1)因为malloc没有办法很好支持动态申请的自定义对象初始化//自定义类型,开空间+调用构造函数初始化//自定义类型,调用析构函数+释放空间delete p2;delete p3;//定义多个自定义类型//定义多个自定义类型且初始化A aa1(1);A aa2(2);

2024-05-16 15:31:40 679

原创 C++中匿名对象介绍及使用场景详解

对比而言:具名对象(即有名称的对象),其生命周期从它被创建的那一刻开始,直到它的作用域结束。具名对象可以被多次引用,并且可以在需要时进行拷贝或赋值。然而,匿名对象(即没有名称的对象),其生命周期通常较短,只在创建它的语句执行期间存在。匿名对象不能被再次引用,也不能被拷贝或赋值。匿名对象在C++编程中提供了一种简洁的方式来执行一次性的操作,而不需要创建一个完整的命名对象。它们在需要临时对象的场景中非常有用,但需要注意的是,由于它们的生命周期较短,因此不能依赖于它们的持久性。

2024-05-13 16:56:16 633

原创 C++中内部类详解

举个通俗易懂的例子,A相当于一个大的农场,B相当于果园,当陌生人问我做什么的时候,我说我有一个大的农场,农村里的果子很好吃,我只需要让A外想吃果子的人可以吃到果子,置于我农场里的果园B怎么种果子是由我决定的,种果子的方法是商业机密,不能外传,这个时候我们就可以用内部类。内部类是一个独立的类,他不属于外部类,更不能通过外部类的对象去访问内部类的成员。但是内部类可以通过外部类的对象参数来访问外部类中的所有成员。2.注意内部类可以直接访问外部类的static成员,不需要外部类的对象或类名。

2024-05-13 15:03:32 508 1

原创 C++中的友元

友元函数可以直接访问类的私有成员,它是定义在类外部的普通函数,不属于任何类,但需要在类内部声明,声明时需要加friend关键字。(1)友元函数可以访问类的私有和保护成员,但不是类的成员函数。(3)友元函数可以在类定义的任何地方声明,不受类访问限定限制。,都可以访问另一个类(time)的非公有成员。(5)友元函数的调用与普通函数的调用原理相同。(1)友元关系是单向的,不具有交换性。(2)友元关系不能传递。(4)一个函数可以是多个类的友元函数。都可以是另一个类(Time)的。(3)友元关系不能继承。

2024-05-12 09:53:41 355

原创 C++中static成员

5.静态成员也是类的成员,受public、protected、private访问限定符的限制。2.静态成员变量必须在类外定义,定义时不添加static关键字,类中只是声明。1.静态成员为所有类对象所共享,不属于某个具体的对象,存放在静态区。3.类静态成员即可用。不能访问任何非静态成员。

2024-05-09 10:00:44 250

原创 C++中的6个默认成员函数(我们不写编译器自动生成)

构造函数是特殊的成员函数,需要注意的是,构造函数虽然名称叫构造,但是构造函数的主要任务并不是开空间创建对象,而是初始化对象。其特征如下:(1)函数名和类名相同(2)参数可有可无,无返回值(3)对象实例化时,编译器自动调用对应的构造函数(4)构造函数可以重载----一个类可以有多个构造函数编译生成默认构造的特点:1.自己写了就不会生成构造函数,自己不写才会生成默认构造2.内置类型(基本数据类型指针也是)的成员不会处理3.自定义类型的成员才会处理,回去调用这个成员的默认构造函数。

2024-05-09 08:54:59 1064

原创 C++ 中this指针归纳

指针是一个隐含于每一个非静态成员函数中的特殊指针。它指向调用该成员函数的对象,使得在成员函数中能够访问到当前对象的数据成员和其他成员函数。指针在C++中是一个非常有用的特性,可以方便地访问对象的成员,并且有助于避免命名冲突和提高代码的可读性。指针的值在非静态成员函数调用期间是有效的,因此你可以放心地使用它来访问对象的成员。指针是一个指向当前对象的指针,其类型是指向类类型的非常量指针,即。指针也是有效的,可以用于访问正在创建或销毁的对象的成员。指针可以访问对象的成员变量和成员函数,例如。指针访问对象的成员。

2024-03-18 12:48:40 443

原创 C/C++ 说说引用这玩仍是干啥的

1.空指针没有任何指向,删除无害,引用是别名,删除引用就删除真实对象,所有指针可以为空,引用不可以为空。//这种方式就是引用----->i有了自己的小名,从次叫k了。众说周知啊,C++是为了补充C短板而设计的,搞懂了上面的这些,那我们来说说引用和指针的区别?引用的本质就是给某个实例对象起个外号。3,指针是间接操作对象,引用时对象的别名,对别名的操作就是对真实对象的直接操作。std::cout<< k<<endl //这个时候打印的是0。同样的道理,如果把指针看作是一个对象,那么指针也可以取别名。

2024-03-04 09:17:11 555 1

原创 C/C++你真的了解宏吗?

宏?提到这个词想必很多初学者吃过它的亏,但是为什么,一些程序员老鸟写一下代码时坚持使用宏呢?带着这样的疑问,下面我将对上面的问题一 一进行解答。首先想一个问题?如果一个功能,用宏和函数都可以实现,你们会选择什么呢?可能有的人会选择宏,有的人会选择函数,但是我想告诉你,其实选择什么是要看场景的。宏在经过预处理阶段就已经完成了替换,到了编译阶段,计算机直接写出汇编指令对应的计算就可以了。而函数在此阶段,计算机需要先写创建函数栈帧的汇编指令,才可以写 与实际计算 有关。

2024-02-08 01:44:19 785 1

原创 C动态内存那些事

首先,动态内存分配是计算机中一种重要的内存管理方法,它主要解决了静态内存分配无法灵活应对变化需求的问题。以下是几个存在动态内存分配的原因:灵活性:动态内存分配允许程序在运行时根据需要动态地分配和释放内存。这对于需要动态改变内存使用情况的应用来说非常重要,比如动态数据结构、动态数组或者不确定大小的数据等。节省内存:动态内存分配可以根据需求精确地分配所需大小的内存,避免了静态分配过多内存的浪费,并且可以回收不再使用的内存,提高内存的利用率。

2024-01-25 19:49:01 1780

原创 C中结合项目使用qsort对结构体进行排序(模拟通讯录排序功能)

printf("%-20s\t%-4s\t%5s\t%-12s\t%-30s\n", "名字", "年龄", "性别", "电话", "地址");printf("%-20s\t%-4s\t%5s\t%-12s\t%-30s\n", "名字", "年龄", "性别", "电话", "地址");printf("输入错误\n");printf("未找到要修改的联系人信息\n");printf("成功删除联系人\n");printf("请选择使用的功能>>>");printf("个人信息修改成功\n");

2024-01-25 14:08:14 523

原创 C/C++位段、枚举和联合体

/位段:位是二进制位,位段必须是int、unsigned int 、signed int或 char。//枚举:就是列举多个常量,本身就是一种类型,c里可以直接赋值,c++中会检查不可以。//联合体:也是特殊的自定义类型,所有成员共用一块内存空间,判断大小端字节序。// 当申请的内存不足以满足一个字节的时候,就会浪费掉剩下的比特位。//位段的使用,IP数据包的格式就是使用位段的形式进行封装的。// 将多个位段组合在同一个字节中,以提高内存利用率。// 但是在某些情况下,编译器可能会对位段进行优化,

2024-01-10 19:59:13 725

原创 C结构体内存对齐

/对齐数1 默认对齐数8 得到1字节 (因第三条规则)要保证是4的整数倍所以得补3个 空字节。//对齐数8 默认对齐数8 得到8字节(也满足第四条规则)//对齐数1 默认对齐数8 得到1 字节 (自己的整数倍就是1)//对齐数1 默认对齐数8 得到1 字节 (自己的整数倍就是1)

2024-01-09 06:52:53 1066

原创 C结构体声明,定义,初始化(赋值),访问

s1,s2 = { "zhangsan",23,"111" }, s3 = {.name="李四",.id="112",.age=24},s4;}//这些叫变量列表,可以在这里创建结构体变量,这个是全局变量,即声明的同时定义变量。//结构是一些值的集合,这些值成为成员变量,结构的每个成员可以是不同类型的变量。//赋值存在两种情况,按顺序赋值是s2,不按顺序赋值是s3。struct Stu//这个Stu是结构体名。//这是嵌套结构体的赋值,跟数组一样也用{}// struct 结构体名 变量列表名。

2024-01-08 23:16:22 931

原创 C编程题练习

内容:求Sn=a+aa+aaa+aaaa+aaaaa的前5项之和,其中a是一个随机正整数。内容:有一个数字矩阵,矩阵的每行从左到右是递增的,矩阵从上到下是递增的,请编写程序在这样的矩阵中查找某个数字是否存在。如果在一个固定的进制中,一个n位自然数等于自身各个数位上数字的n次幂之和,则称此数为自幂数。内容:喝汽水,1瓶汽水1元,2个空瓶换一瓶汽水,给20元,可以喝多少汽水(编程实现)内容:调整数组中数字的顺序使得数组中所有奇数位于数组的前半段,偶数位于数组的后半段。//从后向前找一个奇数。

2024-01-06 23:16:14 1765

原创 C手写内存不重叠/重叠拷贝函数

/参数:void* dest目的地(粘贴的地方),void* src源头(复制的地方),size_t num字节大小。请注意,这只是一个示例代码,用来演示内存拷贝函数的使用。如果目标地址和源地址有重叠部分,则根据地址的前后关系选择不同的拷贝方式。用C语言实现的内存拷贝函数的示例代码,包括使用标准函数库中的。//memcpy内存拷贝函数:用来处理不重叠的内存拷贝。//memmove内存拷贝函数:用来处理重叠的内存拷贝。//函数拷贝结束后会返回目标空间的地址,不重叠拷贝。函数是自定义的内存拷贝函数,与。

2024-01-05 15:08:37 1902

原创 C字符串分割、字符串错误码的使用

字符串分割strtok函数是一个C标准库函数,用于将字符串分割成子字符串。它接受两个参数:被分割的字符串和分隔符字符串。函数在第一次调用时返回被分割的字符串中的第一个子字符串,以后每次调用都返回剩余的子字符串,直到字符串被完全分割。所在头文件:#include <string.h>函数原型:char *strtok(char *str, const char *delim)通过上边的讲解下面通过一段代码来展示字符串分割是如何使用的int main()

2024-01-04 05:26:49 677

原创 C手写字符串覆盖、追加、比较、查找函数

是笔试常考的问题,上面写的简单又方便!

2024-01-03 15:17:59 1149

原创 C的指针和数组笔试题解析

这段代码探讨了C中' sizeof '和' strlen '函数在不同类型数组中的行为。它涵盖了一维数组、字符数组和二维数组。值得注意的一点包括寻址元素、数组大小以及字符数组中缺少空终止符对' strlen '结果的影响。此外,代码还分析不同数组元素和地址的大小,考虑到体系结构(x86或x64)。最后计算了一个二维数组(' aa ')的大小。总的来说,代码提供了对内存分配和数组main的见解

2023-12-30 09:04:03 802

原创 C/C++中深入理解qsort

/void qsort(void* base, //指向了需要排序的数组的第一个元素// size_t num,//排序的元素个数// size_t size,//一个元素的大小,单位是字节。

2023-12-26 20:49:26 732

原创 C/C++函数指针和函数指针数组的使用?

请看分割线以前的一段代码,执行的功能是加减乘除,虽然达到了要求,但是我们可以看到,代码里有很多的重复部分,写起来费时费力不说,修改时也十分麻烦不方便,那么我们有没有什么方法,可以以不变应万变?printf("请输入两个操作数");printf("请输入两个操作数");printf("请输入两个操作数");printf("请输入两个操作数");printf("请输入两个操作数");printf("退出计算器\n");printf("请输入:>");printf("请输入:>");//函数指针数组的调用。

2023-12-23 07:25:05 501

原创 C/C++ 快速搞懂函数指针数组

由上面的例子,我们知道指针可以存放在数组当中,那么小伙伴们现在肯能会很好奇,函数可以存放在数组当中吗?答案是肯定的,我们称存放函数地址的数组叫函数指针数组。//这是一个返回值为int,两个参数为int,的函数指针。如果这个仔细看完你还不懂,那说明你函数指针、指针函数、指针数组、数组指针没有学明白,请好好学习后,再来观看。我们见过将不同的指针类型放进数组存放,这样的数组我们称之为指针数组。//将函数地址存放在指针p3中。

2023-12-19 05:29:37 549

原创 C/C++浮点数在内存中的存储

占用 8 个字节(64 位),其中最高位表示符号位,接下来的 11 位表示指数部分,剩余的 52 位表示尾数部分。//9.0-10进制的浮点数---->转换成---->1001.0-2进制的浮点数---->1.001*2^3。//5.5-10进制的浮点数---->转换成---->101.1-2进制的浮点数---->1.011*2^2。//--------------------存储------------------------//float 32位 S:(-1)^X 1位 M:23 E:8。

2023-12-11 23:23:52 326

原创 C/C++整形是如何内存中存储的?快速搞懂字节序

还望大家一起努力,一起进步

2023-12-08 23:45:06 105

空空如也

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

TA关注的人

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