自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 回调函数和钩子函数的区别

回调函数回调函数是调用者将回调函数的指针传递给了调用函数,当调用函数执行完毕或者达到一定的条件后,通过函数指针来调用的函数钩子函数钩子实际上是一个处理消息的程序段,通过系统调用,把它挂入系统。每当特定的消息发出,在没有到达目的窗口前,钩子程序就先捕获该消息,亦即钩子函数先得到控制权。这时钩子函数即可以加工处理(改变)该消息,也可以不作处理而继续传递该消息,还可以强制结束消息的传递。对每种类型的钩子由系统来维护一个钩子链,最近安装的钩子放在链的开始,而最先安装的钩子放在最后,也就是后加入的先获得控制权。

2021-01-15 16:32:16 7

转载 CPU、MPU、MCU、SOC和SOPC的区别

CPU:是一台计算机的运算核心和控制核心。CPU由运算器、控制器和寄存器及实现它们之间联系的数据、控制及状态的总线构成。差不多所有的CPU的运作原理可分为四个阶段:提取(Fetch)、解码(Decode)、执行(Execute)和写回(Writeback)。 CPU从存储器或高速缓冲存储器中取出指令,放入指令寄存器,并对指令译码,并执行指令。MPU:计算机(即电脑)分为巨型机,大型机,中型机,小型机和微型计算机5类。这5类计算机的运算核心统称为CPU,而MPU只是微型计算机(微机)的核心处理器。也就是说

2021-01-15 10:43:56 11

转载 linux下chmod +x的含义

chmod +x 的意思给文件增加执行权限chmod +x 和 chmod u+x的区别chmod a+x 其中加号前面的字母的含义u 代表用户.g 代表用户组.o 代表其他.a 代表所有.这意味着chmod u+x somefile 只授予这个文件的所属者执行的权限而 chmod +x somefile 和 chmod a+x somefile 是一样的,都表示给所用用户赋予执行权限...

2020-12-19 17:51:26 35 1

原创 framebuffer学习及fb绘图程序

一、了解framebuffer在Linux系统下,如果我们想对lcd屏或者其他显示器件进行画点、画线、画图案等操作,那么我们就必须要了解framebuffer(帧缓存)。对于用户来说,帧缓冲是Linux为显示设备提供的一个接口,它把一些显示设备描述成一个缓冲区,允许应用程序通过 FrameBuffer定义好的接口访问这些图形设备,从而不用去关心具体的硬件细节。对于驱动工程师来说,帧缓存是内核驱动申请的一片内存空间,然后lcd内有一片sram,cpu内部有个lcd控制器,它有个单独的dma用来将fram

2020-12-13 13:50:51 58

转载 Makefile中的include命令

 关于Makefile中的include命令,网上有很多介绍,比较普遍的说法是:Makefile中的include命令与C语言中的include命令类似,命令include file.dep,即把file.dep文件在当前Makefile文件中展开,亦即把file.dep文件的内容包含进当前Makefile文件;如果Makefile中有以file.dep为目标的规则,make会先使用规则对file.dep文件进行更新,然后将更新后的file.dep文件包含进当前Makefile文件。[网上描述] 这种关于

2020-12-13 13:21:50 46

转载 Linux下gcc的库文件及动态库搜索路径

1. 头文件 gcc在编译时如何去寻找所需要的头文件: 头文件的搜索会从-I指定的目录开始;然后搜索gcc的环境变量 C_INCLUDE_PATH,CPLUS_INCLUDE_PATH,OBJC_INCLUDE_PATH 设置的目录;再搜索系统目录 /usr/include 和 /usr/local/include(centos7中该目录下是空的);最后搜索gcc的一系列自带目录(如/usr/include/c...

2020-11-30 16:54:41 20

转载 直线、圆环绘制算法

一、直线算法1、数值微分法(DDA算法)DDA算法主要是利用了增量的思想,通过同时对x和y各增加一个小增量,计算下一步的x和y值。根据上式可知△x=1时,x每递增1,y就递增k,所以只需要对x和y不断递增就可以得到下一点的函数值,这样避免了对每一个像素都使用直线方程来计算,消除了浮点数乘法运算。#include <Windows.h>#include <iostream>#include <cmath>using namespace std;const

2020-11-29 15:58:55 43

原创 ARGB颜色格式学习

概述RGBRGB(Alpha,Red,Green,Blue)色彩模式是工业界的一种颜色标准,是通过对红®、绿(G)、蓝(B)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的,RGB即是代表红、绿、蓝三个通道的颜色,这个标准几乎包括了人类视力所能感知的所有颜色,是目前运用最广的颜色系统之一。RGB图像只使用三种颜色,就可以使它们按照不同的比例混合,在屏幕上呈现16777216(256 * 256 * 256)种颜色ARGB一种色彩模式,也就是RGB(Alpha,Red,Green,Blu

2020-11-29 13:16:51 102

原创 bmp图片格式解析

BMP文件数据从文件头开始先后分为四个部分bmp文件头:提供文件的格式、大小等信息struct bitmap_fileheader { unsigned short type; //表示位图类型 unsigned int size; //4字节 表示文件的大小,单位是字节 unsigned short reserved1; //2字节 这个是保留的,为0 unsigned short reserved2; //2字节 这个也是保留的,为0 unsigned int off_bits; /

2020-11-05 20:47:45 20

转载 SVN安装与使用总结

SVN使用教程总结 SVN简介:  为什么要使用SVN?       程序员在编写程序的过程中,每个程序员都会生成很多不同的版本,这就需要程序员有效的管理代码,在需要的时候可以迅速,准确取出相应的版本。 Subversion是什么?    它是一个自由/开源的版本控制系统,一组文件存放在中心版本库,记录每一次文件和目录的修改,Subversion允许把数据恢复到早期版...

2020-10-30 13:49:28 28 1

原创 网络协议(TCP/IP、UDP)总结

什么是协议协议实际上就是一种约定。好比说,我们做一个石头剪刀布的游戏,我们约定好:石头>剪刀、剪刀>布、布>石头,以此作为游戏规则。我们所有人都遵循这个约定,那么就不需要任何的多余的沟通便可以完成这个游戏。而这种方式形成的约定实际上就是一种协议了。什么是协议簇一组协议的集合/相互关联的一组协议什么是协议栈协议的实现和一组协议的关系以及该组协议的层次结构,一般有清晰地up/down依赖关系和上下行交互OSI模型和TCP/IP模型及对应协议OSI七层模型对应网络协议TCP

2020-09-17 19:54:34 128

转载 无线通信中几个重要概念

信道信道是对无线通信中发送端和接收端之间的通路的一种形象比喻,对于无线电波而言,它从发送端传送到接收端,其间并没有一个有形的连接,它的传播路径也有可能不只一条,但是我们为了形象地描述发送端与接收端之间的工作,我们想象两者之间有一个看不见的道路衔接,把这条衔接通路称为信道。信道具有一定的频率带宽,正如公路有一定的宽度一样。一般可以分为物理信道、传输信道、逻辑信道三种。信道带宽在模拟通信系统或传输介质中,所说的“带宽”是指信号频率的通频范围,单位为“赫兹”。信道带宽是限定允许通过该信道的信号上限频率和.

2020-09-14 21:46:25 104

原创 QT实现员工管理系统

最近学习需要做一个员工管理系统的项目。项目要求是客户端服务器之间进行通信,注册与查询员工信息,因为学过QT就想着用QT来实现以下客户端,C来实现服务器。下面是我的客户端界面登陆界面注册界面主界面由于时间太紧,只写了登陆和注册的功能客户端服务器源码在github小伙伴可以自行下载https://github.com/a1449660223/Staff如果问题私信留言交流,相互学习共同进步...

2020-09-12 15:07:01 258

原创 git的使用及常用命令

【1】git的安装ubuntu:sudo apt-get install gitmac :brew install git【2】git的配置git命令的帮助方法 git help 命令git config --global user.name "dzs" #配置用户名git config --global user.email "zhansheng_hello@163.com" #配置邮箱git config --list #查看配置的【3】git的工作模式远程仓库 &lt

2020-09-08 11:53:32 222

原创 并发竞态的解决方法

有多个进程同时访问同一个驱动程序中的临界资源的时候,竞态就会产生了。竞态产生的根本原因:1.对于单核cpu,内核支持抢占。2.多核cpu,核与核之间会产生竞态3.中断和进程间也会产生竞态4.中断和中断间产生竞态(中断嵌套可以)(arm架构不支持)一、中断屏蔽(了解)中断屏蔽只适合在单核cpu。中断屏蔽保护的临界资源要尽可能的短(时间),如果屏蔽的时间较长,可能导致内核的崩溃,或者用户数据的丢失。local_irq_disable();//临界资源local_irq_enable()

2020-08-29 21:07:53 60

原创 ARM中特殊的功能寄存器

ARM7,ARM9,ARM11 有37个32-Bits长的寄存器.1 个用作PC( program counter)1个用作CPSR(current program status register)5个用作SPSR(saved program status registers)30 个通用寄存器Cortex体系结构下有40个32-Bits长的寄存器Cortex-A(ARM-v7)多出3个寄存器,Monitor 模式 r13_mon , r14_mon, spsr_mon1 个用作PC(

2020-08-28 21:23:52 130

原创 ARM裸机开发外设不工作

在进行ARM裸机开发使用外设的时候可能会遇到无法启动 直接卡死的情况这可能是因为uboot没有进行外设的复位初始化此时就需要手动进行外设的初始化当芯片跑上操作系统的时候 就没有这种情况出现是因为内核在启动的时候对外设进行了复位,因此可以直接使用外设...

2020-08-26 11:30:27 51

原创 系统移植详解过程

系统移植linux系统移植分为四块1、环境搭建2、BootLoader移植3、linux内核的移植4、根文件系统移植系统移植具体的部署方式分为两种:开发阶段系统的部署uboot镜像(ubootpak.bin) : 下载到flash/SDlinux内核镜像(uImage) : 通过tftp下载根文件系统(rootfs) : 通过nfs挂载特点:下载调试方便,适合做开发产品阶段系统的部署uboot镜像(ubootpak.bin) : 下载到flas

2020-08-25 21:27:41 261

原创 linux根文件系统编译和移植过程

一、概念根文件系统:系统运行所必须依赖的一些文件(比如脚本、库、配置文件、命令…),本质就是目录和文件。根文件系统镜像:将根文件系统按照某种格式进行打包压缩后生成的单个文件 rootfs-----> ramdisk.img文件系统:一种管理和访问磁盘的软件机制,不同文件系统管理和访问磁盘的机制不同二、移植根文件系统的工具 —> busybox1、短小精悍2、版本更新较快,版本之间差异不大三、如何获取busyboxhttps://busybox.net/downloads/

2020-08-25 21:05:33 338

原创 Qt绘图之QGraphicsScene QGraphicsView QGraphicsItem详解

Graphics View提供了一个界面,它既可以管理大数量的定制2D graphical items,又可与它们交互,有一个view widget可以把这些项绘制出来,并支持旋转与缩放。这个柜架也包含一个事件传播结构,对于在scene中的这些items,它具有双精度的交互能力。Items能处理键盘事件,鼠标的按,移动、释放、双击事件,也可以跟踪鼠标移动。Graphics View使用BSP树来提供对item的快速查找,使用这种技术,它可以实时地绘制大规模场景,甚至以百万items计。Graphics Vi

2020-08-25 20:26:45 416

原创 linux内核编译和移植过程

一、linux内核的特点1、linux内核是开源的,作者:linusgit : 版本管理工具源码由C语言和汇编实现2、linux内核支持多种硬件架构平台3、linux内核采用模块化方式编写,分层思想4、linux内核使用C和汇编代码实现,在内核中最好不要使用C++5、linux内核具有很好的移植和裁剪特性通过图形化界面的配置方式就可以完成裁剪二、linux内核源码的获取1、linux官方获取https://mirrors.edge.kernel.org/pub/linux/kern

2020-08-25 20:19:25 148

原创 了解uboot及常用命令

一、bootloader概念boot:引导loader:加载bootloader:引导加载内核系统二、u-boot和bootloader的关系?bootloader是一些列引导内核程序的统称。u-boot属于bootloader中的一种。bootloader 种类:vivi redboot u-boot bios …嵌入式开发中都是使用的u-boot。三、u-boot的特点1、u-boot是一个开源的软件2、uboot支持多种架构,arm powerPC mips x86 …3、u

2020-08-24 21:17:17 40

原创 系统移植产品阶段的部署

产品阶段的部署uboot镜像(ubootpak.bin) : flash/SDlinux内核镜像(uImage) : flash/SD根文件系统镜像(ramdisk.img) : flash/SD1、拷贝uImage和ramdisk.img到tftpboot目录下2、启动开发板,进入uboot的交互界面3、 下载uImage镜像到EMMC中tftp 0x48000000 uImagemmc write 0x48000000 0x800 0x40004、下载r

2020-08-24 21:08:13 42

原创 系统移植开发阶段部署

开发阶段部署阶段uboot镜像(ubootpak.bin) : flash/SDlinux内核镜像(uImage) : tftp下载根文件系统(rootfs) : nfs挂载1、启动uboot,进入uboot的交互界面2、使用tftp命令下载uImage内核镜像到内存中。下载之前需要将uImage的镜像拷贝到tftpboot目录下。tftp 0x48000000 uImage3、设置uboot的自启动参数:bootargsbootargs:自启动的环境变量lin

2020-08-24 21:06:49 58

原创 linux下uboot编译和移植过程

一、获取u-boot源码1、u-boot官方获取(DENX)https://ftp.denx.de/pub/u-boot/2、从芯片厂家获取3、从开发板厂家获取4、从部门主管获取三星没有将S5p6818的硬件支持的源码开源到u-boot官方,不可以从官方获取u-boot源码,注:本次实验使用的是u-boot-2014.07版本 开发板是FS6818 芯片S5p6818二、u-boot版本的选择1、不选择太新2、不选择太旧3、选择稳定版本rc:表示测试版三、移植的准备工作获取硬件

2020-08-24 21:02:11 163

原创 烧写uboot的三种方式

一、使用ubuntu中的sdtool工具将u-boot镜像烧写到SD卡中sdtool工具下载链接前提:必须使用读卡器,电脑自带的SD卡卡槽不可以1、拷贝sdtool工具到ubuntu中porting\系统移植资料\工具\sdtool2、sdtool工具中的文件分析s5p6818-sdmmc.sh : 将ubootpak.bin文件写到SD卡ubootpak.bin : u-boot的镜像文件后边u-boot移植目的就是得到ubootpak.bin文件。如果要测试自己的u-boot的镜

2020-08-22 21:07:38 924

原创 gnu交叉编译相关的常用命令

前缀:arm-none-linux-gnueabi-ubuntu系统中x86架构的GUN命令:/usr/bin以arm阶段汇编点灯代码为例:gcc 编译命令arm-none-linux-gnueabi-gcc -c led_asm.S -o led_asm.old 链接:将所有的.o文件链接生成可执行文件(.elf)arm-none-linux-gnueabi-ld -Ttext=0x43c00000 led_asm.o -o led_asm.elf-Tmap.lds : 指定链接脚本

2020-08-22 19:57:23 157

原创 tar压缩

tar压缩选项-c: 建立压缩档案-x:解压-t:查看内容-r:向压缩归档文件末尾追加文件-u:更新原压缩包中的文件这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个。下面的参数是根据需要在压缩或解压档案时可选的。-z:有gzip属性的-j:有bz2属性的-Z:有compress属性的-v:显示所有过程-O:将文件解开到标准输出下面的参数-f是必须的-f: 使用档案名字,切记,这个参数是最后一个参数,后面只能接档案名。tar -cf all.tar

2020-08-21 11:29:48 41

转载 Makefile双冒号的使用规则

双冒号规则就是使用“::”代替普通规则的“:”得到的规则。当同一个文件作为多个规则的目标时,双冒号规则的处理和普通规则的处理过程完全不同(双冒号规则允许在多个规则中为同一个目标指定不同的重建目标的命令)。首先需要明确的是:Makefile中,一个目标可以出现在多个规则中。但是这些规则必须是同一类型的规则,要么都是普通规则,要么都是双冒号规则。而不允许一个目标同时出现在两种不同类型的规则中。双冒号规则和普通规则的处理的不同点表现在以下几个方面:1、双冒号规则中,当依赖文件比目标更新时。规则将会被执行。对于

2020-08-19 20:20:55 90

原创 配置Ubuntu静态地址

图形界面设置Ubuntu的静态ip地址右上角有一个wifi或者上下箭头的图标选择这个选项Edit Contionsipv4—>Manual(手动方式)ip :192.168.0.210netmask :255.255.255.0gatewayip:192.168.0.1DNS :8.8.8.8sudo service network-manager restart重启Ubuntu的网络管理修改为自己的ip ,注意保持网段相同命令行配置Linux网络静态i

2020-08-18 17:49:23 97

原创 c语言绝对定位

C语言中的关键字__attribute_____attribute__( at(绝对地址) )的作用分两个,一个是绝对定位到Flash,另个一是绝对定位到RAM。1、定位到flash中,一般用于固化的信息,如出厂设置的参数,上位机配置的参数,ID卡的ID号,flash标记等等const u16 gFlashDefValue[512] __attribute__((at(0x0800F000))) = {0x1111,0x1111,0x1111,0x0111,0x0111,0x0111};//定位在fl

2020-08-11 22:13:59 115

原创 LED闪烁(汇编)

该汇编程序是基于S5P6818X芯片(cortex-A53)的一个简单汇编程序,实现LED闪烁功能 .text .global _start_start: @ 1. 设置GPIOA28引脚为GPIO功能 @ GPIOAALTFN1[25:24] = 0b00 @ 0xC001A024 为GPIOAALTFN1寄存器的地址 ldr r0, =0xC001A024 @在寄存器r0中存入GPIO控制寄存器GPIOAALTFN1的地址 ldr r1, [r0] @加载GPIO控制寄存器G

2020-08-11 22:04:03 1687

原创 异常处理程序汇编过程分析

当程序运行过程中出现异常的时候,CPU是怎么执行的呢,下面来看一下当一个中断发生时需要响应中断,那么就要保存现场:1、保存cpsr到spsr_<mode>2、修改cpsr 1.切换到ARM状态 2.切换到对应的异常模式(在这里是SVC) 3.禁止相应的中断位(根据需要)3、保存返回地址到lr_<mode>4、跳转到相应的异常向量表以上为保存现场的过程(四大步三小步)CPU自动完成保存现场的过程异常向量表异常向量表是内存上的一块地址空间,这块空间的大小是32字节

2020-08-11 20:29:56 58

原创 ARM常用汇编指令

1、数据操作指令数据搬移指令mov:移动指令mvn:取反移动指令语法格式:{cond}{s} {Rd}, {oprand2}mov r0, #0xFF // 立即数0xFF放入寄存器r0 立即数前需要加“#”mov r1, r0 // 将寄存器r0的数据放入寄存器r1中mvn r2, #0xFF // r2 = ~0xFF(0xFFFFFF00)mov r3, #0xFFFFFF // 0xFFFFFF是有效数,写入机器码会转换成立即数#~0xFF0000

2020-08-11 17:46:09 150

原创 链接脚本分析

下面是一个简单的链接脚本,简单注释解释一下里面的大概内容/*链接脚本给编译器使用*/OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")/*OUTPUT_FORMAT("elf32-arm", "elf32-arm", "elf32-arm")*//* 指定架构 */OUTPUT_ARCH(arm)/*入口*/ENTRY(_start)SECTIONS /*分段*/{ . = 0x00000000;

2020-08-11 15:32:04 43

原创 ARM是什么

ARM发展史1978年12月5日,物理学家赫尔曼·豪泽(Hermann Hauser)和工程师Chris Curry,在英国剑桥创办了CPU公司(Cambridge Processing Unit),主要业务是为当地市场供应电子设备。1979年,CPU公司改名为Acorn公司。起初,Acorn公司打算使用摩托罗拉公司的16位芯片,但是发现这种芯片太慢也太贵。"一台售价500英镑的机器,不可能使用价格100英镑的CPU!"他们转而向Intel公司索要80286芯片的设计资料,但是遭到拒绝,于是被迫自行研发

2020-08-07 20:37:45 47

转载 元对象编译器moc

诸位周知,Qt 使用的不是标准的C++ 语言,而是对其进行了一定程度的“扩充”。为什么这样说呢?这一点我们从Qt新增加的关键字就可以看出来:SIGNAL、SLOTS 或者 EMIT。所以有人会觉得Qt 的程序编译速度慢,这主要是因为在 Qt 将源代码交给标准 C++ 编译器之前,需要事先将这些扩展的语法去除掉。而完成这一操作的工具就是所谓的moc。moc 全称是 Meta-Object Compiler,也就是“元对象编译器”。Qt 程序在交由标准编译器编译之前,先要使用 moc 分析 C++ 源文

2020-08-06 19:43:22 51

转载 QT事件处理机制

事件简介QT程序是事件驱动的, 程序的每个动作都是由内部某个事件所触发。QT事件的发生和处理成为程序运行的主线,存在于程序整个生命周期。常见的QT事件类型如下:键盘事件: 按键按下和松开鼠标事件: 鼠标移动,鼠标按键的按下和松开拖放事件: 用鼠标进行拖放滚轮事件: 鼠标滚轮滚动绘屏事件: 重绘屏幕的某些部分定时事件: 定时器到时焦点事件: 键盘焦点移动进入和离开事件: 鼠标移入widget之内,或是移出移动事件: widget的位置改变大小改变事件: widget的大小改变显示和隐

2020-08-06 19:17:47 45

原创 QT:资源文件作用及如何添加

资源文件的作用:1、一个应用程序中可能需要加载各种资源(如图标、文本翻译等),对于这些资源的管理,Qt有专门的资源管理系统,它是一个跨平台的资源机制,用于将程序运行时需要的资源以二进制的形式存储到可执行文件内部。因此如果将用到的资源,比如图标文件等,放在资源文件中,它将编译到可执行文件内部,这样就无需担心这些文件的丢失。2、在内存中,以一棵资源对象树来组织资源。此树在程序启动时被自动生成并且被 QFile 用来定位资源路径。你可以使用带有 “: /” 前缀的 QDir 从根目录开始遍历这棵树。3、Qt

2020-07-31 20:54:17 225

原创 QT:IDE工具说明

1、欢迎窗口视图区新建或打开已有项目菜单新建或打开已有项目2、编辑源码或项目文件3、设计:界面编辑4、调试程序5、项目配置编译配置A、影子目录:便于移植B、环境变量【编译运行依赖配置】主要的编译依赖:头文件路径、库路径及库名、工具,等等主要的运行依赖:共享库路径C、其他的一般不改动编译流程和清除流程不改!!!运行配置:A、程序路径和当前路径B、环境变量6、帮助系统7、编译程序自动化编译,make工具根据Makefile的规则进行自动编译Makefile

2020-07-31 20:18:07 109

sdtool.rar

此工具用于Ubuntu下将uboot镜像下载到SD卡中,内有fs6818uboot镜像,具体的下载操作步骤可以参考https://blog.csdn.net/q1449660223/article/details/108174423

2020-08-22

ImageWriter.rar

此工具用于Windows下将uboot镜像下载到SD卡中,内有fs6818uboot镜像,具体的下载操作步骤可以参考https://blog.csdn.net/q1449660223/article/details/108174423

2020-08-22

74HC595.rar

此驱动函数 基于STM32F103 HAL库,文件开头有相对应硬件依托的引脚定义,如果需要在其他单片机运行 只需要修改文件开头定义即可。

2020-04-23

空空如也

空空如也

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

TA关注的人 TA的粉丝

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