自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

felicity_one的博客

嵌入式学习过程中遇到的种种基情与心情

  • 博客(122)
  • 资源 (1)
  • 问答 (1)
  • 收藏
  • 关注

原创 Ubuntu下adb工具的安装及常用命令

参考网上连接:https://blog.csdn.net/xiaoma_bk/article/details/80986221 adb工具的安装:在ubuntu命令行中执行指令:apt-get install android-tools-adb通过lsusb查看接入ubuntu的设备:lsusbBus 001 Device 016: ID 18d1:d002 Google In...

2018-09-19 17:11:48 20636 5

原创 git的常用指令

本篇文章主要是阅读廖雪峰老师的网站上摘抄的笔记。1、git安装:    sudo apt-get install git2、git基本配置:    git config --global user.name "Your Name"    git config --global user.email "[email protected]"3、创建版本库:    git init...

2018-09-18 13:58:16 231

原创 stm32f107使用外部16MHz晶振

项目上使用的是16MHz的外部晶振,在stm32f107板子上进行跑程序,现在遇到的问题就是在工程里,采用http://www.360doc.com/content/15/0813/16/18490038_491413356.shtml该篇文章的博客进行修改的时候,到第二步的修改SetSysClockTo72()函数中的时钟2分频的时候发现与博客中的不同的是:博客中的#ifdef ST...

2018-08-01 10:27:50 1623

原创 stm32 库函数3.5 的systick

项目上需要精确延时,因此想到了使用stm32的systick,通过《STM32固件库使用手册》的18章 Cortex系统Systick定时器的相关章节,觉得还是挺挺简单的,但是遇到一个问题,Systick库函数SysTick_CLKSourceConfig()、SysTick_SetReload()、Systick_CounterCmd()、SysTick_ITConfig()、SysTick_G...

2018-07-27 10:54:26 1844 3

原创 stm32f107定时器3使用时钟源使用外部时钟源模式2进行定时

终于成功的使用了外部时钟源来作为定时器3的时钟源了,其实操作过程并不难,但是因为自己没有经验,所以走了很多弯路,在这里写这篇博客除了为了给自己记录之外,也希望对大家有帮助。首先简单介绍一下其功能,我们都知道,stm32中的通用定时器的计数时钟有三种,内部时钟(CK_INT)、外部时钟源(包括外部时钟模式1:外部输入脚(TIx) 和外部时钟模式2:外部触发输入(ETR) 两种模式)、内部触发输入(I...

2018-07-12 16:07:41 9447 4

原创 stm32串口使用

新项目启动了,最近开始着手硬件驱动的编程,当然首先是从串口开始啦,因为串口使我们调试必不可少的模块。调试了好久,竟然没有调通,这么简单的一个串口驱动都没有调好(成功发送,无法中断),我真是大受打击,饭也吃不好,觉也吃不香。后来用示波器测串口的TX和RX才发现是板子的RX引脚出了问题,找硬件同事换了个板子,就可以了。好了,废话不多说,还是记录一下串口的编写步骤吧。串口发送:1、编写使能串口时钟、TX...

2018-07-11 11:00:03 322 1

原创 通过串口波特率计算bit时间

以波特率115200为例:115200kbit/s表示的是串口每秒钟可以传输115200kbits,那么每传输1bit所需时间:1s / 115200kbits = 1 * 10e9 / 115200 * 10e3 = 1000/115.2 = 8.6806us;这个在使用示波器抓数据的时候,对分析数据是很有帮助的,也很简单。...

2018-07-10 15:21:43 19604 4

原创 stm32f107串口乱码

最近在写串口程序的时候遇到了串口乱码的问题,后来上网查了之后才发现是晶振不匹配的原因。我使用的板子的晶振是16MHz,而系统默认是配置为8MHz,修改步骤:1:首先确认程序工程目录的文件属性为非只读的,如果是只读的那么改为非只读的,这是为了能够修改工程的系统文件;2:在1的基础上修改stm32f10x.h头文件约120行处修改HSE_VALUE的配置值:#if !defined HSE_VALU...

2018-07-10 15:18:05 1123

原创 *** Error: CreateProcess failed, Command: 'D:\Keil_v5\ARM\ARMCC\bin\fromelf.exe --bin -o .\xc_8.bin

今天在用同事的程序在自己的KEIL中编译的时候,发现该错误,后来上网查了之后发现是fromelf.exe路径不正确。该fromelf.exe的路径是在KEIL的安装路径的/keil/ARM/ARMCC/bin(KEIL525版本)中,把正确的路径写上便可。...

2018-07-10 10:52:10 14526 1

原创 KEIL烧录程序时配置Reset and run

被这个配置捉弄了两次了,每次烧好程序就直接去测试,但是发现程序并没有相应的现象,在胡乱的调试了好久,最终发现板子重启之后又可以了,真是诡异啊。后来终于发现是因为配置没有勾上Reset and cun,希望下次不要再犯这种低级错误了,浪费了很多时间呢。...

2018-07-10 10:49:09 6622 5

原创 2、openwrt烧录固件操作及无线网络开启

2、烧录固件操作及无线网络开启 说明:首先这个烧录过程首先是针对我手上现有的板子进行操作的,这个板上的硬件上有些小问题(应该是串口,若是直接接上串口将板子上电,板子貌似不能正常工作,现象是9个LED灯全亮,串口助手没有打印启动信息);其次,我们在烧录固件的时候是在板子进入uboot阶段进行烧录的,此时板子的IP是192.168.1.1;板子在uboot倒数结束后之前熄灭的5个LED灯会闪烁一下又熄...

2018-03-29 17:10:27 4564

原创 openwrt编译环境搭建

openwrt编译环境搭建 1、虚拟机安装         请参考网络上的资料进行安装。 2、ubuntu安装         请参考网络上的资料进行安装。 3、ubuntu下安装相关的编译环境(若是编译环境没有准备好,在后来的操作中会出现一些问题)         sudoapt-get install g++         sudoapt-get install libncurses5-de...

2018-03-29 17:09:19 11763

原创 NXP LPC54110试用体验3:GPIO相关寄存器介绍

首先介绍一下GPIO的相关寄存器,然后介绍一下SYSCON的相关寄存器,再介绍一下IOCON寄存器,最后点亮LED灯http://bbs.elecfans.com/jishu_1231162_1_1.html

2017-08-21 21:54:48 636

原创 NXP LPC54110试用体验2:在keil中使用J-LINK烧录环境搭建篇

在电子发烧友论坛中写了在keil中使用J-LINK烧录程序到NXP LPC54110板子上的操作步骤,参考链接:http://bbs.elecfans.com/jishu_1164309_1_1.html

2017-08-19 21:22:46 2249

原创 NXP LPC54110试用体验1:keil开发环境搭建

在中国电子发烧友社区中写了keil开发NXP LPC54110的环境搭建,参考链接:http://bbs.elecfans.com/jishu_1158327_1_1.html

2017-08-19 21:19:34 3082

原创 存储类型

2.存储类型:是指变量占用内存空间的方式,也称为存储方式。变量占据内存空间的类型分为静态和动态两种。静态:程序开始执行时分配存储空间,直到程序运行结束收回其内存;动态:程序运行过程中用到时才分配内存空间,到其作用域之外时,收回其内存。自动变量(auto)和寄存器变量(register)属于动态存储方式,外部变量(extern)和静态变量(static)属于静态存储方式。自动

2016-05-28 15:26:51 1221

原创 作用域

1.作用域:是指标识符的有效范围,变量的有效范围称为变量的作用域,所有的变量都有自己的作用域,作用域的范围由说明方式决定。VC++中作用域可以分为块作用域、文件作用域、函数原型作用域、函数作用域和类作用域。变量主要分为局部变量和全局变量。块作用域:用一对花括号括起来的一部分程序称为一个块。在块内定义说明的变量,其作用域仅限于块内,离开该块后再使用该变量是非法的。具有块作用域的变量是局部变量。

2016-05-28 15:26:13 450

原创 预处理命令

1.预处理命令:C程序的源代码中可以包括各种编译指令,这些指令称为预处理指令。虽然它们不是C语言的一部分,却扩展了C程序设计的环境。预处理命令都是以"#"开头的,ANSI标准定义的C语言预处理程序有:#define,#error,#include,#if,#else,#elif,#endif,#ifdef,#ifndef,#undef,#line,#pragma.在源程序中这些命令都放

2016-05-28 15:25:11 1000

转载 C/C++源代码到可执行程序的过程详解

C/C++源代码到可执行程序的过程详解编译,编译程序读取源程序(字符流),对之进行词法和语法的分析,将高级语言指令转换为功能等效的汇编代码,再由汇编程序转换为机器语言,并且按照操作系统对可执行文件格式的要求链接生成可执行程序。源代码-->预处理-->编译-->优化-->汇编-->链接-->可执行文件Source--(编译)--> Assembly--(汇编)-->Obj--(链接)

2016-05-23 11:20:33 1524

原创 枚举enum

21.枚举enum:在C语言中其实就是一些符号常量集。直白点说:枚举定义了一些符号,这些符号的本质就是定义int类型的常量,每个符号和一个常量绑定。这个符号就表示一个自定义的一个识别码,编译器对枚举的认知就是符号常量所绑定的那个int类型的数字。枚举符号常量和其对应的常量数字相对来说,数字不重要,符号才重要。符号对应的数字只要彼此不相同即可,没有别的要求。(这些数字是让编译器自动分配的:原则是

2016-05-22 21:39:44 669

原创 大小端模式

19.大小端模式大端模式(big endian)和小端模式(little endian)。在我们发送数据的时候,我们首先要确定是大端还是小端模式来进行的,在接收方接收的数据必须知道数据是大端还是小端模式,才能正确地读取和存储数据起来,否则就会出错。一个32位的二进制在内存中的存储时有2中分布方式:高字节对应高字节(大端模式)、高字节对应低地址(小端模式)。有些时候CPU公司用大端(

2016-05-22 21:39:06 6463 3

原创 共用体union

18.共用体union:就是对同一块内存中存储的二进制的不同理解而已。1.结构体类似一个包裹,结构体中的成员彼此是独立存在的,分布在内存的不同单元中,它们只是被打包成一个整体叫做结构体而已;结构体的变量是同时存在的;但是共用体不是这样,共用体中的各个成员其实是一体的,在这么多个成员中,同一时刻只能是其中的某一个成员存在,有时候是这个元素,有时候是另外一个元素,也可以理解为在同一个空间里,这时刻

2016-05-22 21:38:33 372

原创 container_of宏

17.container_of宏这个宏的是根据传进去的结构体中的某个成员的指针来返回该结构体的首地址,以后我们就可以通过结构体的首地址来方便访问该结构体中的任何成员了。这个宏工作的原理:先用typedef得到member元素的类型定义成一个指针,然后用这个指针减去该元素相对于整个结构体变量的偏移量(偏移量用offsetof宏得到的),减去之后得到的就是整个结构体变量的首地址了,再把这个地址

2016-05-22 19:29:30 373

原创 offsetof

16.offsetof宏#define offsetof(TYPE,MEMBER) ((int) &((TYPE *)0)-> MEMBER)上式是offsetof的定义式,其中TYPE是结构体变量类型,MEMBER是结构体中的成员,返回的是该成员的地址相对结构体首地址的偏移量。offsetof宏的原理:我们虚拟一个type类型结构体变量,然后用type.member的方式来访问哪个m

2016-05-22 19:28:44 513

原创 结构体对齐访问

14.结构体的对齐访问:用sizeof运算符求算某结构体所占空间时,并不是简单地将结构体中所有元素各自占的空间相加,这里涉及到内存字节对齐的问题。实际上访问特定类型的变量只能在特定的地址访问,这就需要各个变量在空间上按一定的规则排列,而不是简单地顺序排列,这就是内存对齐。许多实际的计算机系统对基本类型数据在内存中存放的位置有限制,它们会要求这些数据的起始地址的值是某个数K的倍数,这就是所谓

2016-05-22 19:27:48 414

原创 二维数组

34.二维数组:一维数组在内存中是连续分布的多个内存单元组成的,而二维数组在内存中也是连续分布的多个内存单元组成的,从内存的角度来看二者是没有本质区别的,只是一维数组和二维数组的管理方式不一样而已。二维数组和一维数组在内存使用效率、访问效率上是完全一样的,但是在某些情况下使用二维数组更好理解,代码更好写,更利于组织。使用二维数组并不是必须的,而是一种简化编程的方式。数组有两种访问方式:下标

2016-05-20 10:16:00 324

原创 二重指针

33.二重指针二重指针和一重指针在本质上都是指针变量,指针变量的本质都是变量。指针变量本身都占4字节内存空间。在我PC机上指针类型变量占8个字节。/**************************二重指针******************************/char **p1; //二重指针char *p2; //一重指针printf("sizeof(p

2016-05-20 10:14:57 807

原创 typedef

30.typedefC语言中的两种类型:内建类型(编译器自带类型):ADT,用户自定义类型:UDT注意:typedef关键字定义(重命名)的是类型而不是变量。类型是一个模板,可以用来定义很多该类型的变量,没有被分配内存的,而变量是占内存的。typedef char * pChar; //typedef 类型原型 新名字#define pChar char * //#define 新

2016-05-20 10:13:14 354

原创 函数指针实战

25.函数指针的实战。用函数指针指向不同的函数来实现同一个调用执行不同的结果,类似C++或Java语言等面向对象的语言的多态一样。下面是一个简单的计算机程序:/*#include typedef int (*pType)(int , int );int add(int a, int b){return (a + b);}int sub

2016-05-20 10:11:48 313

原创 C语言基础

1.int, float, double这三种类型是不兼容的。2.int, short, char这三种类型兼容。相互转换的时候可能错也可能对。如char 和int之间的转换,当数值是在char所表示的范围之内的时候就不会出错,但是若是超过了char的范围后就会出错。3.所有指针类型(int *, double *, char *,,,)的解析方式都是相同的,都是将所占的4个字节的32个二

2016-05-20 10:10:06 551

转载 VMware下Ubuntu使用NAT共享主机IP上网方式的设置参考(cp:http://blog.sina.com.cn/s/blog_9a982d8801012njl.html)

VMware下Ubuntu使用NAT共享主机IP上网方式的设置参考 (2012-04-21 16:01:01)转载▼标签: vmware ubuntu nat 上网分类: Linuxのubuntu1、主机环境:XP无线上网2、VMware版本:7.1.5 build-

2016-04-11 11:12:28 667

原创 eth0,eth0: ERROR while getting interface flags: No such device

eth0: ERROR while getting interface flags: No such device 打开ubuntu里的网络设置vi /etc/network/interfaces配置如下:综合网上的资料和自己遇到的问题整理的资料auto eth0iface eth0 inet dhcp重启网络设备:/etc/init

2016-04-10 21:30:26 6549 1

转载 UBUNTU 修改网卡名称 更改设备网卡名称 修改ENO16777736为ETH0 UBUNTU 15.10网卡名称为ENO16777736(http://www.cnphp6.com/archiv)

ubuntu linux 进入root用户,管理员模式编辑这个文件需要管理员模式在GRUB_CMD_LINUX后面增加图中所示看到这个地方了没,有提示信息的,想要改变这个文件,记得运行 update-grub使之生效执行后状态这样子的还有一个地方,我们需要添加以下编辑这个文件增加两行auto e

2016-04-10 21:18:41 1160

转载 虚拟机linux上网问题(http://blog.csdn.net/wqx521/article/details/50832698)

虚拟机linux上网问题1、VMware中虚拟机网络的三种设置第一种:桥接(bridged)第二种:NAT第三种:Host only 。该模式下仅主机可以上网,虚拟机不能上网。 2、虚拟机上网方式1:NAT方式设置步骤:第一步:在菜单栏 虚拟机 -> 设置 -> 硬件 -> 网络适配器,右侧选择NAT模式

2016-04-10 20:26:37 647

转载 STC89C52单片机串口调试(http://blog.sina.com.cn/s/blog_7cae472801015idp.html)

///////////////////////////////////////////////////////////////////////// 实现功能:从电脑上的串口调试助手向实验板发送字符串,实验板接收到字符串后      会按发送过来的字符串返回到串口调试助手上,注意在调试串口是应该     把USB旁边的跳线帽从USB一边插到DB9上 实验板型号:KBL-XYD-C52

2016-03-26 13:25:25 1690

原创 虚拟机ubuntu全屏显示设置

1.按照网上的教程安装好了VMware tools之后,如果没有自动全屏,或者是按Ctrl + Alt + Enter也没有全屏的时候,就应该设置ubuntu的分辨率,具体操作:ubuntu -> setting -> display -> resolution ->1360 * 768 ->apply ->keep this configuation.

2016-03-17 15:52:52 9476 1

转载 解决ubuntu上ifconfig没有eth0且无法上网的问题

最近在vsphere上新建虚拟机,搭载OpenStack,发现apt-get update、apt-get install和ping等命令都无法使用,很大的原因就是因为连接不了网络、上不了网。ifconfig -a, 只有一个轮回端口lo,没有我们的网卡eth0,一开始以为是vsphere(新手对于vsphere不是很熟悉)上我的虚拟机配置问题,还查看了相关的网络配置,后来才知道是

2016-03-11 12:20:44 2804

原创 程序员面试宝典第四版第五章

1.在C++中同一个程序中可以定义相同名字的变量的,但是先定义的变量如i会被后定义的变量i给覆盖,int i = 1;void main(){int i = i;}这里,main函数里面的i与main(外的i无关,而是一个未定义的值。)2.1.“==” 与 “=”“==”: 是判断左右两值是否相等,一般情况下,最好将常量作为左值,因为常量在“=”中不能不能作为左

2016-03-09 10:18:37 612

原创 4.交叉编译

4.交叉编译4.1.两种开发模式:非嵌入式开发,A机(类)编写源代码、编译得到可执行程序,发布给A机(类)运行。嵌入式开发,A机(类)编写源代码、编译得到可执行程序,发布给B机(类)运行4.2.为何使用交叉编译:嵌入式开发的CPU比较简单,本身无法搭建开发环境,有些甚至连操作系统都没有;交叉编译可以用高性能机器为低性能机器开发软件(包括裸机软件、系统级和应用级软件)。“

2016-03-08 17:16:30 338

原创 3.嵌入式系统的特点

3.嵌入式系统的特点:1.专用(即功能专一:比如空调的遥控器无法控制电视)、软硬件可裁剪(可以通过移植到其他平台使用,或者说是去掉一些功能)可配置2.低功耗(电池供电的产品对这个要求高)、高可靠性、高稳定性(与具体的产品有很大的关系,如手机、平板这些要求不高,但是在电梯、电机、飞机等产品中要求是很高的)。3.软件代码短小精悍()4.代码可固化(代码可以通过某种方式下载到嵌入式产品中

2016-03-08 16:32:05 3315

空空如也

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

TA关注的人

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