自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 arm中除法和浮点运算

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

2020-08-05 20:32:36 28

原创 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 177

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

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

2020-06-30 10:53:44 164

原创 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 125

原创 微积分的直观理解

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

2019-12-11 21:31:56 329

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

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

2019-11-14 23:22:57 997

原创 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 529

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

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

2019-10-07 22:35:31 1359 3

原创 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 1283 2

原创 特征基和相似对角化

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

2019-09-19 16:00:51 934

原创 生产者与消费者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 52

原创 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 889 3

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

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

2019-08-16 10:06:01 301

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

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

2019-06-01 23:45:42 2073

原创 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 833

原创 makefile := 与 = 的区别

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

2019-04-29 10:59:23 123

转载 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 106

转载 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 842

原创 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 372

转载 git pull --rebase

转载自:https://www.jianshu.com/p/dc367c8dca8e1.git pullgit pull = git fetch + git merge FETCH_HEAD git pull --rebase = git fetch + git rebase FETCH_HEAD 2.merge 和 rebase现在我们有这样的两个分支,test和mast...

2019-04-07 21:17:59 324

转载 jlink-v8 固件修复

一、先说 jlink v8 v9 v10区别v8基本价格在40左右,芯片是atml的,但是很多反应是掉固件和提示盗版问题.v9现在主流,盗版价100左右,主控芯片stm32。做的比较成熟,很多可以自动升级固件。有些会在电路上有阉割。v10最新版本,主控芯片换nxp了,全速USB,固件segger以后推出的固件全部基于这个版本,v8,v9以后不会有新功能,盗版价280左右,可以自动升级固...

2019-04-06 02:03:48 3415 1

原创 雅可比行列式和雅可比矩阵

接触雅可比行列式是在二重积分的变量变换中,参见我的另一篇文章https://blog.csdn.net/xiaoyink/article/details/88432372下面我们来详细说明一下雅可比行列式和雅可比矩阵雅可比矩阵参考维基百科https://zh.wikipedia.org/wiki/%E9%9B%85%E5%8F%AF%E6%AF%94%E7%9F%A9%E9%98%...

2019-03-15 02:24:56 13117 9

原创 二重积分和雅可比行列式

我们以二重积分为例进行说明,首先说结论:一、结论若x = x(u, v), y = y(u, v)存在偏导数,则二阶雅可比行列式为= = dxdy = |J2| dudv, (J2的绝对值),且其中积分区域和积分区域是一一对应的。二、理解二重积分的定义中指出,将积分区域任意分割成n个小的闭区域:Δσ1, Δσ2, …, Δσn,其中Δσi表示第i个小闭合区...

2019-03-13 01:50:40 30544 3

原创 altium designer笔记

Altium Designer使用方法建立工程打开AD,会出现一个默认的工作区,WorkSpace1.DsnWrk,我们可以保存它到自己指定的位置,然后重命名,例如重命名为MyWorkSpace.DsnWrk;然后右击MyWorkSpace.DsnWrk,添加新的工程->添加PCB工程:我们也可以添加其他的工程到工作区,例如集成库,集成库是将原理图库和PCB库进行集成,可以有效地...

2019-01-12 03:30:55 4069 3

转载 旋转矩形

转载自:https://www.cnblogs.com/zhoug2020/p/7842808.html1. 简介计算机图形学中的应用非常广泛的变换是一种称为仿射变换的特殊变换,在仿射变换中的基本变换包括平移、旋转、缩放、剪切这几种。本文以及接下来的几篇文章重点介绍一下关于旋转的变换,包括二维旋转变换、三维旋转变换以及它的一些表达方式(旋转矩阵、四元数、欧拉角等)。2. 绕原点二维旋转...

2018-12-14 00:45:21 1007

原创 欧拉角和万向节死锁

一、什么是欧拉角        欧拉角就是物体绕坐标系三个坐标轴(x, y, z轴)的旋转角度,在这里坐标系可以是世界坐标系,也可以是物体坐标系,旋转顺序也是任意的,可以是xyz,xzy,yxz,zxy,yzx,zyx中的任何一种,这种绕三个轴旋转的方式称为卡尔丹式,或者xyx,yxy,xzx,zxz,zyz,yzy中的任何一种,这种绕两个轴旋转的方式称为欧拉式。        欧拉角可以...

2018-12-04 01:47:13 5199 3

转载 NGFF、M.2、PCIe、NVMe概念区分以及PCIEx1 x4 x8 x16区别

对于NGFF/M.2、PCIe、NVMe等概念的说明。解决方案:NGFF (Next Generation Form Factor) ,顾名思义,是物理外形(Form Factor)的标准。与 NGFF 并列的是 2.5",而不是 PCIe。(另外 NGFF 现在已经改名为M.2 了,大家最好与时俱进,改称为M.2。)PCIe 是总线标准,与SATA 并列。NVMe是硬盘新的传输标准,是取代...

2018-12-03 19:27:56 45623

转载 万向节死锁

转载自:https://www.cnblogs.com/soroman/archive/2008/03/24/1118996.html 关于万向节死锁(Gimbal Lock)(续) 以前发过一篇文章http://www.cnblogs.com/soroman/archive/2006/10/11/526163.html是关于万向节死锁(Gimbal Lock)的,里面翻译了...

2018-11-26 01:29:59 748

转载 Keil编程环境下STM32内存管理研究

非常简单的一个工程,没有用到任何IO操作,与STM32有关的仅仅只有芯片的选择,即其SRAM大小有区别。图1是工程示意图,从图中可以看出,除了自己编写的代码外,仅仅增加了2个文件,即system_stm32f10x.c和startup_stm32f10x_hd.s,其中为了对startup_stm32f10x_hd.s进行修改,将其从库文件夹复制到了项...

2018-11-11 15:32:17 278

转载 shell中的export

修改生效范围脚本A中export的变量在启动其他脚本的时候会复制一份传入其他脚本。其他脚本中对此变量的修改并不会在离开脚本后生效。 注意:在脚本A中定义了一个变量V赋值为1,export了变量V,在脚本A中启动脚本B,在脚本B中变量V的值就是1,如果在脚本B中修改了V的值为2,那么脚本B结束后,脚本A中的V的值依然是1。 脚本A中export的变量在启动其他脚本的时候会复制一份传...

2018-11-03 00:01:28 2550

原创 欧拉公式

本文围绕以下视频进行说明:https://www.youtube.com/watch?v=mvmuCPvRoWQhttps://www.youtube.com/watch?v=F_0yfvm0UoU一个数字同时代表三样事物1. 一条无限长数轴上的一个点2. 将数轴向自身方向活动的动作(数字x 可以看做一个加子,x是正数对应将整个数轴向右移动  个单位,x是负数对应将数轴向左...

2018-09-25 13:37:54 1705

原创 海明校验码

以最多只有一位出错为前提进行说明1.校验位的位数的确定:数据位为n位,校验位有k位,传输过程中最多只有1位出错,所以出错的情况总共n+k种,正确的情况有1种,所以校验位要能表示所有的情况即                                                           2^k >= n + k + 12.海明校验码的规则: a.如果...

2018-08-14 19:28:05 840

原创 python中的迭代器和生成器

生成器(Generator)下例中generator_tri的名称叫做生成器(Generator),是一种特殊的 Iterator对象,注意生成器一定是迭代器,迭代器不一定是生成器, 生成器获取方式:a.Generator函数返回b.生成器表达式Generator函数返回,以杨辉三角为例:from collections import Iteratorfrom collections impor...

2018-07-06 16:34:49 100

转载 完全理解Python迭代对象、迭代器、生成器

转载自:https://foofish.net/iterators-vs-generators.html本文源自RQ作者的一篇博文,原文是Iterables vs. Iterators vs. Generators,俺写的这篇文章是按照自己的理解做的参考翻译,算不上是原文的中译版本,推荐阅读原文,谢谢网友指正。在了解Python的数据结构时,容器(container)、可迭代对象(iterable...

2018-07-06 15:40:06 94

原创 C++ 中异常处理 层次结构 内存

异常的使用准则先以window的处理方式做以下介绍:调用throw()时不要抛出异常对象(这里假设为e)的指针,因为等到catch代码块执行时e所对应的内存已被销毁,正确使用方式时,throw一个e对象本身,而不是其指针,实际上,throw()前,会在当前函数 之外的 接下来的 栈空间 上调用e的copy构造函数,重新实例化另一个e,因为throw()函数调用后,catch代码块调用之前,会将ca...

2018-07-04 23:11:57 227

原创 Python中的变量 内存模型

引用语义python中的变量采用引用语义,每一个变量名其实存储的是实际存放数据的内存的地址,如下图: 另外,在python中对变量名的访问(例如x=10),可以理解为通过只读的指针(地址)访问存放数据的内存空间,我们通过变量中存放的地址访问内存只能读,不能写,写的话将导致重新分配一块内存空间,存放新数据,并将变量中存放的原有的地址替换成新地址。下面我们分析一段代码:x = 15y = 15s...

2018-07-04 14:44:30 2798

原创 字符编码的一点见解

UTF-8 类型为可变长类型,但是UTF-8和unicode转换无需查表,他们的有用信息部分是完全一致的,转换规则如下:UTF-80000 – 007F0xxxxxxx0080 – 07FF110xxxxx 10xxxxxx0800 – FFFF1110xxxx 10xxxxxx 10xxxxxx可见它是根据数值的大小来做长度区分的:1.小于7F(127)的数,7bit即可存储,一字节的最高bit...

2018-06-29 01:20:10 148

原创 python中的编码方式

说明这里我们以python2.7为例讲解python的编码方式指定执行编码方式python2.7的默认编码方式为ascii字符集,这里所说的编码方式指执行编码方式,在编程过程中,有三个地方都涉及到编码方式:分别是源码编码方式(.py文件的字符集),执行编码方式,运行环境编码方式,这里不详细赘述:详见https://blog.csdn.net/xiaoyink/article/details/807...

2018-06-29 00:24:07 7363

转载 编码 字符集 简介

编码一直是让新手头疼的问题,特别是 GBK、GB2312、UTF-8 这三个比较常见的网页编码的区别,更是让许多新手晕头转向,怎么解释也解释不清楚。但是编码又是那么重要,特别在网页这一块。如果你打出来的不是乱码,而网页中出现了乱码,绝大部分原因就出在了编码上了。此外除了乱码之外,还会出现一些其他问题(例如:IE6 的 CSS 加载问题)等等。我写本文的目的,就是要彻底解释清楚这个编码问题!如果你遇...

2018-06-28 21:17:13 131

原创 CUDA中的GPU编程模型

一、相关名词硬件相关:SP(Streaming Processor,流处理器):最基本的处理单元(等价于一个ALU),又叫做CUDA CoreSM(Streaming Multiprocessor,流多处理器):又叫GPU Core,是多个SP和其他一些硬件资源组成的,下面以GTX 580为例讲述SM一个GTX 580 的SM包含32个SP(CUDA core),2个取址译码单元(Fetch/De...

2018-06-27 21:12:51 300

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