单片机及arm
hello&Code
贵有恒何必三更起五更睡;最无益,只怕一日曝十日寒
展开
-
树莓派4b安装wringPi
当使用树莓派时输入gpio readall命令查看引脚状态时,系统提示:出现这个问题的原因在于,系统当前的wiringpi版本不支持树莓派4B,但是这个问题不会影响我们编程使用树莓派的所有引脚的功能。解决这个问题的步骤:进入树莓派系统,首先需要确保树莓派可以正常上网。我们可以输入一下命令来判断树莓派是否可以正常上网。ping www.baidu.com如上图所示,能正常ping通就表示树莓派可以正常上网,我们就可以进行以下步骤了。输入如下命令安装Git.s...原创 2020-05-14 21:52:04 · 1202 阅读 · 1 评论 -
x86平台,函数调用时参数传递是使用堆栈来实现的
#include<stdio.h>struct person{ char *name; int age; int score; int id;};int fun(const char *format,...){ char *p; int i; struct person per; p=(char *) ...原创 2018-09-20 16:33:40 · 2103 阅读 · 0 评论 -
欧姆龙增量式旋转编码器
RPM即转每分,表征设备每分钟的旋转次数。//电机每分钟转多少圈p/R:表示一圈多少个脉冲增量式编码器是将位移转换成周期性的电信号,再把这个电信号转变成计数脉冲,用脉冲的个数表示位移的大小它是一种将旋转位移转换成一串数字脉冲信号的旋转式传感器,这些脉冲能用来控制角位移双路输出的旋转编码器输出两组A/B相位差90度的脉冲,通过这两组脉冲不仅可以测量转速,还可以判断旋转的方向。A.B两相联接...原创 2018-08-27 14:53:40 · 6864 阅读 · 6 评论 -
TB6612FNG电机驱动使用说明
TB6612是双驱动,也就是可以驱动两个电机下面分别是控制两个电机的IO口STBY口接单片机的IO口清零电机全部停止,置1通过AIN1 AIN2,BIN1,BIN2 来控制正反转VM 接12V以内电源VCC 接5V电源GND 接电源负极驱动1路PWMA 接单片机的PWM口 真值表:AIN1 0 0 1AIN2 0 1 ...原创 2018-08-27 14:52:40 · 36845 阅读 · 7 评论 -
stm32单片机学习笔记
一些重要的知识:0x0d(回车符\r) 0xoa(换行符\n)stm32f4xx.h:包含了stm32f4的寄存器结构体的定义(类似于c51的reg52.h)f4顶层头文件 main必须要加这个顶层文件 可以加“sys.h”因为它里面包含stm32f4xx.h头文件sys.h:位带操作的头文件#include"sys.h"//读取io口的状态频率,是单位时间内完成周期性变化的次数...原创 2018-08-27 14:50:30 · 3518 阅读 · 0 评论 -
结构体的一种用法以及强制转换(arm的点灯(控制某一位))
struct GPIOF{ int d : 4; int a : 1; int b : 1; int c : 1; int res : 25;};/*struct GPIOF_1{ int d : 8; int a : 2; int b : 2; int c : 2; int res : 18;};*\//这个结构体就是4个字节(int)分为3...原创 2018-08-25 00:24:49 · 329 阅读 · 0 评论 -
树莓派通过ip访问数据库,把温湿度上传
dht11的树莓派的驱动:https://blog.csdn.net/u010900754/article/details/53078615?locationNum=13&fps=1注意要把counter > 16改为counter>32树莓派连接mysql,并插入数据https://blog.csdn.net/qq_28877125/article/detai...原创 2018-12-10 00:27:30 · 2217 阅读 · 0 评论 -
Read ID Operation(nand flash)----时序图分析------(芯片id的读取)
上面有一个横线的,表示低电平有效,在这个CLE为高电平为有效的时候,此时片选CE和WE的信号为低为有效,所以此时在写也就是发送0x90(Read ID Comand)这个读命令。这是发送读命令时各地址线上电平的变化,而你只需要写相应的寄存器,然后硬件自己完成对应的跳变。如这个就是NFCCMD=0x90nand flash 读取数据每一次最多只能读取一页的数据,如果需要多页读取需要反复读取。...原创 2018-12-10 16:28:48 · 3594 阅读 · 0 评论 -
arm里面的链接地址和烧写地址
在考虑为什么要重定位的问题之前,我们首先要明白一下几点:1. 链接地址的定义:我自己理解是,程序被定义的开始执行的内存地址在ARM设计中,一般会涉及都一个链接地址,这个链接地址和烧写地址很容易混淆,会认为链接地址就是烧写地址,这个是错的,下面说的是个人的一些认识,可能会有一些错误,说的也可能不专业,但是对于初学者,可以帮助理解。 首先链接地址和烧写地址是两个范畴的东西,几乎是没有关...转载 2018-12-18 17:15:43 · 1153 阅读 · 2 评论 -
U-boot分析和使用
pc和嵌入式上电启动过程:bootloader最终目的是启动引导内核。原创 2019-01-21 21:48:17 · 192 阅读 · 0 评论 -
韦东山学习笔记
1:地址空间的分配2:开发板上一般都用SDRAM做内存,flash(nor、nand)来当做ROM。其中nand flash没有地址线,一次至少要读一页(512B).其他两个有地址线3:nandflash不用来运行代码,只用来存储代码,NORflash,SDRAM可以直接运行代码)4:s3c2440总共有8个内存banks6个内存bank可以当作ROM或者SRAM来使用留下的2个ba...原创 2019-04-10 15:16:05 · 1522 阅读 · 0 评论 -
异步同步-----及大小端(MSB,及LSB)
异步通信(UART)指两个互不同步的设备通过计时机制或其他技术进行数据传输。异步通信中两个字符之间的时间间隔是不固定的,而在一个字符内各位的时间间隔是固定的。基本上,发送方可以随时传输数据,而接收方必须在信息到达时准备好接收。相反,同步传输是一个精确同步的位流,其中字符的起始是由计时机制来定位的。异步通信中,数据通常以字符或者字节为单位组成字符帧传送。字符帧由发送端逐帧发送,通过传输线被接收设备...转载 2018-10-05 14:13:34 · 2075 阅读 · 0 评论 -
总线及单片机各种线 以及数据总线宽度
总线:我们知道,一个电路总是由元器件通过电线连接而成的,在模拟电路中,连线并不成为一个问题,因为各器件间一般是串行关系,各器件之间的连线并不很多,但计算机电路却不一样,它是以微处理器为核心,各器件都要与微处理器相连,各器件之间的工作必须相互协调,所以就需要的连线就很多了,如果仍如同模拟电路一样,在各微处理器和各器件间单独连线,则线的数量将多得惊人,所以在微处理机中引入了总线的概念,各个器件共同享用...转载 2018-10-05 15:24:06 · 8213 阅读 · 0 评论 -
MMU和Cache
cpu访问这边快而SDRAM应答非常慢,怎么提高程序执行效率。程序局部性原理:时间局部性:在同一段时间里,有极大的概率访问同一地址的指令或者数据空间局部性:有极大概率访问到相邻空间的指令或者数据答:在2440中有一个指令Cache,和一个DATA指令,会把一小段程序放入指令Cacche中,把变量放入Data Cache中,这样cpu就不用访问SDRAM,直接访问Cache....原创 2018-12-15 00:16:54 · 1129 阅读 · 0 评论 -
汇编指令b 和 bl
b用于不返回的跳转,比如跳到某个标号处,b . 其中的‘.’代表当前地址,那么 b . 就是死循环。bl用于子程序跳转,要返回地址,返回地址存于LR中。当发生bl跳转前,会在寄存器 R14 (即LR)中保存当前PC-4,即bl跳转指令的下一条指令的地址。所以在返回时只要 MOV pc,lr...转载 2018-11-24 14:08:12 · 4358 阅读 · 0 评论 -
ARM 软中断指令SWI
https://blog.csdn.net/zqixiao_09/article/details/50776191转载 2018-11-16 11:37:45 · 858 阅读 · 0 评论 -
中断处理过程,中断向量,中断保护现场,中断嵌套,中断返回
中断向量:中断服务程序的入口地址中断嵌套是指中断系统正在执行一个中断服务时,有另一个优先级更高的中断提出中断请求,这时会暂时终止当前正在执行的级别较低的中断源的服务程序,去处理级别更高的中断源,待处理完毕,再返回到被中断了的中断服务程序继续执行,这个过程就是中断嵌套链接:https://www.nowcoder.com/questionTerminal/2e85847c06684c...原创 2018-11-15 21:44:48 · 12836 阅读 · 0 评论 -
ARM 内核SP,LR,PC寄存器
深入理解ARM的这三个寄存器,对编程以及操作系统的移植都有很大的裨益。1、堆栈指针r13(SP):每一种异常模式都有其自己独立的r13,它通常指向异常模式所专用的堆栈,也就是说五种异常模式、非异常模式(用户模式和系统模式),都有各自独立的堆栈,用不同的堆栈指针来索引。这样当ARM进入异常模式的时候,程序就可以把一般通用寄存器压入堆栈,返回时再出栈,保证了各种模式下程序的状态的完整性。2、连...转载 2018-11-14 20:37:15 · 1292 阅读 · 0 评论 -
代码重定位004_代码重定位与位置无关码
https://blog.csdn.net/u011663005/article/details/81042699?utm_source=blogxgwz3http://blog.sina.com.cn/s/blog_14f1cd81a0102xb9a.html全局变量和静态变量初始化的数组必须要绝对地址访问:https://www.cnblogs.com/yangguang-it/p/8...原创 2018-11-03 23:01:46 · 327 阅读 · 0 评论 -
重定位中,从加载地址一次复制4个字节到运行地址的问题
代码: ldr r1,=bss_start ldr r2,=bss_end mov r3,#0 clean: str r3,[r1] add r1,r1,#4 cmp r1,r2 ble clean 在代码中 r1=0x3000 0002;因为要4字节对齐,所以从0x3000 0000清零。故把data段也清零了。e59f1038 ...原创 2018-11-02 23:08:25 · 258 阅读 · 0 评论 -
BSS段必须清零的原因
BSS段清零的原因是因为这个段是BSS 要说为什么要有BSS的话,历史就比较久远了。 BSS段我所知道的起源是Unix最初的时候(当然,不排除可能有更早的情况)。变量分两种:局部变量、全局变量。根据C语法的规定,局部变量不设置初始值的时候,其初始值是不确定的,局部变量(不含静态局部变量)的存储位置位于栈上,具体位置不固定。全局变量(和静态局部变量)有专门数据段存储,初始值是0,具体位置...转载 2018-10-26 20:31:24 · 3087 阅读 · 3 评论 -
c++三大特性(继承,封装,多态)及重载与多态的区别。
封装可以隐藏实现细节,使得代码模块化,继承可以扩展已存在的模块,它们目的都是为了:代码重用。而多态是为了实现另一个目的:接口重用。 封装是面向对象的特征之一,是对象和类概念的主要特性。封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。一旦定义了一个...转载 2018-10-22 10:34:20 · 3547 阅读 · 2 评论 -
代码段/数据段/堆栈段
BSS段:BSS段(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域,或者全局变量初始化等于0的。 BSS是英文Block Started by Symbol的简称。BSS段属于静态内存分配。数据段:数据段(data segment)通常是指用来存放程序中已初始化的全局变量的一块内存区域。 数据段属于静态内存分配(rodata(只读数据段))。...转载 2018-10-21 20:05:19 · 4535 阅读 · 0 评论 -
nand flash和nor flash的区别
今天学完nor flash 和 nand flash 来一个小结。1.NAND Flash一般地址线和数据线共用;而NOR Flash闪存数据线和地址线分开。虽然 nand flash 没有addr线 它是data线共用数据和地址。通过引脚NFRW NFWE等引脚告诉 什么时候是做data线 什么做addr线2.nor读功能比·nand快,写和擦除一般是nand快一点,nand的容...原创 2018-12-14 17:19:34 · 17777 阅读 · 0 评论