自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

阿鲁的嵌入式之路

记录点点滴滴的技术问题

  • 博客(61)
  • 资源 (2)
  • 收藏
  • 关注

转载 GPIO的8种工作模式详细介绍!

我们在用STM32这颗MCU的时候,用的最多的也是最基础的应该就是GPIO外设了,而在STM32的HAL库中GPIO有8种工作模式4种输入状态,4种输出状态(2种复用输出2种普通输出),分别对应如下:如图1所示,浮空输入模式#define GPIO_MODE_INPUT 0x00000000U / *!<输入浮动模式* /当GPIO采用浮空输入模式时,STM32的引脚状态是不确定的,此时STM32得到的电平状态完全取决于GPIO外部的电平状态,所以说在GPIO外部的引脚悬空时,读取

2021-05-30 11:50:21 3187

原创 汇编中调用C中的函数,函数名前加下划线“_”

之前见过这种用法,但是不太清楚为什么,就以为是约定俗成,其实也算是约定俗成,这样做的目的是为了防止符号名冲突,因为在一个程序中往往是包含汇编和C文件的,汇编用于启动部分,C文件用于应用程序,最终通过编译器实现编译,对于编译器来说,汇编和C是一视同仁的,那么就会有个问题,如果在汇编和C文件中使用了同一个名字,这是很可能出现的,毕竟汇编相当于机器码也算是稍微高级的语言,在定义子程序或函数时,也是可以用英文拼写的,而C文件中,更会习惯用英文拼写。 所以为了防止类似的符号名冲突,UNIX下的C语言就规定,...

2020-09-13 17:35:16 889

转载 startup_stm32f10x_hd.s启动文件分析

;* 文件名 : startup_stm32f10x_hd.s;* 库版本 : V3.5.0;* 说明: 此文件为STM32F10x高密度设备的MDK工具链的启动文件;* 该模块执行以下操作:;* -设置初始堆栈指针(SP);* -设置初始程序计数器(PC)为复位向量,并在执行main函数前初始化系统时钟;* -设置向量表入口为异常事件的入口地址;* -复位之后处理器为线程模式,优先级为特权级,堆栈设置为MSP主堆栈;*Sta...

2020-09-13 17:30:49 381

转载 STM32 启动文件功能简述

R8T6使用的MD.s,中容量的arm芯片,大致的启动内容如下:初始化堆栈指针 SP 初始化程序计数器指针 PC 设置堆、栈的大小 设置中断向量表的入口地址 配置外部 SRAM 作为数据存储器 调用 SystemInit() 函数配置 STM32 的系统时钟 设置 C 库的分支入口 "__main” (最终用来调用 main 函数)startup_stm32f10x_hd.s 是一个启动文件,里面是使用汇编语言写好的基本程序,当STM32 芯片上电启动的时候,受限会执行这里的汇编程序,从而

2020-09-13 10:12:07 1676

转载 STM32 GPIO外部中断总结

一、STM32中断分组:   STM32 的每一个GPIO都能配置成一个外部中断触发源,这点也是 STM32 的强大之处。STM32 通过根据引脚的序号不同将众多中断触发源分成不同的组,比如:PA0,PB0,PC0,PD0,PE0,PF0,PG0为第一组,那么依此类推,我们能得出一共有16 组,STM32 规定,每一组中同时只能有一个中断触发源工作,那么,最多工作的也就是16个外部中断。S...

2017-10-31 10:03:39 7393 4

转载 图解DIY 1pA超微电流测试器

目录00、前言01、电路图及说明02、仿真03、准备材料、元件04、元件布局05、制作输入隔离岛06、输入岛岛芯的制作07、元件安装和焊接08、反馈电容制作09、安装完成10、初步测试11、初步采集12、运放的说明13、超高阻的说明14、数据采集的说明15、用微电流源进行测试16、如何衡量一个微电流测试器的好坏17、商品微电流测试仪都是怎么做的?18、热电动势和噪音19、测试温度系数20、宇宙射线...

2017-04-21 14:13:57 8457 10

转载 QT5 中的信号与槽新的写法

基于这篇文章设计的产品可参见杭州扩维科技有限公司的网站www.kuoweitech.com了解一下Qt4中最常用的信号槽写法:connect(obj1, SIGNAL(fun1(param1, param2,...)), obj2, SLOT(fun2(param1,...)));//编译后connect(obj1, "fun1(param1, param2,...)", obj2, ...

2017-01-07 17:03:39 2268

转载 parent

比如说我在头文件里定义了一个类class PaintWidget:public QWidget{public:PaintWidget(QWidget*parent=0)}然后在cpp中写PaintWidget::PaintWidget(QWidget*parent):QWidget(parent)意思是说,重定义父对象。如何重定义呢?看parent参数。当PaintWidget放

2017-01-07 17:00:36 478

原创 uboot的链接文件分析

摘要:uboot中的子目录Makefile认知 u-boot.lds分析与联想 ld脚本加强学习详细:今天结合uboot的README帮助文件打开各各uboot的文件包,看到基本上每个文件包中都有Makefile,于是我开了一个smdk2410下的Makefile看,哇,好简单啊!打开其他目录下的Makefile,格式基本都是一致的,都很简单。并且如果我要自己添加一个.c或.S文件我也知道应该

2016-02-02 11:35:36 610

原创 Makefile中 = := ?= += 的区别

在Makefile中我们经常看到 = := ?= +=这几个赋值运算符,那么他们有什么区别呢?我们来做个简单的实验新建一个Makefile,内容为:ifdef DEFINE_VRE    VRE = “Hello World!”elseendififeq ($(OPT),define)    VRE ?= “Hello World! First!”endif

2016-02-02 11:01:02 319

转载 移植u-boot 1.1.6到TQ2440开发板-第一阶段

移植u-boot 1.1.6到TQ2440开发板-第一阶段2015-09-30 14:50:25   来源:eefocus   (本文转自电子工程世界:http://www.eeworld.com.cn/mcu/2015/0930/article_22676.html)关键字: 移植  u-boot  1  6  TQ2440 最近买了一个TQ2440开发板,奈何天嵌只给出了编译好

2016-02-02 10:17:32 1301

转载 uboot编译

本文基于u-boot-1.3.4,开发板fs2410,交叉编译工具路径/usr/local/arm/crosstool/gcc-3.4.5-glibc-2.3.6/arm-linux-gnu/bin http://blog.csdn.net/lizhiguo0532/article/details/5828176#comments  make fs2410_configma

2016-02-01 08:37:55 400

转载 指示符“include”、“-include”和“sinclude”

如果指示符“include”指定的文件不是以斜线开始(绝对路径,如/usr/src/Makefile...),而且当前目录下也不存在此文件;make将根据文件名试图在以下几个目录下查找:首先,查找使用命令行选项“-I”或者“--include-dir”指定的目录,如果找到指定的文件,则使用这个文件;否则继续依此搜索以下几个目录(如果其存在):“/usr/gnu/include”、“/usr/loc

2016-02-01 08:26:50 525

转载 专题4嵌入式文件系统制作

本文转自http://www.cnblogs.com/YanfeiHao/articles/4428692.html1.创建目录#mkdir rootfs#cd rootfs#mkdir bin dev etc lib proc sbin sys usr mnt tmp var#mkdir usr/bin usr/lib usr/sbin lib/modules2.创建设备

2016-01-28 17:37:32 384

转载 uboot使用bootm启动内核命令

本文章来自http://blog.csdn.net/yuhaibin168/article/details/8373521 uboot使用bootm命令启动内核的过程一直有点迷糊,今天找了几篇文章好好看了下,整理一下,其中参考了http://linux.chinaunix.net/techdoc/system/2007/10/17/970086.shtml这一篇文章。       1,

2016-01-28 17:04:54 1177

转载 linux 内核的加载地址和入口地址

编译完内核之后,会产生zImage,而把它直接导入0x30008000,会出现Bad Magic Number.    查明是需要将内核加一个0x40大小的头,由mkimage工具来添加.mkimage在编译u-boot时在u-boot-1.1.6/tools下生成,可以为编译的内核添加头信息的.在bootm命令中会解析这个头,获得参数.zImage在编译内核时,在arch/arm/boo

2016-01-26 15:37:33 2251

转载 bootm中的地址参数,内核加载地址以及内核入口地址

本来转自http://blog.csdn.net/liangkaiming/article/details/5986680 bootm命令只能用来引导经过mkimage构建了镜像头的内核镜像文件以及根文件镜像,对于没有用mkimage对内核进行处理的话,那直接把内核下载到连接脚本中指定的加载地址0x30008000再运行就行,内核会自解压运行(不过内核运行需要一个tag来传递参数,而这个t

2016-01-26 13:56:18 1484

转载 成功移植linux2.6.38内核到TQ2440(转)

经过一个星期的不停修改错误,看代码,每天都忙到2点才睡,今天终于解决了所有问题,成功移植linux2.6.38内核到TQ2440。移植步骤:1.修改根目录的Makefile中的ARCH=arm,CROSS-COMPILE=arm-linux-2.在arch/arm/mach-s3c2440/mach-smdk2440.c中,将163行的s3c24xx_init_clocks

2016-01-18 14:43:23 520

转载 linux2.6.30.4移植到TQ2440

http://blog.chinaunix.net/uid-28194872-id-3358090.html 修改根目录下的Makefile文件 命令:gedit Makefile大概193行和194行 修改: ARCH=arm CROSS_COMPILE=arm-linux- 原因:指明体系结构为arm,采用的交叉编译器为arm-linux-,这一步一定要改完再执

2016-01-18 08:51:43 1274

转载 u-boot的makefile和mkconfig解读

自己写的bootloader可以引导kernel了,我以为曾经神秘的u-boot代码将变得毫无挑战,然事实表明u-boot作为优秀的开源代码,阅读起来还是很有挑战的,值得一读!阅读碰到的头等问题:Makefile和shell脚本看不懂...说起来做linux也很久了,Makefile和shell脚本都接触过,但真的都是略懂而已.因为公司的Makefile和shell简单的一眼望的对穿,很初

2016-01-16 16:01:46 559

转载 uboot编译学习----直接执行make all,提示编译失败

参考博客:http://www.cnblogs.com/heaad/archive/2010/07/17/1779806.html‘ 若没有执行过“make _config”命令就直接执行“make all”命令则会出现如下的才错误信息,然后停止编译:[cpp] view plaincopyprint?System not configured 

2016-01-16 15:38:52 3634

转载 uboot编译学习----执行完make TQ2440_config后,在mkconfig 中

转载参考博客:http://www.cnblogs.com/heaad/archive/2010/07/17/1779806.html上篇博客讲到   ./mkconfig TQ2440 arm arm920t TQ2440 samsung s3c24x0  # Parameters:  Target  Architecture  CPU  Board [VENDO

2016-01-16 15:36:25 293

转载 uboot编译学习---执行make TQ2440_config后的,操作过程

转载参考博客:http://www.cnblogs.com/heaad/archive/2010/07/17/1779806.html下面分析命令“make TQ2440_config”执行过程,为了简化分析过程这里主要分析将编译目标输出到源代码目录的情况。[cpp] view plaincopyprint?TQ2440_config :      

2016-01-16 15:33:45 646

转载 UBOOT编译学习-----配置过程

转载参考博客:http://www.cnblogs.com/heaad/archive/2010/07/17/1779806.htmlU-Boot开头有一些跟主机软硬件环境相关的代码,在每次执行make命令时这些代码都被执行一次。(1)定义主机系统架构:[cpp] view plaincopyprint?HOSTARCH := $(she

2016-01-16 15:32:04 310

转载 uboot编译学习---编译命令

编译命令 对于TQ2440开发板,编译U-Boot需要执行如下的命令:[csharp] view plaincopyprint?$  make  TQ2440_config  $  make  all  $ make TQ2440_config$ make all使用上面的命令编译U-Boot,编译生成的所有文件都保存在源代码目录

2016-01-16 15:29:43 493

转载 u-boot编译学习--uboot编译链接过程

参考博客:http://blog.chinaunix.net/uid-18921523-id-165078.html基于这篇文章设计的产品可参见杭州扩维科技有限公司的网站www.kuoweitech.comU-BOOT是一个LINUX下的工程,在编译之前必须已经安装对应体系结构的交叉编译环境,这里只针对ARM,编译器系列软件为arm-linux-*。 U-BOOT的下载地址: ...

2016-01-16 11:12:16 3331

转载 1.1 U-Boot工作过程

http://blog.csdn.net/dashon2011/article/details/14450065 U-Boot启动内核的过程可以分为两个阶段,两个阶段的功能如下:       (1)第一阶段的功能Ø  硬件设备初始化Ø  加载U-Boot第二阶段代码到RAM空间Ø  设置好栈Ø  跳转到第二阶段代码入口       (2)第二阶段的功能Ø  初始

2016-01-13 14:46:49 364

原创 LDR指令和LDR伪指令的区别

ARM指令集中,LDR通常都是作加载指令,但是它也可以作伪指令。初学者一般不会注意到它们的区别,其实在嵌入式开发过程中,这两条指令时非常常用的!我们应该了解他们的区别。LDR伪指令的形式是“LDR Rn,=expr”。作用是装在一个32bit常数和一个地址到寄存器。下面举一个例子来说明它的用法。COUNT EQU       0x56000054LDR       R1

2015-11-28 22:24:08 1187

转载 stm32概述

这篇是在网上看见的,讲的比较好http://www.52solution.com/bbs/redirect.php?tid=1395&goto=lastpost如果需要转载的请注明出处!   首先,在学习Cortex-M3时,我们必须要知道必要的缩略语。整理如下:AMBA:先进单片机总线架构   ADK:AMBA设计套件AHB:先进高性能总线    AHB-AP:AHB

2015-11-21 16:19:29 1411

转载 STM32移植ucos问题

http://www.stmcu.org/module/forum/thread-384142-1-1.html  移植详解1和2中主要讲了移植需要用到的基础知识,本文则对具体的移植过程进行介绍。    首先从micrium网站上下载官方移植版本(编译器使用ARM/Keil的,V2.86版本,V2.85有问题)。    下载地址:http://micrium.com/page/

2015-11-21 15:28:01 740

转载 ARm汇编 bx lr

http://blog.csdn.net/njuitjf/article/details/8558963 bx lr的作用等同于mov  pc,lr即跳转到lr中存放的地址处。那么lr存放的是什么地址呢?lr就是连接寄存器(Link Register, LR),在ARM体系结构中LR的特殊用途有两种:一是用来保存子程序返回地址;二是当异常发生时,LR中保存的值等于异常发

2015-11-13 17:28:13 1095

原创 static的作用

在C语言中,static的字面意思很容易把我们导入歧途,其实它的作用有三条。(1)先来介绍它的第一条也是最重要的一条:隐藏。当我们同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性。为理解这句话,我举例来说明。我们要同时编译两个源文件,一个是a.c,另一个是main.c。下面是a.c的内容char a = 'A'; // global variable

2015-11-11 14:52:35 1913

原创 arm汇编指令

7.         多寄存器语句传输指令,LDM,STM类似于一次传一个BUFFER到寄存器当中,或反过来.后面一般要接一个地址改变方法n         LDM 从BUFFER传数据多个寄存器传输数据到LDMIA R0! ,{R3-R9} ;加R0指向的地址上连续空间的数据,保存到R3-R9当中,!表示R0值更新,IA后缀表示按WORD递增LDMFD SP!,{R0-R7,PC

2015-11-11 14:34:40 944

原创 6. 比较指令 CMP

6.         比较指令 CMPn         CMP比较两个操作数,并把结果存入CPSR供下一句语句使用CMP R0,R1; 比较R0,R1

2015-11-11 14:28:40 1315

原创 5. 位操作指令 AND,ORR, TST,BIC

5.         位操作指令 AND,ORR, TST,BICn         AND位与指令AND R0,R1,R2; R0=R1 & R2AND R0,R1,#0xFF ;R0=R1 & 0xFFn         ORR位或指令ORR R0,R1,R2; R0=R1 | R2ORR R0,R1,#0xFF ;R0=R1 | 0xFFn         TST

2015-11-11 14:27:46 2584

原创 4. 算术运算指令,ADD/ADC,SUB/SBC ,MUL

4.         算术运算指令,ADD/ADC,SUB/SBC ,MULn         ADD加法指令ADD R0,R1,R2; R0=R1+R2ADD R0,R1,#3 ;R0=R1+3n         ADC带进位加法指令,即除了加两个数以外,还要把CPSR的C值也要带进来u              通常用于大数(超过32Bit整数)相加,这时单用ADD不能处理

2015-11-11 14:25:49 3600

原创 3. 加载/存储指令,LDR,STR

3.         加载/存储指令,LDR,STRn  LDR,STR是用于寄存器和外部存储器交换数据指令,注意与MOV的区别,后面只在寄存器或常数交换.u              LDR/STR可以采用多种寻址方式,以下只举出使用频率最高几种用法n  LDR(load)用于把一个32Bit的WORD数据从外部存储空间装入到寄存器中LDR R0,[R1]; R1的值当成地址,再

2015-11-11 14:23:40 721

原创 传输数据指令MOV,MVN

2.         传输数据指令MOV,MVNn  MOV(MOVE)指令可完成从另一个寄存器、被移位的寄存器或将一个立即数加载到目的寄存器MOV R0,R1 ; 把R1的值传到R0MOV R3,#3 ;把常数3传给R3,MOV中用#表示常数,这个值不能超过n  MVN( MOVE Negative)取反后再传值,比MOV多了一步取反MVN R0, #0 ;把0取反(即-1)

2015-11-11 14:20:04 1980

原创 B与BL的区别

B常用于不返回的跳转,比如跳到某个标号处,BL则用于子程序跳转(要返回,返回地地存于LR)B. (注意B后面的“.”)这个“.”是指定当前的地址,如果使用 B.这条指令,其实就是死循环。

2015-11-11 14:16:01 4530

原创 评《嵌入式系统设计师教程》

最近购入了《嵌入式系统设计师教程》,是官方指定教材,而且没有第二种选择。整本书分为6章,第1章cc嵌入式系统基础知识 \第2章cc嵌入式微处理器与接口知识\3.1cc嵌入式软件基础\第4章cc嵌入式软件程序设计\第5章cc嵌入式系统开发与维护知识\第6章cc嵌入式系统设计,对正本书的感觉就是深度不够,结构不好,完全是一本比较详细的考纲解析, 这本书的前言部分说是“鉴于应试人员都有一定基础,所以对一...

2015-10-30 13:39:07 3926

Source_Insight教程及技巧

这份资料来自网络,详细介绍了Source_Insight的用法。

2012-06-10

C8051单片机定时器定时值的算法

以C80518020单片机为例子,介绍了单片机定时器初始值的算法,可以帮助处学这!

2012-06-10

空空如也

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

TA关注的人

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