自定义博客皮肤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)
  • 收藏
  • 关注

原创 简单的驱动移植2.0

本次是上次的升级版,上次在实现的过程中需要自己手动创建设备文件 ,在这次的实现中,我们可以使用class_create和class_destroy进行一类设备的创建,在使用device_create和device_destroy进行对应设备的设备文件创建。使用设备树对设备的管理,这样我们就不用进行内存映射,这要的效率会大大提升,但是我们需要对系统内核的设备树文件进行编辑添加我们的设备,所以我们要回写设备树文件的语法,这里不展开,下面是要用到的设备树节点解析的API。6、使用设备树对设备的管理。

2025-02-21 19:39:47 419

原创 简单的驱动移植

然后我们可以在开发板上的linux系统中进行安装驱动,记得创建对应的驱动文件,然后就可以通过app.c调用了。驱动只负责简单的控制,真正的控制者还是外部应用,也就是我们需要写一个c语言文件控制驱动运动。要求的设备有三个,包括LED灯、蜂鸣器、风扇,所以我们需要写三个设备驱动文件。3、一个线程根据输入的值控制风扇的开关。1、一个线程让三个LED实现跑马灯。2、一个线程让蜂鸣器周期蜂鸣。使用三个线程完成任务。

2025-02-19 19:38:44 161

原创 总线、UART、IIC、SPI

连接多个部件的信息传输线,是各部件共享的传输介质。

2025-01-25 00:04:01 871

原创 关于ARM和汇编语言

不同工作模式下使用的内核中的寄存器是不一样的不算MON和HYP模式,用户可操作的寄存器总共有37每一个寄存器的大小都是4字节要想实现C和汇编的混合编程必须遵循ATPCS规范将汇编的标签当作C语言的函数使用将C语言的函数当作汇编的标签使用函数参数的传递采用R0-R3进行传递,如果参数的个数大于4个通过压栈的方式进行传递函数的返回值通过R0返回,如果函数的返回值大于4个字节通过r0-r1返回ATPCS规范中规定ARM采用满减栈。

2025-01-24 00:10:00 1958 1

原创 串口通信控制LED、马达、蜂鸣器、风扇

【代码】串口通信控制LED、马达、蜂鸣器、风扇。

2025-01-06 22:04:31 255

原创 MPU中断处理

【代码】MPU中断处理。

2025-01-06 21:54:47 383 1

原创 使用汇编语言点亮流水灯

在点灯前,需要做好充足准备。

2024-12-31 20:05:56 193

原创 fprintf()和fscanf()的小练习

load_stu:通过 fscanf 将文件中的3个学生的所有信息,读取到一个新的结构体数组中,并输出所有学生的信息。有一个 stu_t的结构体数组 arr[3];save_stu:通过 fprintf 将arr数组中的3个学生的所有信息,保存到文件中去。第三步,运行test02文件,并传参需要写入的文件名。第三步,检查当前目录,检查是否生成test02文件。第五步,检查当前目录,检查是否生成目标文件。第一步,先查看当前目录内的文件结构。第二步,编译c文件,并重命名。第六步,查看目标文件内容。

2024-10-11 18:42:35 280

原创 C语言习题:数据类型和作用域

分析:要明确局部变量,在内部的{}中定义了b和c对main函数来说是局部变量,所以b,c在{}里面的改变不影响外面的值,所以在第三次输出中b,c分别是3,6。分析:%*d是跳过当前输入的值,使一个输入无效化,也就是当输入在输入三个值时,第二个值无效化,记录第三个值,所以scanf记录了i和j的值,k并没有赋值。static时静态变量,生命周期是跟着整个程序,不会随函数结束而释放,所以fun运行三遍,结果是2,4,8,当其s三次的值分别为2,8,64。(2)要求输出c1和c2值的ASCII码,应如何处理?

2024-09-30 22:32:29 821

原创 DAY15:链表实现学生信息管理系统

今天有点累,懒得写注释了,其实思路都差不多,就是找到在操作,没什么太多区别。

2024-09-20 19:42:19 1036

原创 Day14:学生信息管理系统

输入:info:表单地址,out_begin:输出起始位置,out_end:输出结束位置。返回值:set+1:位置,0:空 ,-1:无此数据。输入:info:表单地址,name:学生姓名;参数:info:表单地址,num:输入个数。输入:info:表单地址,set:删除位置。输入:info:表单地址,set:位置。输入:info:表单地址,set:位置。data:表单内学生信息;参数:num:表单大小;输入:info:表单地址。输出任意位置范围内的学生信息。输出任意范围的学生信息。按名字查找学生信息位置。

2024-09-19 20:10:30 504

原创 DAY13:学习作业

/创建学生结构体,name:名字;age:年龄;sex:性别(w:女性;m:男性)int age;char sex;}Stu,*PStu;//记录需要输入的学生信息个数int num;printf("请输入需要储存的学生的信息个数:");//调用创建结构体数组函数//调用记录信息函数,再调用输出函数输出//调用成绩排序函数,再调用输出函数输出//释放内存,指针指空free(stu);stu = NULL;return 0;

2024-09-18 20:03:32 315

原创 结构体、结构体数组与结构体指针指针

数组,是手动分配的连续空间,他是有空间大小的;首先需要看操作系统的位数,1字节 = 8位,所以32位操作系统可以操作的字节长度是4位,同理64位操作系统可以操作的是8位,然后就可以计算结构体的内存大小,我们可将结构体数组和结构体指针,带入到结构体内看,结构体内的数组是直接分配好空间大小的,但指针是没有分配空间的,我们需要在使用前对其分配空间大小,不然无法使用。,是指向数据地址的变量, 而每个数据类型在计算机中都会有其存储的地址,所以指针是可以直接指向结构体的,这是比较基础的用法。

2024-09-18 09:44:41 2173

原创 DAY12:学习作业

答案:D分析:stu是结构体不是指针,所以不需要用->来取值,所以A错误,用%s输出,直接取结构体内的数组名即可,所以D争取①输入学生信息②输出学生信息③计算学生的成绩总分、平均分④按照学生的分数进行排序⑤输出排序后的数组//Stu结构体,id:学号;name:姓名;grade:成绩int grade;}Stu;//动态分配结构体数组大小函数,n:结构体数组长度;返回值:结构体数组地址//输出函数,info:结构体数组地址;n:结构体数组长度;返回值:无。

2024-09-16 12:31:33 956

原创 DAY11:学习作业

答案:当我们手动分配空间的时候,需要手动释放,当我们没有释放时,这部分内存会一直占据内存资源,就会产生内存泄漏。为了避免内存泄漏。我们需要在手动分配空间,并使用完成后,及时释放掉,为了避免分配空间的地址,我们需要避免直接对空间首地址进行操作,使用指针进行操作为了避免指针越界。我们需要在定义指针时,对指针及时初始化,不随意使用函数返回的局部变量的指针,在使用完成后,及时对指针指空;

2024-09-15 14:39:15 890

原创 简单的检测试卷

答案:在地址上,arr和&arr是一个地址,但是arr是指arr[0]的地址,当其增加的时候,会移动 int型 的字节大小的位置,也就是4个字节,而&arr是数组的地址,当其增加时,会移动整个数组的字节,也就是40个字节答案:数组指针:(*p)[],本质是指针,指向一个函数指针数组:*p[],本质是数组,里面储存的是指针函数指针:(*p)(),本质是指针,指向一个函数指针函数: *p(),本质是函数,返回值是指针。

2024-09-13 20:18:57 545

原创 有意思的题目01

其中N是用户传入的参数,其值不超过1000。如果N是非负整数,则该函数必须在一行中打印出N!的值,否则打印“Invalid input”。

2024-09-11 21:48:48 1057

原创 Day10:C语言学习作业

分析:p是函数指针数组,p[0] 是f1,p[1] 是f2,两个函数都是交换传入参数的值,但p都是指针,也就是函数可以改变p的值,但不能改变b的值,所以调用 p[0] 的时候,a 变成了5,b 没有改变,也就是a和b都是5了,调用 p[1] 时,又交换了一边,但两个值相同,所以结果还是5 5。分析: 主函数中a的值不变,在for循环内,没有传参地址,所以a的值不变,一直是2,在函数 f() 中c是静态的,可以改变值,循环了3次,每次都 +1 所以 a+b+c 为7 8 9。

2024-09-11 21:24:39 761

原创 Day09:C语言学习作业

思路:①主函数中定义一维数组int a[]={11,8,89,7,5,4,32,15,21} , max , min;值传递:将main函数的值传入函数,是将值复制一个,对其操作,在函数结束后,将会被清空,也不会让原来的值进行改变。地址传递:是想main函数里面的变量的地址传入函数,其在函数里面进行的操作是直接对main函数里面的值操作。4》自定义函数void arr_max(int (*a)[4] , int H , int L);思路:1》主函数中定义二维数组 int a[3][4];

2024-09-10 19:22:58 370

原创 Day08:C语言学习作业

a) 一个整型数:b) 一个指向整型数的指针:c) 一个指向指针的的指针,它指向的指针是指向一个整型数:d) 一个有10个整型数的数组:int a;答案:B分析:A是创建一个指针数组,C也是一个数组,D不能成功定义下列哪个表达式的值为3:( )答案:A分析:A先取值,再++,所以已经是到a[2],B:先++再取值,结果是a[3],C:先加3,然后取值++,结果是a[3] +1,D:结果是a[2] + 1;答案:C分析:++只能用在变量上,不能用在数组上A. *p=&x;

2024-09-09 19:57:46 851

原创 C语言学习作业

输入操作数及运算符完成数值的加、减、乘、除运算。正确定义一维数组 (3分)正确定义一维数组(2分)

2024-09-07 13:03:54 1136

原创 Day07:C语言学习作业

分析:第一个for循环是将ch数组的值,赋给p数组,第二个for循环是遍历数组行,第二个for循环内嵌套的循环是为了保证字符在 '0' 到 '9' 之间,然后每隔一个字符取一个字符,将其以组合成一个数字。分析:字符数组可以存放字符串,且能通过%s和puts()直接整体输出,当创建好数组后,不能通过赋值运算符直接赋值,不能通过运算符比较,可以通过函数比较大小长度。分析:字符数组可以存放字符串,且能通过%s和puts()直接整体输出,当创建好数组后,不能通过赋值运算符直接赋值,整数型数组不能整体输出。

2024-09-06 20:37:05 860

原创 Day06:C语言学习作业

固定对比位置:反复对比当前 (规定的位置 和 遍历到的位置)的值,比规定位置小情况,交换俩个的值,然后挪动规定位置,再进行对比。插旗帜:对当前遍历的最小值插旗子,将 (插旗子的位置 与 规定位置的位置) 对比,如果位置变了再交换值。第二种写法比较复杂,但是只需要简单得更改旗子得位置就可以,外层循环的次数就是交换值得次数。规定顺序为从小到大排序:有两种不同方向的 “冒泡” ,从小泡往大泡冒 和 从大泡往小泡冒。主要区别:外层循环方向 和 内层循环的判断条件,这里时从大泡往小泡冒(先把大的排列好)

2024-09-05 21:17:15 585

原创 Day05:C语言学习作业

第二个循环:相较第一个循环,这个循环事件复杂度更低,执行效率更好,只需执行一个if就可以进入for循环。循环小的在外层效率高,因为CPU中会对循环次数进行缓存,当循环多后CPU需要进行多次缓存,减少效率。分析:金子塔形,横线处的 j 是输出 * 的地方,规律是1 3 5 7,则B最符合;答案:写法上没有问题,这个主要是死循环,需要设置断点,不然就会一直循环下去。分析:循环的判断条件是赋值符号,k=1,循环内k++,恒为真,无限次循环。A. 无论在任何情况下,都中断程序的执行,退出到系统下一层。

2024-09-04 20:09:06 1955

原创 Day04:C语言学习作业

分析: 记录的数字为5,进入判断时++在后,则先判断后++,也就是5>5,结果为假,进入else,此时x++后的结果为6,进入输出语句,--在后,先输出,打印的结果为6。直角(勾股定理)[a*a+b*b==c*c || a*a+c*c==b*b || b*b+c*c==a*a]分析:B:%s是字符串的输出占位符,C:%x是十六进制占位符,AD:%d和%i都是整形的输出占位符,问题是语句末尾有没有分号,所以选A。B. printf("s 的值是%s", s)等腰 [a==b || a==c || b==c]

2024-09-03 20:19:40 716

原创 Day03:C语言学习作业

分析:char字符范围为-128~127,所以153 = 1001 1001 ,存储到计算机时,他是正数,所以三码合一,但当取出时为负数,所以要-1取反结果为:1110 0111 ,>>4 = 1111 1110 = -127。分析:A可以写成x=x+y;分析:我们将整个试子拆开:a+b>c 结果为1,b==c结果为1,a||b+c结果为1,b==c结果为1,1 && 1 && 1 && 1结果为1。分析:011是八进制,0为八进制的前缀,则k的十进制值为9,再输出时,自增符号在后,所以是先输出再自增;

2024-09-02 20:47:53 979

原创 Day02:Linux学习作业

将预处理好的.s后缀文件进行汇编,生成.s后缀文件,并检查语法错误和警告,把高级语言转化成汇编语言。“”表示先在当前文件中查找头文件,如果没有找到再去库文件中寻找。表示直接在include库文件夹里面查找头文件。将文件中的头文件展开,进行宏定义替换,将注释删除。检查语法错误和警告,把高级语言转换成汇编语言。把汇编语言转换成二进制语言。可以改为””吗?③ sidio.h:标准输出输出流文件。② include:包含命令。入口函数是main()函数。预处理、编译、汇编、链接。④ 可以改为“”

2024-08-30 20:15:57 659

原创 day01:Linux学习

Linux学习

2024-08-29 20:39:48 1025

原创 简单静态页面

内容:实现一个简单的登录页面,具体效果如下。

2024-08-28 19:36:43 527 1

空空如也

空空如也

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

TA关注的人

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