自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(45)
  • 收藏
  • 关注

原创 设置好uboot网络地址后,ping主机时,uboot重启

一、问题1、按着教程配置好uboot的网络后,ping主机IP时,uboot重启。setenv ipaddr 192.168.0.50setenv ethaddr 00:04:9f:04:d2:35setenv gatewayip 192.168.0.1setenv netmask 255.255.255.0setenv serverip 192.168.0.66saveenv2、配置好后利用printenv查看环境变量也没有问题。3、ping虚拟主机的ip地址 ping

2021-03-20 16:14:12 2176 6

原创 浅析STM32生成的axf、hex、bin文件

一、前言我们在STM32的开发过程中,使用MDK编译后会生成axf、hex、bin文件,这三个文件都可以烧录到板子上去,但这三个文件具体有什么差异呢?二、文件的差异1、axf文件:编译中默认生成的文件,不仅包含代码数据还包含调试信息,我们用MDK进行debug时用的就是该文件;2、hex文件:使用十六进制符号表示的代码记录, 记录了代码应该存储到FLASH 的哪个地址,下载器可以根据这些信息辅助下载;3、bin文件:最直接的代码映像,依据axf文件生成;以上三种文件其中axf文件最大

2020-12-03 11:56:47 4562

原创 CC2640R2F之NOTIFY内存泄漏

一、背景客户希望通过notify方式上报状态,以此调了下notify,调完后功能是实现了,但是对蓝牙的通知函数有点疑问。static bStatus_t gattServApp_SendNotiInd( uint16 connHandle, uint8 cccValue, uint8 authenticated, gattAttribute_t *pAttr, ...

2020-11-30 17:35:14 468

转载 通俗讲解LORA中的跳频和扩频

转至:https://www.eemaker.com/lora-kuopintiaopin.htmllora是一种实现远距离低功耗的无线调制技术。实际测试,在深圳这种高楼林立的地方不加PA也可以达到上千米的传输距离。如果放在空旷没有什么障碍物的地方达到3-5km也是不成问题。那么lora相比于传统的无线调制之所有可以传输更远的距离,归功于lora使用了扩频、跳频、向前纠错等等关键特性。而关于跳频和扩频很多人把他放在一起来说,让初接触者不免产生疑问,扩频和跳频到底有什么关系,为什么这两个特性可以提高传

2020-10-09 18:40:49 2300

原创 三、QT之debug日志信息保存

一、前言有时候我们查看QT运行后的日志信息以便于我们查找上位机运行状态中的问题与记录。二、实现方法

2020-08-07 14:25:24 612 1

原创 二、QT之QLabel超级链接实现方法

QT中可以通过两种方法给一个QLabel对象添加链接方法一: ui->label->setText(tr("<a href = 'https://blog.csdn.net/welbell_uplooking'>XX的博客</a>")); ui->label->setOpenExternalLinks( true ); 不需要添加信号与槽方法二: ui->label->setText(tr("<a hr...

2020-07-29 12:04:01 1208

原创 一、QT之串口通讯

一、前言最近用QT制作一个界面,需要实现一个简单的串口通讯,网上也有很多这方面的资料,这里就总结下。二、过程1、实现一个简单的UI界面2、在项目文件管理中(.pro)中添加 serialport模块QT += serialport3、添加相应的头文件,并定义变量QSerialPort my_serialPort;4、在构造函数中实现查找并能使用的串口号这里用了一个关键字foreach,它能查找容器中可用的串口端口号。5、打开串口6、

2020-06-10 11:22:13 712

转载 IAR如何生成库和使用库

https://blog.csdn.net/duping2016/article/details/75096217

2020-05-21 17:50:28 533

转载 modbus系列文章—汇总

https://blog.csdn.net/liming0931/article/details/103004877

2020-04-15 16:46:15 125

原创 探索STM32地址与偏移

疑问:一直对STM32地址存储有点疑问,比如STM32是一个32位的MCU,那是不是表示一个地址可以存储32位,这样理解看起来好像是没有问题,但是实际你查看手册,你会发现按着这个理解方式,似乎有点不对。这里我们以stm32F103x系列为例,首先我们来看手册。通过GPIO端的地址,我们可以发现相邻两个寄存器之间偏移0x04,而且一个寄存器存储32位,如果真是一个地址存储32位话,那偏移应该...

2020-04-15 11:26:59 5547 10

转载 七、读写锁

01. 读写锁概述当有一个线程已经持有互斥锁时,互斥锁将所有试图进入临界区的线程都阻塞住。但是考虑一种情形,当前持有互斥锁的线程只是要读访问共享资源,而同时有其它几个线程也想读取这个共享资源,但是由于互斥锁的排它性,所有其它线程都无法获取锁,也就无法读访问共享资源了,但是实际上多个线程同时读访问共享资源并不会导致问题。在对数据的读写操作中,更多的是读操作,写操作较少,例如对数据库数据的读写应...

2019-12-19 18:10:26 437

转载 六、互斥锁

01. 互斥锁引入为什么需要互斥锁?在多任务操作系统中,同时运行的多个任务可能都需要使用同一种资源。这个过程有点类似于,公司部门里,我在使用着打印机打印东西的同时(还没有打印完),别人刚好也在此刻使用打印机打印东西,如果不做任何处理的话,打印出来的东西肯定是错乱的。下面我们用程序模拟一下这个过程,线程一需要打印“ hello ”,线程二需要打印“ world ”,不加任何处理的话,打印出...

2019-12-19 17:49:48 302

转载 五、进程间通信

01. 进程间通信概述进程是一个独立的资源分配单元,不同进程(这里所说的进程通常指的是用户进程)之间的资源是独立的,没有关联,不能在一个进程中直接访问另一个进程的资源(例如打开的文件描述符)。但是,进程不是孤立的,不同的进程需要进行信息的交互和状态的传递等,因此需要进程间通信( IPC:Inter Processes Communication )。02. 进程间通信目的进程间通信的目...

2019-12-17 19:11:47 127

转载 四、进程与线程

01. 进程和线程区别在许多经典的操作系统教科书中,总是把进程定义为程序的执行实例,它并不执行什么, 只是维护应用程序所需的各种资源,而线程则是真正的执行实体。为了让进程完成一定的工作,进程中必须至少包含一个线程。进程,直观点说,保存在硬盘上的程序运行以后,会在内存空间里形成一个独立的内存体,这个内存体有自己的地址空间,有自己的堆,上级挂靠单位是操作系统。操作系统会以进程为单位,分配系...

2019-12-16 19:02:33 95

转载 三、特殊进程之孤儿进程

01. 孤儿进程概述父进程运行结束,但子进程还在运行的子进程就称为孤儿进程(Orphan Process)。孤儿进程最终会被 init 进程(进程号为 1 )所收养,并由 init 进程对它们完成状态收集工作。孤儿进程是没有父进程的进程,为避免孤儿进程退出时无法释放所占用的资源而变为僵尸进程,进程号为 1 的 init 进程将会接受这些孤儿进程,这一过程也被称为“收养”。init 进程就好像...

2019-12-13 16:42:04 336

转载 一、Linux文件操作

01. 文件描述符在 Linux 的世界里,一切设备皆文件。我们可以使用系统调用中 I/O 的函数(I:input,输入;O:output,输出),对文件进行相应的操作( open()、close()、write() 、read() 等)。打开现存文件或新建文件时,系统(内核)会返回一个文件描述符,文件描述符用来指定已打开的文件。这个文件描述符相当于这个已打开文件的标号,文件描述符是非负整...

2019-12-13 16:35:39 192

转载 二、大端模式和小端模式

01. 概述大端模式(Big-endian):高位字节排放在内存的低地址端,低位字节排放在内存的高地址端,即正序排列,高尾端;小端模式(Little-endian):低位字节排放在内存的低地址端,高位字节排放在内存的高地址端,即逆序排列,低尾端;例(无论是小端模式还是大端模式。每个字节内部都是按顺序排列):大端模式:低地址 -----------------> 高地址0x...

2019-12-13 16:30:23 1624

原创 基于CC2640R2F的PWM开发

前言:将CC2640R2F中一个管脚设置成PWM模式,然后接一个有源蜂鸣器,这样能产生滴滴的声音,通过改变PWM的占空比或者频率能产生不同的滴滴声。接下来看我们如何实现。初始化:我们用的是DIO5作为PWM脚void HwPWMInit(void){ PWM_init(); PWM_Params_init(&PWMparams); //Buzzer PWMpara...

2019-12-04 17:41:55 675

原创 如何使用JLINK工具下载STM32单片机固件程序

https://www.cnblogs.com/zhaoyanan/p/7838363.html

2019-07-31 17:19:24 1777

原创 三、基于CC2640R2F的电池电压检测开发

我们一般电池电压检测都是通过IO口的AD转换来采集电压。但是由于项目的IO口资源比较少,刚好2640内部具有检测电池电压的功能,所以,我们打算用内部的电路来检测电压,具体实现如下。一、包含相应的头文件#include <driverlib/aon_batmon.h>二、使能电池检测AONBatMonEnable();三、开始电池电压检测AONBatMonBatt...

2019-07-02 17:27:55 1299

原创 二、基于CC2640R2F的LED灯开发

实现功能今天我们来简单介绍下CC2640R2F基于GPIO口的开发,我们先实现点亮一个LED灯。从原理图可以看出,我们只需给DIO4一个高电平,LED就亮了。实现步骤#define CC2640R2DK_5XD_KEY_DOWN IOID_4 /* P1.12 */#define Board_RLED ...

2019-06-19 11:41:56 791 7

转载 中断上下文

一、中断下半部-工作队列1、中断 先看一下宋宝华先生的《linux设备驱动开发详解》里面对中断的描述吧。这本书个人感觉 写的比较好,从开始学驱动到现在,还能从中得到不少知识。 设备的中断会打断内核中进程的正常调度和运行,系统对更高吞吐率的追求势必要求中断服务程序尽可能地短小精悍。但是,这个良好的愿望往往与现实并不吻合。在大多数真实...

2019-06-18 15:09:34 125

原创 一、基于CC2640R2F的按键开发

背景今年上半年一直在负责基于CC2640R2F挂锁项目的开发,项目目前基本完成,分享下2640各个外设的开发。实现功能短按进入NB模式,长按3s左右进入BLE模式,长按5s关机。实现步骤首先按键作为一个输入设备,我们应该把IO口设置成输入上拉模式,其次还涉及到消抖处理,防止误触发。由于该按键需实现长短按,于是把IO口设置成双边沿触发中断,具体实现如下://配置IO位输入上拉...

2019-06-18 10:23:41 1645 1

原创 GPIO口的八种工作状态

一直对GPIO的工作状态不是很熟悉,导致在设置IO状态时,经常会设置成推挽上拉,或者推挽下拉,开漏上拉等问题,虽然看起来没有影响MCU工作,但感觉这是一种无知的表现。现在总结下GPIO口的八种工作状态,其中四种输入状态,四种输出状态。一、输入状态1、浮空输入2、上拉输入3、下拉输入4、模拟输入二、输出状态1、推挽输出2、开漏输出3、复用推挽输出4、复用开...

2019-06-06 10:55:18 8747

原创 关于CC2640R2F的OAD升级

一、概念1、什么是OAD升级通过蓝牙对MCU进行空中升级。2、什么是片外OAD升级利用蓝牙将升级包下载到外部的flash中,然后再重启MCU,MCU启动后,再去外部的flash中读取升级包,最后将拷贝到内部的flash中。3、CC2640R2F的升级方式由于CC2640R2F的rom大小有限,以致不支持利用内部flash进行升级,只支持外部flash升级。4. 工程介绍...

2019-04-11 10:50:56 1419 1

转载 STM32的时钟源

一、在STM32中,有五个时钟源,为HSI、HSE、LSI、LSE、PLL。①HSI是高速内部时钟,RC振荡器,频率为8MHz。②HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz~16MHz。③LSI是低速内部时钟,RC振荡器,频率为40kHz。④LSE是低速外部时钟,接频率为32.768kHz的石英晶体。⑤PLL为锁相环倍频输出,其时钟输入...

2018-11-14 16:24:51 9394

原创 STM32远程升级

首先要说明下,由于目前我对这部分也不是很清楚,只是了解大概,紧把我了解的一点分享出来。一 原理:设备需要进行远程更新升级时,需要在设计固件程序时编写两份项目代码,第一份项目程序不执行正常的功能操作,而只是通过某种通信方式接收程序或数据,执行对第二部分代码的更新,而第二份项目代码才是真正的功能代码。这两部分项目代码都同时烧录在Flash 中,当设备上电后,首先是第一份项目代码开始运行,具体操...

2018-11-07 17:33:41 16601 2

原创 基于红外遥控器的浅析

前言:家电遥控器通信距离往往要求不高,而红外的成本比其它无线设备要低的多,所以家电遥控器应用中红外使用的比较广泛。遥控器的基带通信协议很多,大概有几十种,常用的就有 ITT 协议、NEC 协议、Sharp 协议、Philips RC-5 协议、Sony SIRC 协议等。用的最多的就是 NEC 协议了。NEC协议:1、数据格式 = 引导码 + 用户码 + 用户码(或者用户码反码) + ...

2018-11-07 16:26:28 361

原创 基于温湿度传感器DHT11浅析

温湿度传感器DHT11:一 上电     DHT11 的供电电压为3-5.5V,传感器上电后,要等待1s 以越过不稳定状态,在此期间无需发送任何指令。二 数据格式     采用单总线数据格式,一次通讯时间,4ms 左右,数据分小数部分和整数部分,一次完整的数据传输为8bit 湿度整数数据+8bit 湿度小数数据+8bi 温度整数数据+8bit 温度小数数据+8bit 校验和,总共4...

2018-11-06 17:48:11 1874

原创 register_chrdev_region()、register_chrdev()、 alloc_chrdev_region()函数的区别

一、函数包含的头文件:分配设备编号,注册设备与注销设备的函数均在fs.h中申明,如下:extern int register_chrdev_region(dev_t, unsigned, const char *); //静态的申请和注册设备号 extern int  alloc_chrdev_region(dev_t, unsigned, const char *);     //动态...

2018-11-02 14:29:01 8119 4

转载 OSS--跨平台的音频接口简介

 OSS(Open Sound System)是unix平台上一个统一的音频接口。以前,每个Unix厂商都会提供一个自己专有的API,用来处理音频。这就意味着为一种Unix平台编写的音频处理应用程序,在移植到另外一种Unix平台上时,必须要重写。不仅如此,在一种平台上具备的功能,可能在另外一个平台上无法实现。但是,OSS出现以后情况就大不一样了,只要音频处理应用程序按照OSS的API来编写,那...

2018-10-29 18:26:45 1026

转载 深入OSS开发

 在讨论这些方面时,除了从使用的角度介绍以外,还结合具体的驱动实现,分析这些功能对应的内部原理,以加深读者的理解。为了在阅读文章时有一个共同的认识,本文首先简单介绍了OSS的一些基本内容。 关于OSS编程更详细的介绍,可以参考IBM DeveloperWork以前的 相关文献。1.OSS简介OSS的层次结构非常简单,应用程序通过API(定义于 &lt;soundcard.h&gt;...

2018-10-29 18:25:42 1747

转载 Linux音频编程指南

 一、数字音频音频信号是一种连续变化的模拟信号,但计算机只能处理和记录二进制的数字信号,由自然音源得到的音频信号必须经过一定的变换,成为数字音频信号之后,才能送到计算机中作进一步的处理。数字音频系统通过将声波的波型转换成一系列二进制数据,来实现对原始声音的重现,实现这一步骤的设备常被称为模/数转换器(A/D)。A/D转换器以每秒钟上万次的速率对声波进行采样,每个采样点都记录下了原始模拟...

2018-10-29 17:45:04 187

原创 linux操作命令讲解一

1、命令 nautilus    运用:以图形界面的方式打开当前目录   nautilus .2、命令 type     运用:查看命令类型    type  ls3、命令  man      运用:查看帮助文档   man  printf4、命令 pwd     运用: 打印当前的工作路径  pwd5、命令  cd        运用:进入某个目录  cd /...

2018-10-26 18:31:28 119

原创 一、文件I/O操作

前言:UNIX系统中绝大多数文件I/O会用到五个函数,分别是open、read、write、lseek、close。函数操作:1、open函数头文件:#include&lt;fcntl.h&gt;函数原型:int open(const char *path, int oflag,........)参数说明: path:一般指需要打开或者创建的文件名字          ...

2018-10-26 16:25:53 385

原创 关于C语言内存对齐,提高寻址效率问题

前言:计算机的内存都是以字节为单位来划分的,CPU一般都是通过地址总线来访问内存的,一次能处理几个字节,就命令地址总线去访问几个字节,32位的CPU一次能处理4个字节,就命令地址总线一次读取4个字节,读少了浪费主频,读多了也处理不了。64位的CPU一般读取8个字节。运用:对于程序来说,一个变量最好位于一个寻址步长的范围内,这样一次就可以读取到变量的值;如果跨步长存储,就需要读取两次,然...

2018-10-26 16:18:01 2066 1

转载 人生警示

日出要起身,早起就精神,欲達成功路,先不做懒人,懒惰终穷困,没有幸福存,等于将珠宝,抛落大海沉, 做人有计划,光芒万丈升,须知生意义,不白度光阴,一年计於今,一世在於勤,绝不交白卷,幸福要追寻,现时好机会,快点下决心,不轻看自己,刻苦功必成,从今要发奋,尽现你所能,别人虽五两,自己有半斤,世上无难事,在乎有信心,还须德行好,努力便成金,一雷天...

2018-10-15 10:55:25 250

原创 用DAC播放WAV文件

前言:目前基于智能门锁的开发,需要用到语音,但是由于如果用语音IC的话,声音内容就不方便调整更改,所以我们打算用单片机的DAC功能直接读取WAV文件,再用功放IC放大来实现智能语音。步骤一:用朗读女获取WAV文件有时候无法勾选WAV文件,可能是由于没有下载发音人语音导致的。步骤二:wav文件转PCM文件。WAV:wav是一种无损的音频文件格式,WAV符合 PIFF(Reso...

2018-09-25 11:19:05 5466 5

原创 基于BC95之AT命令的学习

前言:由于项目需要,调试一个BC95的NB模块,而BC95是基于AT命令的开发,以前从没接触过AT命令,也不知如何才能灵活的运用AT命令。通过网上的学习,慢慢的对AT命令也有所了解,最终只花了短短的时间便完成了BC95的调试。AT命令的经验之谈:1.AT命令的命名如 AT+CSQ,定义一个字符串 char *AT_CSQ = "AT+CSQ"。2.AT命令的结束标志,通过串口发送A...

2018-08-27 22:38:26 3242

原创 linux的内存管理

内存:     内存是计算机的主存储器,内存为进程开辟出进程空间,保存进程的数据,简单的说,内存就是一个数据货架,内存有最小的存储单位,大多数都是一个字节,内存用内存地址来为每隔字节的数据顺序编号。因此,内存地址说明了数据在内存中的位置。内存从0开始,每次增加1,这种线性的增加存储器被叫做线性地址,为了方便我们一般都用十六进制来表示内存。     内存的存储单元采用了随机读取存储器,所谓的...

2018-07-29 15:55:38 140

空空如也

空空如也

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

TA关注的人

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