自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 结构体中的深拷贝和浅拷贝

/* * 结构体中的深拷贝和浅拷贝,重要!!!!!! * 浅拷贝就是编译器机械的拷贝变量1中的内容到变量2中,如果是指针变量只会拷贝指针变量中存放的地址并不会拷贝指针所指向的内存空间的内容 **/#include <stdio.h>#include <stdlib.h>#include <string.h>typedef struct st...

2018-11-08 23:08:17 1110

转载 Linux Makefile 生成 *.d 依赖文件及 gcc -M -MF -MP 等相关选项说明

https://blog.csdn.net/qq1452008/article/details/50855810

2018-05-29 19:15:29 2260

转载 ubuntu环境变量的三种设置方法

https://blog.csdn.net/vertor11/article/details/70799971

2018-05-27 14:32:42 616

原创 通过TCP/IP实现PC(客户端)远程控制开发板(服务器)上LED灯的实验

这篇我们来做个小实验,实现开发板上运行服务端,可以直接控制led灯,客户端通过socket连接到服务端,通过发送指令来远程控制服务端的led灯。我们用平台总线的思想来编写驱动程序,这里分为LED平台驱动程序和LED平台设备程序。先看看LED平台设备程序plat_led_pdev.c的代码:#include <linux/init.h>#include <linux/module...

2018-04-09 22:55:20 7027 1

原创 基于exynos4412的按键驱动实验的异步IO的实现

驱动代码:#include <linux/module.h>#include <linux/init.h>#include <linux/of.h>#include <linux/device.h>#include <linux/fs.h>#include <linux/interrupt.h>#include &...

2018-04-06 13:41:49 529

原创 基于exynos4412的多路复用实验的实现

这篇我们讲讲多路复用,这里我们不用select而用polll来实现多路复用,还是以上一篇的按键驱动实验为基础添加多路复用功能,先看测试代码。#include <stdio.h>#include <unistd.h>#include <stdlib.h>#include <sys/types.h>#include <sys/stat.h&...

2018-04-06 12:36:32 368

原创 基于exynos4412的按键驱动实验的阻塞和非阻塞模式的实现

在上一篇按键驱动编程实验中,虽然我们实现了K2和K3的按键驱动,但是测试程序在运行的时候会一直调用read函数,导致cpu占有率很高,我们看一下测试程序运行的时候cpu的占有率,如下图。测试程序运行时占了不少cpu资源,所以我们这里用阻塞和非阻塞模式来实现。具体就是说当没有数据的时候,进程就阻塞不占用cpu资源,当有数据的时候再讲进程唤醒。也就是触发中断的时候唤醒进程。我们看一下具体的驱动代码实现...

2018-04-05 23:38:24 388

原创 内核函数kzalloc和kmalloc的区别

      初学linux驱动,遇到一个空指针的问题,弄了一晚上没解决,原来是结构体初始化的时候用了kmalloc来分配空间,导致结构体成员未被正确初始化,尤其是结构体成员中存在指针的时候,就会发生“野指针”的情况。看内核代码kzalloc函数的实现:所以kzalloc是kmalloc和memset的结合,也就是将申请成功后的空间成员变量初始化为0。...

2018-03-31 12:33:03 1316 3

原创 基于exynos4412的按键驱动编程

本文基于华清4412开发板,讲解如何从零开始编写按键驱动程序和测试程序。首先介绍一下该4412开发板的按键硬件原理图。这里我们实现K3和K2的按键驱动。从底板的原理图中可以看到K3按下之后SIM_DET引脚被拉成低电平(0),K3抬起时引脚又被拉高,变成高电平(1),K2同理。再看核心板的原理图。可以看到K3按键对应芯片4412的外部中断10,也就是XEINT10,K2同理。接下来我们看4412的...

2018-03-30 20:55:31 3236 3

原创 基于exynos4412的led驱动编程

本文基于华清4412开发板,讲解如何从零开始编写led驱动程序和测试程序。首先介绍一下该4412开发板的led硬件原理图。从原理图上我们可以看出,让led点亮的条件是往对应端口送高电平,熄灭的条件是送低电平。从上面这幅图中可以看到对应引脚的寄存器配置,这里我们选择对LED2进行闪烁实验。我们需要把GPX2CON【7】配置寄存器设置为输出模式,也就是设置为0x1。我们还需要通过设置数据寄存器来控制L...

2018-03-25 10:56:40 2434

原创 linux驱动模块的参数传递和模块导出

接着上一篇,这一篇我们讲讲linux驱动模块的参数传递和模块导出。先上代码 相比上一篇,这里我们多了两个参数value和name,我们可以在insmod内核的时候使用module_param这个宏来实现内核模块参数的传递,这点就类似于应用层我们写main函数一样,main函数也有两个参数argc和argv,只不过内核换了种方式传递参数而已,首先看module_param宏定义,module_par...

2018-03-24 15:21:17 1451

原创 简单的linux驱动模块编写

    刚开始接触Linux的驱动,暂时只是从Linux驱动模块的角度出发,编写最简单的linux驱动模块,先贴代码~~~         一个驱动模块有一下几部分组成:1、头文件 2、模块的装载函数和卸载函数的实现 3、模块的装载函数和卸载函数的声明 4、模块的GPL声明。       这里说的头文件只是包含最基本的两个头文件:linux/init.h和linux/module.h,装载函数声明...

2018-03-24 14:50:59 2126

转载 STM32的AFIO时钟何时开启

首先为什么要开启时钟?答:因为要对寄存器进行读写!而在STM32中对寄存器的读写都是要打开寄存器对应的时钟才可以的【就像人一样,有了跳动的脉搏手臂才能有能量才能进行各种动作】。然后就什么时候AFIO时钟开启(所有时钟都是这样)就清楚了:当需要对“AFIO时钟管理的寄存器”进行读写时AFIO时钟打开!当然不对“AFIO时钟管理的寄存器”读写时也可以打开AFIO时钟,此时只是白白增加能耗、写无

2017-04-21 21:33:26 4001

原创 《C Primer Plus》(1-4章)读书笔记

1.1、C通过编译和链接两个步骤来实现将源代码转换为可执行文件的过程,编译器把源代码转换成中间代码,链接器把中间代码和其他代码合并,生成可执行文件。1.2、源代码转换为机器语言代码并把结果放在目标代码文件中,目标代码文件缺失启动代码和库函数代码,启动代码充当程序和OS之间的接口。1.3、链接器的作用:将目标代码、系统的标准启动代码和库代码合并成一个文件——可执行文件。2.1、int是m

2017-01-04 21:31:10 383

空空如也

空空如也

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

TA关注的人

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