自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

吾生也有涯,而知也无涯

以有涯随无涯殆已

  • 博客(114)
  • 资源 (1)
  • 收藏
  • 关注

原创 volatile c语言关键字 / cache / 内存一致性

volatile c语言关键字 / cache / 内存一致性

2022-10-27 15:27:40 598 1

原创 Android ko module compile 简介

Notion – The all-in-one workspace for your notes, tasks, wikis, and databases.

2022-01-21 21:25:00 2069

原创 EM算法原理

Notion – The all-in-one workspace for your notes, tasks, wikis, and databases.

2021-12-26 23:22:27 381

原创 dlopen和constructor attribute

https://www.notion.so/dlopen-constructor-attribute-9fafb4ca4490459db76e389ba0da8856https://www.notion.so/dlopen-constructor-attribute-9fafb4ca4490459db76e389ba0da8856

2021-12-02 21:04:31 363

原创 傅里叶变换的直观理解

傅里叶变换的直观理解 (notion.so)https://www.notion.so/ddcc0d6209ae43ad83ccb84e7686de00

2021-11-25 01:50:10 330

转载 设备树中那些节点会被转换为内核里的platform_device

设备树中的节点有些能被转换为内核里的platform_device,有些不能:A. 根节点下含有compatile属性的子节点,会转换为platform_device;B. 含有特定compatile属性的节点的子节点,会转换为platform_device,如果一个节点的compatile属性,它的值是这4者之一:“simple-bus”,“simple-mfd”,“isa”,“arm,amba-bus”, 那么它的子结点(需含compatile属性)也可以转换为platform_device

2021-04-14 20:47:04 333

原创 shell中的变量和Makefile中的变量

一、Makefile中引用shell中的变量test.sh#!/bin/bashset -eexport DIR=/home/yuyin.weimake printMakefileprint: echo $(DIR)执行test.sh,结果如下:echo /home/yuyin.wei/home/yuyin.wei如果此时Makefile中使用echo $$(DIR),反而会出错,如下:echo $(DIR)/bin/sh: DIR

2021-04-13 14:32:57 738

原创 linux I2C驱动

I2C驱动分为I2C适配器驱动和I2C设备驱动,I2C适配器驱动芯片厂商已经帮我们实现好了,I2C设备驱动需要用户自己编写。下面我们主要就这两个方面进行分析。另外这里举例是用NXP的imx6ull芯片。I2C适配器驱动linux启动最先运行的I2C驱动相关函数是i2c_init(),这个函数是linux内核实现的,而不是厂商实现的,位于drivers\i2c\i2c-core.c文件第1879行:static int __init i2c_init(void){ int retval;

2021-01-18 14:46:33 448

原创 卡尔曼滤波

推导相关预测(predict)更新(update)其中是隐状态,也是我们想要获得的状态,但是我们无法测量,只能根据观测值进行推测,是观测值,predict相当于根据以往1到t-1的观测值...来预测t时刻的隐状态,用概率公式来表示就是,由于隐状态是连续的,而不是离散的(discrete),所以可以用概率密度函数表示,实际上这是一个高斯分布,,其中,是此分布的期望,是此分布的协方差矩阵,在上述预测的公式中代表的就是期望,代表的就是协方差矩阵update就是根据1到t时刻

2021-01-15 10:54:57 2480

原创 协方差矩阵 多元高斯分布

协方差矩阵对于一维随机变量直接用方差即可衡量随机变量x与其期望E(x)的偏离程度,对于多维随机变量X,需要用一个矩阵来表示偏离程度,矩阵的对角线是每个维度自己的方差,对角线以外表示不同的维度之间的协方差,所以协方差矩阵是实对称矩阵。协方差矩阵的计算公式所以有如下性质:如果随机向量Y=PX,其中X,Y为随机向量,P为矩阵(方阵)也就是多元高斯分布一元高斯分布概率密度函数如下:多元高斯分布为:具体推导过程可以参考:https://zhuanlan.zhi.

2021-01-14 23:27:46 8513

原创 linux驱动 阻塞IO 等待队列 等待队列入口

阻塞IO主要有两种方式,等待队列,等待队列头一、等待队列

2020-12-14 15:13:28 338

原创 linux设备树中的#address-cells #size-cells

用于描述子节点的地址信息,即reg属性中,地址信息占几个uint32,地址长度占几个uint32,单位为uint32(4字节)注意,这里是描述子节点的地址信息,而不是本节点的地址信息

2020-11-28 22:40:21 2422

原创 arm中的B指令

参考:http://blog.chinaunix.net/uid-30311790-id-5755862.html一、B指令是绝对跳转还是相对跳转?B指令是相对跳转指令,是根据当前PC寄存器的值加上偏移来实现跳转的,所以它和代码在内存中的位置无关。但是我们在查看汇编文件的时候,经常会有种错觉,它好像是按绝对地址进行跳转的,因为B指令的形式是 “B Label",即跳转到Label处进行执行,Label这个标签明显是绝对地址啊。其实在汇编语句翻译成机器码时会将语句翻译成按相对地址进行寻址。计算方.

2020-10-12 16:09:23 5507

原创 thumb指令和arm指令

参考https://www.embedded.com/introduction-to-arm-thumb/一、为什么一个芯片需要thumb和arm两套指令集许多复杂的功能在复杂指令集(CISC)处理器上执行只需要单一的一条指令,即可,虽然可能有点慢,在精简指令集处理器上可能需要多条指令,所以在精简指令集(RISC)CPU上为了减少额外的指令对内存的消耗,考虑引入thumb指令集到处理器。现在最受欢迎的32位微处理器许多都使用RISC技术,不像CISC处理器,RISC引擎每一个时钟周期(个人感觉应

2020-10-12 15:52:07 4760

原创 u-boot中的make menuconfig和头文件配置是如何同时发挥作用的

这里以正点原子的i.mx6ull的alientek开发板为例1.我们可以通过include/configs/mx6ull_alientek_emmc.h头文件对u-boot进行裁剪配置,这个文件是我们移植到正点原子开发板的时候自己添加的2.

2020-09-17 12:25:32 710

原创 u-boot是如何重定位代的(如何拷贝自己的)

u-boot在启动之后会在_main函数中将自己重定位到靠近DDR内存尾部的地方,避免和linux内核代码冲突

2020-09-14 23:20:55 710

原创 u-boot的链接脚本文件u-boot.lds分析

u-boot 版本: 2016.03,NXP更改过的版本,正点原子再次更改,详细可参见正点原子的教程。这里先贴出来链接脚本文件,它是生成过程,可以参考https://blog.csdn.net/xiaoyink/article/details/108508415,里面有简略的提到,这里主要分析此文件的含义,如下:OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")OUTPUT_ARCH(arm)ENTRY(

2020-09-14 20:06:12 792

原创 链接脚本文件、C源文件、arm汇编源文件中 地址常量 如何相互引用

1

2020-09-14 15:00:46 970

原创 u-boot编译 Makefile 简单分析

u-boot 版本: 2016.03,NXP更改过的版本,正点原子再次更改,详细可参见正点原子的教程。1. make xxx_defconfig的过程从顶层Makefile开始,前面的变量赋值分析,可以参考《正点原子 I.MX6U嵌入式Linux驱动开发指南》我们直接从上述得到:config-targets = 1 mixed-targets = 0 dot-config = 1根据上述变量进行ifeq等条件选择后,make xxx_defconfig匹配的规则如下(顶层Ma...

2020-09-10 16:50:35 1325 1

原创 Makefile中调用make命令,-C和-f选项的区别

-C选项Makefile中-C是递归调用子目录中的Makefile,-C选项后跟目录,表示到子目录下执行子目录的Makefile,顶层Makefile中的export的变量还有make默认的变量是可以传递给子目录中的Makefile的-f选项顶层Makefile使用make -f调用子目录中的文件(文件名可以随意,不一定用Makefile作为文件名)作为Makefile,好像不能传递变量到底层目录,只能在命令行中加入变量赋值选项,来传递变量;另外经测试,在顶层Makefile中使用-f选项.

2020-09-08 11:42:32 10315

原创 Makefile 生成.d 头文件依赖规则

详细的gcc参数说明,参见https://blog.csdn.net/nawenqiang/article/details/83381237下面是以我写的实际项目中的测试程序的Makefile为例进行说明我们可以把要生成.d文件的gcc指令单独做成一个规则,如下$(OBJS_DIR)/%.d:%.cCC:=gccCFLAGS:=-std=gnu99 -gLDFLAGS:= -lpthreadOBJS_DIR:=./objsMEIHE_SRCS:= mt_test_meihe.c r

2020-09-07 15:32:24 1963

原创 arm中除法和浮点运算

在学习正点原子I.MX6ull芯片开发板的时候,有两个裸机实验(串口和spi)涉及到了除法运算以及浮点运算,先声明,除法运算(定点和浮点,浮点除法是浮点运算的一种)和浮点运算是两个东西:1.除法分为定点除法和浮点除法,arm中定点除法例如32位无符号整形除法,是没有直接的汇编指令的,需要借助软件库来实现;2.浮点数的除法可以调用软件库来进行软件模拟,也可以借助硬件进行浮点数运算(协处理器,cp15指令开启硬件浮点运算)。一、定点数除法指令需要链接gcc库:使用定点数除法运算的时候编.

2020-08-05 20:32:36 4403 5

原创 armv7指令集 C函数调用 堆栈指针SP的变化

首先说明一下,arm中函数调用不同的编译器可能差别很大,即使都是arm-linux的交叉编译器,也有差别,有的编译器把r7寄存器作为栈帧寄存器(fp),有的把r11寄存器作为栈帧指针(fp),例如arm-linux-gnueabihf-gcc用的r7和arm-linux-gnueabi-gcc用的r11,另外在函数执行开头的处理也不一样1. arm-linux-gnueabihf-gcc编译器先给函数中变量分配栈空间,然后放fp和sp指向栈顶2. arm-linux-gnueabi-gcc编译器先让

2020-06-30 23:11:54 3033 2

原创 rtthread 线程调度的启动 (基于cortex m3系列芯片)

cortex m3具有用户级和特权级两种特权等级 以及 handle模式(处理中断时运行在handle模式)和线程模式 两种模式,其中用户级特权只能运行在线程模式。如下图(摘自cortex m3权威指南):cortex-m3的soc启动之后(这里以stm32芯片为例),默认运行在特权级的线程模式...

2020-06-30 10:53:44 1737

原创 stm32f0717bt6和i.mx6ull启动方式的区别

stm32stm32启动方式分为(根据boot0,boot1的配置选择):1)主闪存存储器= 芯片内置的Flash。这也是正常工作模式2)SRAM = 芯片内置的RAM 区,就是内存啦。3)系统存储器= 芯片内部一块特定的区域,芯片出厂时在这个区域预置了一段Bootloader,就是通常说的ISP 程序。这个区域的内容在芯片出厂后没有人能够修改或擦除,即它是一个ROM 区。第3种方式,是运行厂商自己的引导程序,用来从串口烧写程序,一般没什么用,我们一般使用第1种方式启动stm32 。但是i

2020-06-05 13:17:55 617

原创 微积分的直观理解

在微积分中,我们进行定积分计算的时候一般是用牛顿莱布尼兹公式,不定积分计算也类似,都需要寻找原函数F(x),但是如果想直观的理解微积分,我们需要顺着公式的反方向进行理解,下面我提供一种直观理解微积分的思路。在以下的表达中,我们使用的定积分,但是为了方便可能会省略积分上下限,也可能不省略。已知函数 y = f(x), 和积分区间[xa, xb],区间两个端点xa, xb对应的函数值为ya, ...

2019-12-11 21:31:56 3680 6

原创 实对称矩阵 二次型 合同 相似对角化

一、实对称矩阵实对称矩阵的几点性质:1.特征值必是实数2.不同特征值的特征向量必正交3.必与对角矩阵相似4.一定可以用正交矩阵相似对角化(满足的矩阵为正交阵),步骤如下 (1)求A的特征值λ1、λ2、λ3 (2)求特征向量α1、α2、α3 (3)改造特征向量 a. 如λi≠λj 只需要单位化 ...

2019-11-14 23:22:57 11059 1

原创 rt-thread系统 基于cortex-m3架构 的线程上下文切换实现

参考 官方文档https://www.rt-thread.org/document/site/programming-manual/porting/porting/线程上下文切换等功能,一般采用汇编格式编写,不同cpu架构实现方式肯定不同,为了使rt-thread系统能够在不同的CPU架构上都能运行,RT-thread提供了一套libcpu抽象层来适配不同的cpu,现在我们重点来说libcp...

2019-10-23 10:41:05 2146 2

原创 函数调用,中断以及进程切换,的现场保护的区别

首先,函数调用是预料范围内的代码执行,是完全可控的,当前执行的函数调用另外一个函数时,是从当前代码段通过跳转指令主动跳转到另外一个代码段,只需保存跳转之前的栈顶指针(fp),栈底指针(sp)到栈空间,保存跳转指令的下一条指令的地址到lr寄存器,无须保存所有寄存器的值(如果C函数有使用R4-R11寄存器,还是要保存一下滴,这个C编译器会帮我们完成,无需担心,下面会详细说明),然后还要使用寄存器r0-...

2019-10-07 22:35:31 7480 7

原创 Cortex-M3 PendSV 中断 系统调用 说明

参考 Cortex-M3权威指南中文版PendSV异常是和系统调用有些类似,cpu 需要手动将往NVIC 的PendSV 悬起寄存器中写1,然后产生中断, 系统调用(SVC)是cortex-M3 CPU执行 SVC指令之后产生中断(arm中一般是SWI 指令),都是软件的方式产生的中断,称其为内中断。PendSV 和SVC 两个内中断的不同之处在于:SVC指令执行之后,必须立即响应...

2019-09-29 14:54:12 8277 4

原创 特征基和相似对角化

一、特征基这里谈谈对特征基的简单描述,详细定义请参考正规教材。特征基和特征向量密不可分, 假设我们有一个矩阵,记做A矩阵,A矩阵可以理解为一种线性变换,A矩阵的每一列可以看做是变换后的基向量的坐标(详见https://blog.csdn.net/xiaoyink/article/details/90705106),特征基顾名思义,用特征向量作为基向量,构建坐标系;特征基矩阵可以理解为 用...

2019-09-19 16:00:51 4319 2

原创 生产者与消费者model

生产者消费者模型 使用信号量和互斥锁能够较好地实现Semaphore mutex = 1; //缓存区互斥操作的互斥信号量Semaphore empty = n; //空缓冲区数目Semaphore full = 0; //满缓冲区数目item buffer[n];int in = 0, out = 0;producer(){//生产者进程 while(1){ ...

2019-08-19 19:01:26 182

原创 Qt中生产者消费者模型的两种常用框架

一、信号量const int BufferSize = 4096;char buffer[BufferSize];QSemaphore freeSpace(BufferSize);QSemaphore usedSpace(0);void Producer::run(){ int i = 0; while(1){ freeSpace....

2019-08-18 22:49:07 2096 4

转载 面试题【1】:i++是否原子操作?并解释为什么?

转载自:https://blog.csdn.net/YEYUANGEN/article/details/19612795不是原子操作。理由:1.i++分为三个阶段:内存到寄存器寄存器自增写回内存这三个阶段中间都可以被中断分离开.2.++i首先要看编译器是怎么编译的,某些编译器比如VC在非优化版本中会编译为以下汇编代码:__asm{moveax,...

2019-08-16 10:06:01 682

原创 矩阵 向量 线性变换 基变换

线性变换:1.features函数的一种比较 “花哨” 的说法,只不过它接收一个向量,并输出一个向量但是满足线性变换还需要满足以下条件1. :2.=============================================================参考百度百科:https://baike.baidu.com/item/%E7%BA%BF%E6...

2019-06-01 23:45:42 7282 2

原创 Makefile中的eval

这里将openwrt中编译ipk包的时候使用的的Makefile,进行简化拿来进行说明,主要用来实验eval函数的用法PKG_NAME :=bcl_bootdefine Package/$(PKG_NAME) SECTION:=utils CATEGORY:=Utilities TITLE:=lziot_projectendefdefine BuildPac...

2019-04-29 14:08:25 2895 2

原创 makefile := 与 = 的区别

一、简述1、"="赋值,这种形式是以递归的形式展开变量,及被赋值的变量只有在被引用(使用)时,才会展开,及延迟展开(不常用)2、":="赋值,这种形式是直接展开式赋值。二、举例例子1:foo = $(bar)bar = $(ugh)ugh = Huh?all:;echo $(foo)例子来源于GnuMake上述例子执行结果为(其中all:;echo $(foo)...

2019-04-29 10:59:23 1989

转载 makefile--函数定义 函数调用

函数定义与调用转载自:https://www.jianshu.com/p/e2c78c8fb4a51. makefile中支持函数的概念make解释器提供了一系列的函数供makefile调用 在makefile中支持自定义函数实现,并调用执行 通过define关键字实现自定义函数示例1--函数定义define func1 @echo "my name is $(0)"...

2019-04-26 20:53:37 769

转载 CanFestival移植到stm32f103zet(2)

转载自:http://www.openedv.com/thread-246479-1-1.html上一节:https://blog.csdn.net/xiaoyink/article/details/89076829一、移植步骤:步骤一:在新建好的工程目录下新建文件夹CanFestival,再在CanFestival下新建文件夹driver、inc和src,再在inc文件夹下面新建st...

2019-04-07 23:08:13 2361

原创 CanFestival移植到stm32f103zet

源码参考:https://github.com/sallenkey-wei/CanFestival-transplanted2stm32一、对象字典的编辑:可以参考canopen学习资料中的一个pdf文档:《PDO SDO应用实例分析(编辑对象字典是可以参考).pdf》1.安装三个软件: python-2.7.10.amd64.msi wxp...

2019-04-07 22:49:10 1765

u-boot的段分布.vsdx

其实.__rel_dyn_start段主要是u-boot拷贝自己的时候使用,参考u-boot源码可以发现,u-boot拷贝自己之前,基本上都是汇编语句,即使是调用了C函数也没有使用.bss段内的全局变量,唯一的全局结构体gd(也可能不是唯一的)的地址也是存放在r9寄存器中,所以拷贝之前是用不到.bss段的,但是要用.__rel_dyn_start段,而拷贝之后用不到.__rel_dyn_start段,但是要用.bss段,所以为了节省内存,这两个段是可以重合的。另外拷贝的目的地址处,我们已经为.bss段留出了空间,.bss段是和整个u-boot镜像一起的,gd结构体的mon_len成员(= __

2020-09-14

空空如也

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

TA关注的人

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