自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(46)
  • 资源 (3)
  • 收藏
  • 关注

原创 set_bit(nr , p) 详解.

简述内核 set_bit宏实现

2023-01-31 22:41:59 368

原创 6.DOS系统下的显示

1、dos系统的显示大小为80*25字符,内存地址空间为B8000H~BFFFFH共32KB的空间,向这里面陷入数据,内容会出现在显示器上。2、每个字符需要用2个字节的存储空间,高字节存储字符的属性(背景、前景、闪烁、高亮),低字节存储字符的ASCII码。3、由上可以算出第N行M列的字符(从第1行第1列开始算,而不是第0行0列)在内存中的首地址:(N-1)*160 + (M-1)*24、属性字节的格式:白底蓝字不闪烁不高亮: 0 111 0 001B = 71H注意:白色是111不是00

2020-07-01 11:02:25 489

原创 5.转移指令的原理(jmp详细讲解、jcxz/loop指令)

一、基础1、可以修改IP,或同时修改CS和IP的指令称为转移指令。2、8086CPU的转移 行为分为段内转移(只修改IP) 和 段间转移(同时修改CS和IP)。3、段内转移分为短转移(IP修改范围-128~127) 和 近转移(IP修改范围-32768~32767)。4、CPU转移指令分为:①无条件转移指令(jmp)②条件转移指令③循环指令(loop)④过程⑤中断二、操作符offset1、offset是操作符,而不是一个指令,它是用来取得标号的偏移地址。assume cs:code

2020-06-29 17:50:31 3243

原创 4.更灵活的定位内存地址的方法(and/or指令、字符形式数据、[bx+idata]、si/di/bp寄存器、数据处理长度、div指令、dd/dup伪指令)

一、and和or指令1、and指令是按位与操作:通过指令可以将操作对象相应位设置成0,其他位不变。mov al 11111110band al 11011110b上述代码将第五位设置成0,其他位不变2、or指令是按位或操作:通过指令可以将操作对象相应位设置成1,其他位不变。mov al 00000001bor al 00100001b上述代码将第五位设置成1,其他位不变3、and和or指令不可以对[bx]和段寄存器直接操作,要通过通用寄存器ax等中转。字符形式数据1、在汇编中,用

2020-06-24 13:35:32 575

原创 3.8086中的栈操作(push、pop)、[BX]和loop

一、栈1、栈是一种有特殊访问方式的存储空间,最后进去的数据最先出去,Last In First Out(LIFO).2、8086CPU提供入栈(PUSH)和出栈(POP)的操作,栈段最大64KB。3、8086中栈存放数据由高地址到低地址,且对于16位的数据,高地址存高8位,低地址存第8位。4、栈顶的地址由SS:SP两个寄存器决定,SS是存放栈的段地址,SP是栈的偏移地址。SS:SP无论何时,均指向栈顶。5、当栈为空时,SP指向栈空间中最高地址的下一地址:栈空间为 0x10000H-0x1000f

2020-06-23 21:30:17 5708

原创 2.汇编基础(字存储、DS:[addr]、mov、add、sub)

一、内存中的字存储1、内存单元是字节单元,因此需要两个地址连续的内存单元来存放一个字,这个字的低位字节放在低地址中,高位字节放在高地址中。2、4E20H和0012H分别在0地址字单元和2地址字单元中的存储:二、DS和[address]mov bx,1000hmov ds,bxmov al,[0]以上代码实现将1000:0(10000H)地址的内容送入ax的低8位寄存器,需注意的:①[0]中的0说明这个内存单元的偏移地址是0,段地址默认存放在ds中,执行指令时,8086CPU自动从ds中取

2020-06-21 10:41:37 2163

原创 1.汇编基础(8086基础、通用寄存器、物理地址寻址、CS和IP)

一、8086CPU基础和通用寄存器8086是一种16位的CPU,有20根地址线、16根数据线,最大寻址为1M,单次处理16位数据。8086的通用寄存器:AX、BX、CX、DX每个寄存器都是16位的,都可以当作两个8位寄存器使用。注意: 两个十六位寄存器相加时,超出范围后只留存最后十六位的数据,超出部分有地方保存(目前还不知道在哪),八位寄存器相加相同,如下:MOV AX,FFFFHMOV BX,0008HADD AX,BX # AX此后值为0007H二、8086CPU给出物理地址

2020-06-20 23:36:38 1842

原创 0.WIN10汇编学习环境搭建(两种方式)

这里介绍两种环境搭建方法,一种是DOSBOX模拟器,一种是VMware虚拟机跑一个DOS系统,其中虚拟机跑DOS系统是学习https://blog.csdn.net/vs9841/article/details/49047599 这篇文章。

2020-06-17 22:53:34 647 1

原创 多态和虚函数

一、多态的引入父类指针或引用指向子类对象时,调用函数,会只调用父类函数,如下:#include <iostream>using namespace std;class Parent {public: void print() { cout << "This is Parent Print" << endl; }};class Child...

2020-01-03 13:42:36 135

原创 关于多继承和虚继承一点说明

一、派生类的基类还有共同的基类,且基类继承方式为virtualclass A{public: int b; A(string &p){ s = p; cout << "This is Class A G:" << p << endl; } ~A(){ cout << "This is Class A X:" <&...

2019-12-30 10:01:50 134

原创 03.内联函数、默认参数、占位参数

一、内联函数c++中推荐使用内联函数代替宏代码片段c++中使用inline关键字声明内联函数内联函数声明时,inlie关键字必须和函数的定义结合在一起,否则编译器会忽略内联请求内联函数在最终的代码中是不存在的,它类似于宏替换,把调用内联函数处进行代码片段替换内联函数的申请c++编译器不一定准许,拒绝后内联函数变成一个普通函数,调用需要压栈跳转等现在的编译器能够进行编译优化,有的没有i...

2019-08-28 20:55:45 193

原创 02.c++中的引用详解

一、普通引用1.引用的概念当使用引用的时候,我们可以单纯的把引用理解为对一个已经定义的变量(常量)起一个别名。引用的语法:Type& name = var,引用在声明时必须初始化,原因如3.引用的本质是一个常指针,指向变量,所以引用占用4个字节,如下所示int var;Type& name = var; <==> Type *const ...

2019-08-28 17:44:44 118

原创 01.c/c++中const修饰符详解

一、const修饰指针的三个地方1.这两种方式一样:可以改变指针的指向,但是不可以通过指针更改指向区域的内容注意:指针指向区域的内容可以通过其他方式改变,只是不能通过这个指针改变const int *p;int const *p;p=&a; p=&b; //都是允许的*p = 20; //不允许2.可以通过指针更改指针指向区域的内容,但是不可以更改指针的指...

2019-08-28 12:15:01 133

原创 18.数码相框总结

框架整体框架如上,我对他们的阅读顺序是按照博客发布的顺序来的,感觉还行,读起来不是特别困难page文件夹下的代码太多,就不一个一个拿出来粘代码了,关于page文件夹的阅读顺序**page_manager -> main_page -> browse_page -> manual_page -> setting_page ->interval_page -&gt...

2019-07-29 11:52:37 351 3

原创 17.render/render.c文件分析

这个文件主要是写了一些图片、文字的渲染,主要调用fonts、encoding、picfrm这几个文件中的函数所有函数的简单分析/* PT_VideoMem预先分配好的内存,刷到fb上,最终调用的是memcpy,在fb.c中,提供的一个ShowPage函数 */void FlushVideoMemToDev(PT_VideoMem ptVideoMem)/* 查看某一个文件是否支持bmp或...

2019-07-25 15:31:24 310

原创 16.render/fomat和operation文件夹分析

1.render/format文件夹这个文件夹主要是用来识别图片文件、从图片文件中提取数据像素,所用到两个结构体如下/* 用来描述一张图片的象素数据 */typedef struct PixelDatas { int iWidth; /* 宽度: 一行有多少个象素 */ int iHeight; /* 高度: 一列有多少个象素 */ int iBpp; /* 一个象...

2019-07-24 20:30:46 453

原创 15.file文件夹分析

这个文件夹里只有一个file.c文件,主要是获取文件系统中的目录信息以及文件信息,用到的一些库函数在以下博客中Linux目录操作函数 scandir目录项dirent详解及示例先分析file.h中的结构体 typedef struct FileMap { char strFileName[256]; /* 文件名 */ // int iFd; FILE * tFp; ...

2019-07-24 16:34:26 168

原创 Linux目录操作函数 scandir

int scandir(const char *dirp, //传入参数,目录的绝对路径传进去 struct dirent ***namelist, //传出参数,传出一个dirent结构体的二级指针 int (*filter)(const struct dirent *), //一个过滤函数 int (*compar)(co...

2019-07-24 14:33:02 738

原创 目录项dirent详解及示例

dirent结构体struct dirent { ino_t d_ino; /* inode number*/ off_t d_off; /* offset to the next dirent */ unsigned short d_reclen; /* length of this record 本条记录的长度*/ unsig...

2019-07-24 13:58:00 2114

转载 linux文件系统inode/硬连接与软链接

本篇文章转自以下作者,后加入我自己对原文章的理解理解inode作者:阮一峰http://www.ruanyifeng.com/home.html 作者主页http://www.ruanyifeng.com/blog/2011/12/inode.html 原文PS:这个作者的主页里有很多不错的文章,可以去瞧一瞧一、inode是什么?硬盘上最小的存储单位是扇区(Sector),每个扇区5...

2019-07-23 22:33:52 189

原创 14.encoding(附编码解释)/fonts/debug/input文件夹分析

1.encoding用到的结构体typedef struct EncodingOpr { char *name; /* 编码模块的名字 */ int iHeadLen; /* 文件头的长度: 一般在文件的开始用几个字节来表示它的编码方式 */ PT_FontOpr ptFontOprSupportedHead; /* 把能支持这种编码的"字体模块", 放在...

2019-07-23 15:13:17 225

原创 13.display文件夹分析

1.用到的结构体 /*确定一个图层的大小,用于对图标显示位置的解释*/typedef struct Layout { int iTopLeftX; //左上角xy坐标 int iTopLeftY; int iBotRightX; //右下角xy坐标 int iBotRightY; char *strIconName; //图标的名字,即用的哪张图片}T_Layout,...

2019-07-22 21:34:51 546

原创 12.数码相框的框架(文件说明)

./|-- display| |-- disp_manager.c 用于管理显示设备,所有显示设备都需要先向这个文件注册才可以使用,这个工程里显示设备只有LCD屏| |-- fb.c 控制显示屏的程序,包括打开对应的文件,把文件映射到一块内存地址,获取屏的信息等等。| |-- Makefile| `-- test 这个文件夹用来做测试,没有用| ...

2019-07-22 16:03:01 178

原创 11.bmp和jpg图片显示

1.libjpeg库的基本使用int main(int argc , char **argv){ struct jpeg_decompress_struct cinfo; struct jpeg_error_mgr jerr; FILE * infile; int row_stride; unsigned char *buffer; /*分配和初始化一个decompression结...

2019-07-12 10:51:16 332

原创 10.网络打印DEBUG信息

1.debug_manager.c分析static PT_DebugOpr g_ptDebugOprHead;static int g_iDbgLevelLimit = 8;int RegisterDebugOpr(PT_DebugOpr ptDebugOpr); //注册可供打印debug的设备void ShowDebugOpr(void); //显示一下有哪些设备PT_D...

2019-07-11 12:22:41 189

原创 va_list/va_start/va_end/va_arg、printf的实现及其家族

1.va_list等先了解一下调用函数时,实参入栈的方式stdarg.h中的定义#inclde<stdarg.h>typedef char *va_list;#define va_start(list,param1) ( list = (va_list)&param1+ sizeof(param1) )#define va_arg(list,mode) (...

2019-07-11 11:17:14 311

原创 环形缓冲区

#define PRINT_BUF_SIZE (16*1024)static char *g_pcNetPrintBuf;//环形缓冲区的首地址static int g_iReadPos = 0; //环形缓冲区读的位置static int g_iWritePos = 0; //环形缓冲区写的位置int Init(){ g_pcNetPrintBuf = malloc(PRIN...

2019-07-11 10:03:43 127

原创 09.轮询、select、多线程--电子书输入模块+滑动切屏

0.tslib库基础用法1.初始化代码#include <stdlib.h> //不确定,如果只加下面的不行,就加上这个#include <tslib.h>char *pcTSName = NULL;static struct tsdev *g_tTSDev; //触摸屏设备的结构体,类似于文件句柄fdif ((pcTSName = getenv("TS...

2019-07-10 15:49:53 301

原创 08.通用Makefile+Makefile基础

0.程序的编译过程(1)预处理C/C++源文件中,以"#“开头的命令被称为预处理命令,如包含命令、宏定义命令、条件编译命令等。预处理就是将要包含的文件插入到源文件中、宏定义展开、根据条件编译命令选择使用的代码,最后将这些代码输入到一个”.i"文件中等待进一步处理,预处理用到arm-linux-cpp工具。(2)编译把C/C++代码(或者.i)翻译成汇编,所用到的工具是cc1.(3)汇编...

2019-07-06 22:20:31 210

原创 07.libx86/svgalib库的安装问题+PC上显示电子书

1 库安装的问题1.库安装的流程解压库源文件和布丁进入源文件打补丁,或者执行配置文件.configmake编译源文件sudo make install安装源文件PC上安装动态库会自动把头文件和.so文件放到对应的目录下,但是有时头文件的目录并不是直接在/usr/include/下,所以在编译时要加-I /usr/include/**** //来指定头文件的路径这种情况一般...

2019-07-06 14:48:34 493 3

原创 06.在LCD上显示多行矢量字

1.目的及注意目的: 可以"居左"和"居中"显示多行文字注意:1、 居左显示: 显示的时候,应该从下面一条红线下面显示第二行,而不应该从第一条红线显示,这样就需要先把第一行文字的边框计算出来,以防第二行文字和第一行文字有串扰。先描边,再算边框2、居中显示: 先算出边框,再确定坐标,再描画...

2019-05-15 21:18:15 464

原创 05.LCD上显示一行矢量中文+交叉编译器库安装

1.安装交叉编译器freetype库#安装部分tar xjf freetype-2.4.10.tar.bz2cd freetype-2.4.10/ #docs/INSTALL.CROSS 是对交叉编译的一个说明文档#--host=arm-linux 交叉编译器时使用#--buid=i386-unknown-freebsd 这个是在pc使用时使用#--prefix=<prefi...

2019-05-09 21:42:07 245

原创 04.freetype显示中文

1.用unicode码显示中文int chin[] = {0x97e6,0x4e1c,0x5c71,0x0067}; //韦东山g定义要显示的中文,然后显示,这样的方法是可以的。中文在unicode编码中是两个字符,英文是一个字符,所以用以上方法是正确的,因为显示时是一个字符一个字符输入进去转换再显示的,而如果这样写:char chin[]="韦东山g";就会出现乱码,原因如下:...

2019-05-09 16:22:03 3791

原创 03.freetype显示英文

1.点阵字库的缺点点阵字库确定好了像素,如8x8,8x16等,字体定死,不能缩放2.矢量字体原理矢量字体由 若干条曲线的关键点 和 数学曲线(贝塞尔曲线)连接 组成。将汉字的笔划边缘用直线段描述成封闭的曲线,并将线段各端点的坐标经压缩存储,如下图所示:由于每个汉字的笔划不一样,从而每个汉字数据长度也不同,所以只能采用索引的方法。因而每种矢量字库都是由两部分组成,一部分是汉字的索引信息,...

2019-05-08 21:24:45 377

原创 第二期视频使用的rcS文件

#!/bin/shifconfig eth0 192.168.0.17 #设置IProute add default gw 192.168.0.1mount -amkdir /dev/ptsmount -t devpts devpts /dev/ptsecho /sbin/mdev > /proc/sys/kernel/hotplugmdev -s ...

2019-05-08 16:01:02 177

原创 02.点阵显示中文汉字

1.环境官方给的内核文件(linux3.4)和根文件系统、linux2.6和配套根文件系统不同的内核文件编译时用的交叉编译器不同,linux3.4用4.x的编译器,linux2.6用3.x的编译器,否则不能运行2.架构思路打开屏所对应的文件,调用fctl函数使可以用地址来操作文件获得屏的一些信息(如:屏幕一个像素点占用的位数,屏的分辨率等等)打开汉字库文件,调用fctl函数使可以...

2019-05-08 15:52:27 4769

原创 Can't use 'defined(@array)' (Maybe you should just omit the defined()?)内核编译

内核编译总流程1.解压内核源码tar --xjf linux-2.6.22.6.tar.bz22.打补丁patch -p1 < ../linux-2.6.22.6_jz2440.patch //在内核文件的根目录下打3.配置使用默认配置,在上面修改。 在arch/arm/configs中找到相似的配置文件 xx_defconfig,然后执行 make xxx_defconf...

2019-05-08 15:19:49 449

原创 安装、改变交叉编译工具

安装交叉编译工具链4.3.2:1、在资料光盘/linux环境搭建/tools中把压缩包上传到服务器2、sudo tar xjf arm-linux-gcc-4.3.2.tar.bz2 -C / 把压缩包解压到根文件目录3、可以去/usr/local/arm/下找到4.3.2文件夹4、echo $PATH 打印当前环境变量 :home/book/bin:/home/book/...

2019-05-08 12:18:46 352

转载 /etc/inittab,/etc/init.d/rcS和/etc/profile分析

在kernel挂载根文件系统后,运行的第一个程序是根目录下的linuxrc,实际是一个指向/bin/busybox的链接, 也就是说系统起来后运行的第一个程序是busybox本身。busybox首先解析/etc/inittab这个进行初始化的配置文件, 里面内容如下:# Boot-time system configuration/initialization script.::sysini...

2019-05-08 12:14:57 268

转载 00.数码相框框架分析

项目流程弄清需求:需要完成什么设计框架:怎么实现编写代码:怎么通过代码设计测试需求1.上电后LCD显示一副图片2.根据配置文件,决定停留当前界面还是自动显示下一张3.点击一下屏幕,出现一个框,选择手动显示、自动显示4.向上滑放大,向下滑缩小,左右滑切换图片5.左右滑动很快时,连续切换两张程序设计框架输入进程创建三个线程:触摸线程、按键线程、主控线程触摸线程:不停调...

2019-05-07 19:50:11 224

WIN10系统下汇编学习环境

WIN10下学习汇编语言的环境所用到的程序,亲测OK,里面还有个demo程序。 这里面包括了dosbox0.74,debug.exe, masm.exe, link.exe 对应教程:https://blog.csdn.net/qq_22655017/article/details/106820240

2020-06-18

digial_photo_frame_final.zip 数码相框代码完全注释

对韦东山第三期视频中第一个项目-数码相框源代码的完全注释 韦东山注释过的代码写的很不详细,只是把各个函数的功能写了一下,具体实现偶尔写一下。 我从头到尾学习了一遍,把自己的理解全部加了进去,程序中有一两个小错误也注释进去了,源代码未改动。 https://blog.csdn.net/qq_22655017 我阅读代码的顺序在这里面,可能注释方式是我个人的习惯,希望对大家有点帮助

2019-07-29

STM32学习笔记

STM32学习笔记

2015-01-01

空空如也

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

TA关注的人

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