自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(35)
  • 资源 (1)
  • 收藏
  • 关注

原创 动态编译和静态编译——制作动态库和静态库

参考链接GCC生成动态链接库(.so文件):-shared和-fPIC选项GCC创建和使用静态链接库(.a文件)gcc的使用方法;动态编译和静态编译;Linux制作动态库和静态库命名规则静态库命名规则如下:libxxx.olib:前缀.o:静态库动态链接库(shared object file,共享对象文件)命名规则如下:libxxx.solib:前缀.so:动态库动态库...

2021-01-15 08:45:06 1547 4

原创 如何交叉编译程序:以 freetype 为例

怎么确定“系统目录”?echo 'main(){}'| arm-linux-gnueabihf-gcc -E -v -系统头文件目录 以stdio.h为例:/home/book/100ask_imx6ull-sdk/ToolChain/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/libc/usr/include系统库目录LIBRARY_PATH:/home/book/100ask_imx6ul

2021-01-10 16:08:01 2464 6

原创 Linux字符设备驱动——入口函数完全解析

文章目录inode——索引struct filecdev在Linux内核中:在Linux字符设备驱动中:用户空间访问该设备的程序:源码解析设备号分配两种方法分配设备号动态分配静态申请自动分配设备号+注册cdevclass 介绍字符设备驱动入口函数初始化流程open函数如何查找file_operation的接口inode——索引inode 译成中文就是索引节点。每个存储设备或存储设备的分区(存储设备是硬盘、软盘、U盘 … … )被格式化为文件系统后,应该有两部份,一部份是inode,另一部份是Block,

2020-12-22 10:57:11 1288 2

原创 图解Linux内核链表

list_del_init:/** * list_del_init - deletes entry from list and reinitialize it. * @entry: the element to delete from the list. */static inline void list_del_init(struct list_head *entry){ __list_del_entry(entry); INIT_LIST_HEAD(entry);}list...

2020-11-29 21:18:32 2215 2

原创 有符号与无符号

2020-09-01 11:37:24 159

原创 一图彻底搞懂数据结构二叉树的创建与遍历

一图彻底搞懂二叉树的创建与遍历二叉树基本概念二叉树的递归创建二叉链表的节点结构定义递归创建一图彻底搞懂递归创建二叉树的遍历前序遍历中序遍历后序遍历一图彻底搞懂遍历顺序的前中后代码整合:二叉树基本概念关于二叉树的基本概念大家可以参考这位博主整理的博客:数据结构 二叉树的建立与遍历以下概念摘自上面这位博主的博客中整理的内容,对基本概念了解的朋友可以直接条跳到目录中“一图彻底搞懂递归创建”这一小节,二叉树(Binary Tree)是n(n >= 0)个节点的有限集合,该集合或者为空集(称为空二叉树

2020-08-15 18:22:21 1288

原创 kernel.h的min宏中“(void)(&_min1 ==&_min2)”的功能是什么?

本文参考国外的一个论坛中对(void)(&_min1 ==&_min2)的讨论说明:这是个空操作,就是为了做一个类型检查,使用警告的副作用打印输出信息现做以下测试编写type_check.c如下注意变量类型:a与c的类型相同,a 与 b 的类型不同#include <stdio.h>#define min(x, y) ({ \ typeof(x) _min1 = (x); \ typeof(y) _mi

2020-08-11 18:48:27 202

转载 Linux设备树解析

本篇转载于Linux设备树解析

2020-07-17 17:13:07 112

原创 链表中为何使用二级指针

本篇目录前言参数的调用方式传值调用传址调用传引用调用示例说明使用二级指针/一级指针创建链表时的对比主函数中作此调用使用二级指针创建链表使用一级指针创建链表会成功吗销毁链表时二级指针和一级指针的对比使用二级指针销毁链表使用一级指针销毁链表会成功吗总结完整代码参考来源前言在学习数据结构时,在链表初始化或者销毁链表的时候,经常使用二级指针或者一级指针的引用,这是为什么呢?同样是指向内存单元的地址,为什么就不能使用一级指针呢?使用一级指针去初始化或者是销毁链表的时候,究竟会发生什么呢?到底什么时候该用二级指针,

2020-06-06 00:12:02 3901 4

原创 远程库修改的拉取

文章目录知识点排列github成员邀请对贡献者或者团队成员的修改进行合并知识点排列git 学习笔记知识点排列如下,需要请戳,目前有待进一步完善:1、Git 删除文件后找回方式总结2、Git 文件比较3、Git分支管理以下是个人的git学习笔记,参考并学习了尚硅谷的免费的 git 教程,个人认为讲的非常详细,来自哔站大学,链接如下:尚硅谷GitHub教程(新版git已上传,推荐观看)...

2020-04-06 23:19:03 218

原创 Git 删除文件后找回方式总结

文章目录声明:一、Git特性——.git只增不减二、基于索引值的找回操作git reset命令参数对比三、文件恢复的几类情景1、工作区删除文件,在尚未提交删除记录到本地版本库前,恢复文件2、 添加删除记录到暂存区并提交删除记录到版本库后,需要回退版本以恢复删除的文件声明:以下是个人的git学习笔记,参考并学习了尚硅谷的免费的 git 教程,个人认为讲的非常详细,来自哔站大学,链接如下:尚硅谷...

2020-04-05 21:34:50 4841 6

原创 Git分支管理

Git分支管理什么是分支?分支管理流程举例分支的好处分支合并解决分支合并后产生的冲突细究——何为冲突什么是分支?在版本控制过程中,使用多条线同时推进多个任务。分支管理流程举例此图片来源于尚硅谷教程主分支master用于项目面向客户的直接推送,也就是将来项目完成时我们会直接将这个版本发行出去供客户使用;而在项目开发的过程中,我们往往是进行分工合作的,每个团队负责的功能都不同,那么每个团...

2020-04-05 20:17:37 1194 1

原创 Git 文件比较

比较文件差异diff一、add前的比较二、add后和版本库中的内容比较1.准备工作创建diff_test.c添加到暂存区:commit到本地库 :2.在工作区修改diff_test.c这里偷了个懒:3.对比已提交的版本库中diff_test.c可以看到,git以行作为最小的管理单位,所以在增加的int b=1; 这一行前增加了一个“+”的标识...

2020-04-05 14:14:10 669

原创 stm32 位带操作

STM32 位带操作什么是位操作51单片机STM32BitBand Alias 位带别名区位带操作的头文件编写什么是位操作51单片机对于我么熟悉的51单片机,有了sbit(特殊功能寄存器位)关键字后,我们可以直接读写gpio的某一位,像这样就属于位操作:sbit led0 = P3 ^ 0;sbit led1 = P3 ^ 1;sbit led2 = P3 ^ 2;sbit led3...

2020-03-31 00:30:20 521

原创 NandFlash 驱动分析与基础功能实现

NandFlash一、写作目的一、写作目的NandFlash 尽管本身时序复杂,但是经过这么多年的发展,早已形成了一种专用的接口,作为普通使用者来说,我们无需直接去编写配置复杂的时序,只需按照CPU芯片手册和NAND手册的要求去配置SOC的nand控制器就可以了 ,即便是这样,有些流程和细节仍需我们注意,本篇以三星公司生产 KF2G08U0C为例,特此记录,但求忘记的时候“”有章可循“”。...

2020-03-23 01:48:56 1565

原创 辨析NOR FLASH地址左右移的问题

问1:同样是操作norflash,为什么cpu发出芯片手册中解锁等命令时,不需要右移,cpu发送扇区地时就得右移呢答1:我们通过NOR FLASH的芯片手册得知,要实现解锁功能:要往地址0X555写入0XAA等等几个操作,因为我们是通过NOR的手册查看到的,那么这里肯定是从NOR角度看到的地址,也就是说我们要往第0X555个16位的地址里写入0XAA,因为地址线是错开的缘故,我们CPU...

2020-03-13 00:17:54 1521

原创 mobaxterm无法与虚拟机进行ssh通信的解决办法

虚拟机与主机之间已经能互相PING通,但是在mobaxterm中无法用ssh连接到虚拟机。网上查找了原因,说是虚拟机可能没有开启ssh服务。用命令查看ssh状态,发现没有安装,遂安装openssh-server后再开启sshifconfig 查看虚拟机ip虚拟机、主机之间互相 ping 得通但是 SSH 连接不成功检查虚拟机有没有ssh服务sudo service ssh st...

2020-03-11 17:13:41 10779 4

原创 函数指针、函数指针数组详解及典型应用

20200305 杨千嬅唱的《处处吻》真是太好听了,下个他他吻她他吻她吻他吻她… 已沉醉一、何为函数指针我们知道指针变量指向内存单元的地址,比如存放普通变量int a;的地址的就是一重指针,存放一重指针变量的地址的就是二重指针,指针变量存地址,以此来实现传址调用,函数指针,顾名思义,就是指向函数的指针,那么何为指向函数呢?按照上面的逻辑,我们得有一个指针变量,这个指针变量里存放着该函数块在内...

2020-03-06 00:03:31 2121

原创 ldr adr bl 与位置无关码的关系及应用

ldr adr bl 与位置无关码的关系及应用参考了这几位博主的文章:关于adr指令的理解本文来自CSDN博客,转载请标明出处汇编指令-位置无关码(BL)与绝对位置码(LDR)(2)本文来自CSDN博客,转载请标明出处由于这几天事情比较多,这次的笔记比较潦草,有机会在整理吧结合实例对照如下:...

2020-02-28 21:58:38 179

原创 使用typedef定义结构类型和结构体指针类型的别名

使用typedef定义结构类型和结构体类型指针的别名今天在写printfh函数的时候,部分代码未能通过编译,特此记录,防止以后再犯这样的错误typedef struct person{ /* data */ char *name; int age; char score;} inform, *Pform; Pform = inform * (p); p...

2020-02-22 13:37:37 2379 1

原创 字符、字符串、字符数组、字符串数组、结构体数组的指针访问

字符、字符串、字符数组、字符串数组、结构体数组的指针访问测试一#include <stdio.h>void test0(){ printf("//==========test0_start===========\n"); char c; char *pc; /*第一步:所有变量都保存在内存中,我们打印一下变量的存储地址*/ printf...

2020-02-21 19:36:20 342

原创 S5PV210时钟配置

这是九鼎创展对S5PV210时钟配置的代码,下面结合S5PV210_ UM_ REV1.1来一步步的分析相关的寄存器配置// 时钟控制器基地址#define ELFIN_CLOCK_POWER_BASE 0xE0100000 // 时钟相关的寄存器相对时钟控制器基地址的偏移值#define APLL_LOCK_OFFSET 0x00 #define MPLL_LOCK_OFFSE...

2020-02-18 23:23:16 296

原创 Bss 段及利用符号表重定位后的管理

Bss 段:只定义但未初始化的全局变量和局部静态变量,不会储存在bin 文件中,因为储存这些0值没有很大的意义,如果你定义了unsigned int arr[1000000]={0};那bin文件得变得多大呀,所以在目标文件(*.o)和可执行文件中,BSS段只是为未初始化的全局变量和未初始化的局部静态变量预留位置而已,它并没有内容,所以它不占据空间。程序在运行时,才会给BSS段里面的变量分...

2020-02-14 00:25:33 1211

转载 ARM cp15协处理器操作i-cache

MRC 指令的格式为:MRC{条件} 协处理器编码,协处理器操作码1,目的寄存器,源寄存器1,源寄存器2,协处理器操作码2。MRC 指令用于将协处理器寄存器中的数据传送到ARM 处理器寄存器中,若协处理器不能成功完成操作,则产生未定义指令异常。其中协处理器操作码1 和协处理器操作码2 为协处理器将要执行的操作,目的寄存器为ARM 处理器的寄存器,源寄存器1 和源寄存器2 均为协处理器的寄存器。...

2020-02-10 12:00:26 220

原创 undefined reference to `__aeabi_unwind_cpp_pr1'

led.o:(.ARM.exidx+0x0): undefined reference to `__aeabi_unwind_cpp_pr1’X210的裸机学习:为了使用C语言来点亮一颗led灯,需要先设置栈指针,用来存放局部变量,然后C语言才能有自己运行的环境,于是就使用汇编写了这样一句:#define SVC_STACK 0xD0037D80 //初始化栈 ldr sp, =S...

2020-02-09 20:53:43 708

原创 int main(int argc, char *argv[ ])与 int main(int argc, char **argv)——Linux下的 main 函数传参

int main(int argc, char *argv[ ])与 int main(int argc, char **argv)今天看到Linux中的main函数居然是这样定义的,和之前学习C语言和单片机时写法不一样一开始,仔细研究过才发现,这才是最正统的main函数的写法,单片机开发中,太多东西被隐藏了。举个例子...

2020-02-07 22:52:11 905

原创 gcc 与 Makefile

这里使用 gcc 对 test1.c 和 test2.c 进行编译 汇编 链接(预处理系统默认执行),得到可执行文件testgcc test1.c test2.c -o test// 简单,// 但是会对所有文件都处理一次,// 文件多时如果只修改其中一个文件会导致效率低Makefile的引入及规则使用keil, mdk, avr等工具开发程序时点点鼠标就可以编译了,它的内部机制...

2020-01-29 23:12:08 211

原创 深入理解gcc

我们来看一下vi test1.c然后我们将错误修改一下

2020-01-29 17:45:25 1213

原创 开发板刷系统

自从学习Linux,这是我第二次拿出开发板了,果然嵌入式Linux的学习相比但单片机的学习更漫长且复杂,我也不知道自己最终会如何,刚好今天是大年初一,写笔记前顺便写个随笔小愿望:2020,武汉加油!中国加油!愿人们早日战胜病魔,迎来美好的春天,也祝父母:身体健康,开心快乐每一天baby:2020也是爱你的一年,祝这个开心果越来越美腻,感谢我能遇到对的人。自己:Linux小白成长之路一切顺利...

2020-01-26 12:31:29 1006

原创 ARM的37个寄存器详解

ARM的37个寄存器1、ARM CPU内部寄存器:2、shadow register(影子寄存器)ARM总共有37个寄存器,每种工作模式下最多有18个可见,我们把上图中那些名称和黑色框中的名称相同,但颜色不同且不为黑色的寄存器称为左侧黑色框中同名寄存器的影子寄存器。(cpsr和spsr例外,但spsr也是cpsr的影子寄存器)ARM核是一个非常紧凑的设计,影子寄存器的引入就是这种设计的...

2020-01-20 12:38:24 4604 3

原创 ARM体系结构

ARM的编程模式和7种模式一、ARM的基本设定1、ARM 对位宽做了如下约定:Byte : 8 bitsHalfword : 16 bits (2 byte)Word : 32 bits (4 byte)2、大部分ARM core 提供:ARM 指令集(32-bit)Thumb 指令集(16-bit )Thumb2指令集(16 & 32bit)Thumb指令集:编代码...

2020-01-19 21:07:02 248

原创 S5PV210的启动详解2

S5PV210的启动详解2上一篇启动详解1我们介绍到了S5PV210_IROM_APPLICATION NOTE_REV 0.3的2.1节 启动顺序(Operating Sequence )下面我们来详细的看一下iROM执行BL0时具体做了哪些初始化2.2 iROM(BL0) boot-up sequence (Refer 2.3 V210 boot-up diagram)Disabl...

2020-01-19 19:33:42 1992

转载 WS2812

最近在学习天猫精灵IOT平台的一些开发,其中的一个智能灯项目需要用WS2812 制作一个七彩智能灯,注意:此篇转载自链接: link.感谢原创作者

2020-01-14 20:50:31 1970

原创 S5PV210 启动过程详解1

S5PV210 启动过程详解一、常见的内存与外存的分类内存内部存储器 : 用来运行程序的 RAM , 举例(DRAM SRAM DDR)外存外部存储器 : 用来存储东西的 ROM ,举例(硬盘、 Flash(Nand iNand···· U盘、SSD)、 光盘)CPU 与内存外存的连接CPU 连接内存和外存...

2020-01-12 20:18:43 1781

原创 const int * p (或 int const* p) 和 int * const p以及const int * const p(或int const * const p)区别

const int p 与 int const p 和const int const *p区别一、何为constconst修饰的数据类型是指常类型,常类型的变量或对象的值是不能被更新的。也就是说const常量,具有不可变性。例如:const int Max=100; Max++会产生错误; 二、 指针常量与常量指针1、指针常量指针就是内存单元中的地址,所谓指针常量,也就是这个指针变...

2020-01-10 17:32:28 3946 3

esp8266+stm32+Tlink云平台 阳台花卉管理监测

esp8266+stm32+Tlink云平台 ,感知层用到的传感器有DHT11, 和adc采集光照,支持按下键下发,可以控制3个继电器

2020-05-30

空空如也

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

TA关注的人

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