- 博客(58)
- 资源 (4)
- 收藏
- 关注
原创 I2C电平转换电路
在最近的项目中,由于CPU所用的IO的电压比较低,很多IO的电压域的电压都是1.8V,而外围设备电路通常所用的电压是3.3V和5V,当CPU需要与外围设备通信时就会出现通信接口电压不匹配的情况,此时就需要对通信接口进行电平转换。下面我们以I2C接口电路进行分析,电路如下:那么它是如何实现不同电压域之间的双向通信的呢?原理分析为了便于分析,我们使用其中一根线进行分析,下面是I2C的数据线原理图:当SDA1输出高电平时:MOS管Q1的Vgs = 0,
2021-10-21 21:45:56
9883
12
原创 git 使用笔记
git 的工作流程注:上图来源Git的安装与使用教程git 提交全部文件1.添加到暂存区:git add xx 将xx文件添加到暂存区;get add -A . 一次添加所有改变的文件;git add . 表示添加新文件和编辑过的文件不包括删除的文件;2.提交到本地仓库git commit -m “提交注释”3.推送分支到远程仓库git push origin 分支名称一般使用: git push origin master正常来说,这三步就够了。git 分支操作(1)
2021-06-16 21:02:01
346
原创 在ubuntu使用 dtc 工具编译设备树
dtc 工具安装:sudo apt-get install device-tree-compiler编译设备树dtc -I dts -O dtb -o xxx.dtb xxx.dts编译设备树插件dtc -I dts -O dtb -o xxx.dtbo xxx.dts设备树反汇编dtc -I dtb -O dts -o xxx.dts xxx.dtb
2021-06-16 20:26:20
4302
原创 Linux内核打印级别
Linux内核打印级别 在编写Linux内核驱动时,通常使用的打印函数是 printk 函数,它相比于用户空间的打印函数 printf 最大的区别就是 printk 函数需要指定打印级别,以控制内核的打印信息。例如只有比控制台当前打印级别优先级高的打印信息才可以被打印到控制台。(注:打印级别越小优先级越高)以下是 printk 的打印级别:#define KERN_EMERG “<0>” 通常是系统崩溃前的信息#define KERN_ALERT “<1>” 需要立即
2021-06-16 20:15:55
2084
原创 数码相框(十八、bmp数据提取用于图标显示)
注:本人已购买韦东山老师第三期项目视频,内容来源《数码相框项目视频》,只用于学习记录,如有侵权,请联系删除。1. 数码相框效果图根据上一节的数码相框需求框架可得出的大致效果图如下图所示: 上图的图标都是经过缩小的图标,实际上这些图标的分辨率都是比较大的,例如方形的图标分辨率为 128*128;但是我们 Jz2440 开发板的 LCD 只有 480 * 272,如果按实际图片的尺寸大小显示,显然是不可取的,所以需要进行 图片缩放 ;另外上图图标的格式为 bmp 格式的图标,要在 LCD 上显.
2021-03-16 00:13:34
506
3
原创 数码相框(十七、数码相框程序编写_先写框架)
注:本人已购买韦东山老师第三期项目视频,内容来源《数码相框项目视频》,只用于学习记录,如有侵权,请联系删除。1.数码相框需求框架数码相框项目需求的框架如下图所示:① 开发板上电后,进入主界面(Main page),在主界面中有 3 个触摸按钮:浏览模式、连播模式、设置。② 点击浏览模式,进入到浏览界面(Explore page),浏览界面分成两部分:菜单、图标(文件或者文件夹)。其中菜单,向上:当我们进入了某个文件夹里,想要退出来,点击向上即可退出;选择:当我选中了某个图片之后,点击选择即可.
2021-03-12 17:54:13
935
原创 数码相框(十六、LCD显示JPG格式图片)
注:本人已购买韦东山老师第三期项目视频,内容来源《数码相框项目视频》,只用于学习记录,如有侵权,请联系删除。1. LCD 如何显示一张图片?假如下图是是我们的 JZ2440 开发板,它有一个块显存、LCD控制器、LCD显示屏,LCD是如何显示张图片的呢?如上图所示:① 图片的颜色数据存放在显存,LCD 控制器会自动从显存取出图片的一个个颜色数据发送给LCD,取到最后又从头开始的循环取数据,最终把一张图片的全部颜色数据发送到LCD上,从而在LCD显示出该图片;② 显存存放的数据是RGB数据;.
2021-03-12 12:10:33
1560
原创 Buildroot 移植 libjpeg 到 Jz2440
本文是在Buildroot 构建根文件系统(Jz2440)的基础上添加 libjpeg 第三方库,以支持应用程序在 Jz2440 的 LCD 上显示 jpg 格式的图片。第 1 步: 在 buildroot 顶层目录输入 make menuconfig 命令,进入配置界面,配置如下:Target packages ->Libraries ->Graphics ->[*] jpeg support ->jpeg variant (jpeg-turbo)第 2
2021-03-11 19:06:31
728
原创 数码相框(十五、电子书支持远程打印)
注:本人已购买韦东山老师第三期项目视频,内容来源《数码相框项目视频》,只用于学习记录,如有侵权,请联系删除。这一节我们继续修改电子书的源码,让电子书既能够通过标准输入打印,也能通过网络远程打印,新的代码框架如下图所示:...
2021-03-04 17:40:22
393
原创 数码相框(十四、TCP/UDP 网络编程)
注:本人已购买韦东山第三期项目视频,内容来源《数码相框项目视频》,只用于学习记录,如有侵权,请联系删除。在此之前我们都是使用 printf 串口打印调试信息的,这存在明显的缺点:① 比较麻烦:程序是运行在设备(这里是开发板)上的,假如我们有很多设备需要同时测试,需要接很多的串口线;② 不好管理;③ 速度慢:假如打印的信息很多,这样打印的速度会变得非常慢;④ 一般,在产品发布的时候,会把相应的串口打印功能去掉,速度和效率上的问题会导致系统在测试时和发布时性能不一致,有些问题就会因此被掩盖。网络通信:数.
2021-03-02 16:37:26
322
1
原创 数码相框(十三、实现电子书滑动翻页)
注:本人已购买韦东山第三期项目视频,内容来源《数码相框项目视频》,只用于学习记录,如有侵权,请联系删除。上一节我们使用了多线程的方法去获取标准输入与LCD触摸屏的输入事件,这一节将在此基础上通过在LCD触摸屏上滑动,实现控制电子书的上下翻页。如下图所示,是一个LCD触摸屏,我们通过向左向右滑动控制电子书的上下翻页。那么我们的程序怎么做呢?从按下开始记录按下起始位置的LCD x 坐标,松开后在次记录松开时的LCD x 坐标,然后用松开时的 x 坐标减去按下时的x坐标计算出他们的差值,通过差值的正负判断是.
2021-02-25 18:22:06
328
原创 数码相框(十二、多种方法支持多输入之适用多线程)
注:本人已购买韦东山第三期项目视频,内容来源《数码相框项目视频》,只用于学习记录,如有侵权,请联系删除。多线程的优点:CPU占用率低,非常灵活,适用范围广参考:《Unix_Linux_Windows_OpenMP多线程编程.pdf》 P18 3.3.2 条件变量...
2021-02-25 16:25:54
441
1
原创 数码相框(十一、多种方法支持多输入之select方式输入)
注:本人已购买韦东山第三期项目视频,内容来源《数码相框项目视频》,只用于学习记录,如有侵权,请联系删除。
2021-02-24 16:16:35
292
1
原创 数码相框(十、多种方法支持多输入之轮询方式)
注:本人已购买韦东山第三期项目视频,内容来源《数码相框项目视频》,只用于学习记录,如有侵权,请联系删除。这一节主要讲述如何使用触摸屏操作电子书,实现电子书的翻页。1. 使用轮询方式输入2. 使用select方式输入3. 使用多线程方式输入...
2021-02-23 19:07:11
413
原创 Buildroot 移植 telnetd 到 Jz2440
telnet 是 busybox 里面的一个用于远程登录的应用程序,其中 telnet 是客户端,而 telnetd 是服务端。由于最近需要观察 Jz2440 开发板的 CPU 使用率,而且在串口终端运行的应用程序不能在后台运行,导致无法在串口终端输入 top 命令观察该应用程序的 CPU 使用率。本文是在Buildroot 构建根文件系统(Jz2440)的基础上通过配置 busybox 添加 telnetd 应用程序,方便使用 MobaXterm 远程登录Jz2440开发板。(注:其实 busy
2021-02-03 00:44:32
513
1
原创 Buildroot 移植 tslib 到 Jz2440
本文是在Buildroot 构建根文件系统(Jz2440)的基础上添加 tslib 触摸屏第三方软件库,方便在 Jz2440 使用触摸屏。第 1 步: 在 buildroot 顶层目录输入 make menuconfig 命令,进入配置界面,配置如下:Target packages ->Libraries ->Hardware handling ->[*] tslib第 2 步:输入 make 继续编译 buildroot (注:buildroot 自动下载的 tsli
2021-02-02 17:37:04
913
原创 Buildroot 移植 freetype 到 Jz2440
本文是在Buildroot 构建根文件系统(Jz2440)的基础上添加 freetype 第三方软件库,以便在 Jz2440 开发板LCD使用 freetype 显示文字。第 1 步: 在 buildroot 顶层目录输入 make menuconfig 命令,进入配置界面,配置如下:Target packages ->Libraries ->Graphics ->[*] freetype第2步:输入 make 继续编译 buildroot(一次编译成功)第3步:把
2021-01-30 15:53:20
523
1
原创 数码相框(九、编写通用的Makefile)
1. 程序的编译过程(1) 一个C/C++程序要经过预处理、编译、汇编、链接 4个步骤才可以变成可执行文件:预处理: ① 把包含的头文件插入源文件中;② 将宏定义展开;④ 根据条件编译选择要使用的代码;⑤ 最后把代码输出到一个“.i” 格式的文件中等待下一步的处理;编译:把C/C++代码(比如上述的 “.i” 文件)“翻译” 成 “.s” 汇编代码;汇编:就是把上一步编译出来的 “.s” 汇编代码翻译成 “.o” 格式的机器代码;链接:就是把上一步的 “.o” 格式的文件、系统的库文件等链接起来
2021-01-14 15:02:27
386
原创 数码相框(八、在PC(ubuntu)上实现电子书)
注:本人已购买韦东山第三期项目视频,内容来源《数码相框项目视频》,只用于学习记录,如有侵权,请联系删除。在数码相框(六、在LCD上显示任意编码的文本文件)中,我们以面向对象的思想实现了在LCD上显示电子书,应用程序框架如下图所示:对于每一个模块,我们都会抽象出一个结构体,然后分配、设置、注册这个结构体。例如,在显示模块中,我们抽象出了T_DispOpr这个结构体,并且在fb.c中分配、设置、注册了一个T_DispOpr结构体,实现了LCD的初始化、像素显示等功能。这一节我们添加 crt.c 实现在.
2021-01-01 00:44:22
593
1
原创 数码相框(七、电子书之指针和链表操作)
注:本人已购买韦东山第三期项目视频,内容来源《数码相框项目视频》,只用于学习记录,如有侵权,请联系删除。1. 电子书之指针操作内存就像是一个一个的格子,格子里面存放的是数据,每一个格子都有一个对应的编号,这格子的编号就是内存的地址。一个格子存放一个字节的数据,即在内存中一个地址里存放一个字节。在C语言里,每一个变量都有一个存储它的地址,例如,使用C语言定义以下变量:char c;int a;int *p;其中,&c = 格子的编号 ,格子的编号,即存放变量c的地址。(.
2020-12-28 15:49:40
345
原创 数码相框(六、在LCD上显示任意编码的文本文件)
1. 怎么在LCD上显示文件:(1) 去文件中获得编码,例如:ASCII、GBK、UTF-8、UFT16LE、UTF16BE等;(2) 根据该编码得到字体数据(即字体点阵数据);(3) 把点阵在LCD上显示出来;2. 以面向对象的思想编写程序,即模块化(1) 以前写驱动的时候,步骤:分配一个结构体;设置结构体;注册;(2) 以面向对象的思想,设计应用程序框架:...
2020-12-26 09:23:02
1298
原创 数码相框(五、使用freetype库在LCD显示几行文字)
注:本人已购买韦东山第三期项目视频,内容来源《数码相框项目视频》,只用于学习记录,如有侵权,请联系删除。1.在LCD显示几行文字(1) 在LCD显示几行文字,我们分为两种显示方法:① 从左边起开始显示几行文字;② 居中显示几行文字。例如:要显示以下两行文字:百问网gifwww.100ask.net注:其中 “百问网gif” 为什么要加一个 “g” 呢?因为字母 “g” 的下半部会超出这行文字的底线。(2) 从左边显示和居中显示的方法有什么不一样呢?① 从左边显示:先描画,再算出边框.
2020-12-15 22:50:19
674
1
原创 数码相框(二、字符的编码方式)
2. 显示文字2.1 文字编码方式2.2 英文字母、汉字的点阵显示2.3 使用freetype来显示任意大小的文字2.4 编写一个通用的Makefile
2020-12-10 17:32:53
585
原创 数码相框(一、系统框架)
1.步骤:① 弄清需求;② 设计框架;③ 编写代码 ;④ 测试;1.1 弄清需求:① 上电,LCD显示一幅图片;② 根据配置文件,决定停留在当前界面还是自动显示下一幅图片;③ 点击一下出现对话框,④ 根据上下左右:放大、缩小、显示下一幅;⑤ 左右移动很快时,显示下下一幅图片;1.2 设计框架1.3 总结① 输入线程:主控线程:得到上报的事件,使用socket发送给显示进程ts线程: 使用tslib读触摸屏数据,封装事件,上报按键线程:读按键,封装事件,上报② 显示进程:so
2020-12-10 17:31:01
810
原创 arm 汇编指令 CPS
注:内容来源 《ARM Cortex-A(armV7)编程手册V4.0》,只用于学习记录。最近在看韦东山 imx6ull 裸机的汇编启动文件,看到一条比较陌生的汇编指令CPS(如下图所示),于是把它记录下来。通过在《ARM Cortex-A(armV7)编程手册V4.0》中搜索 “CPS”,在 5.6.3 PSR modification 章节可以找到这样一句话,如下图高亮文字:意思就是: 在特权模式下,可以通过CPS指令直接修改CPSR寄存器的M[4:0],让处理器进入不同的模式。CPSR.
2020-11-02 03:04:54
5913
4
原创 ARM C语言可变参数函数实现原理
1. 可变参数实现原理在我们写C语言程序时,经常使用到 printf 函数打印,而 printf 函数就是一个可变参数函数,它的函数原型如下:(在ubuntu终端输入 man 3 printf 命令即可查看)int printf(const char *format, ...);其中:1)formmat : 固定参数 2)… :表示可变参数可变参数的实现最主要最靠的时C语言的指针操作,...
2020-10-31 14:56:00
1137
原创 Linux字符设备驱动之LED驱动
1. 实验环境硬件平台:Jz2440 开发板linux内核:linux-4.152. Linux 下 LED 灯驱动原理 Linux 下的任何外设驱动,最终都是要配置相应的硬件寄存器。所以LED驱动最终也要落实对IO相关寄存器的配置,与裸机不同的是,Linux下编写驱动需要符合Linux的驱动框架。2.1 查看原理图 对LED进行操作我们需要知道LED接到SOC的哪一个I...
2020-04-03 01:50:37
738
原创 Linux字符设备驱动
1. Linux字符设备驱动的概念 字符设备是 Linux 驱动中最基本的一类设备,它是能够像字节流一样被访问的设备,也就是说对它的读写是以字节为单位的。比如我们最常见的点灯、按键、 IIC、 SPI,LCD 等都是字符设备,这些设备的驱动就叫做字符设备驱动。字符设备的驱动程序实现了open、close、read、write等系统调用,应用程序可以通过设备文件(例如/dev/led)来访问...
2020-04-01 02:24:09
482
原创 Linux设备树学习笔记(四、设备树常用 OF 操作函数)
设备树描述了设备的详细信息,这些信息包括数字类型的、字符串类型的、数组类型的,我们在编写驱动的时候需要获取到这些信息。Linux 内核给我们提供了一系列的函数来获取设备树中的节点或者属性信息,这一系列的函数都有一个统一的前缀“of_”,所以在很多资料里面也被叫做 OF 函数。这些 OF 函数原型都定义在include/linux/of.h 文件中。1. 判断根节点兼容性OF函数在Lin...
2020-03-26 23:44:41
5311
原创 Linux设备树学习笔记(三、修改uboot、linux-4.15内核在JZ2440使用设备树)
1.修改uboot分区:2.修改内核分区:
2020-03-25 22:34:56
2015
1
原创 Linux设备树学习笔记(一、设备树语法规范)
设备树是一种描述硬件的数据结构,它起源于OpenFirmware(OF)。在Linux 2.6中, ARM架构的板极硬件细节过多地被硬编码在arch/arm/plat-xxx和arch/arm/mach-xxx中,采用设备树后,许多硬件的细节可以直接通过它传递给Linux,而不再需要在内核中进行大量的冗余编码。1. linux设备树中DTS、 DTC和DTB的关系(1) DTS: ....
2020-03-23 00:32:12
8801
2
原创 十二、移植DM9000网卡驱动到Linux-4.15内核
12. 移植DM9000网卡驱动到Linux-4.15内核12.1 移植步骤(1) 编译(2) 解决错误 (2.1)头文件不对:去掉或改名 (2.2)宏不对:改名使用新宏 (2.2)有些函数没有了:改名使用新函数12.2 移植内核自带的网卡驱动程序12.2.1 参考mini2440如何支持DM9000网卡在dm9000的驱动程序中,有如下结构体:(在driver...
2020-03-19 01:09:31
433
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人