自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

cyang's blog

嵌入式入门/*到头发护理*/

原创 去除安卓5.0上的感叹号的解决方法

adb shell settings put global captive_portal_mode 0 之后飞行模式一下,就可以了。

2019-06-23 10:31:19 409

原创 Win 10 安装 NET Framework 3.5错误解决

参考百度经验 地址

2019-05-14 22:33:10 1395

原创 ssh 连接 ubuntu12.04 提示服务器拒绝了密码

一、问题使用xshell 通过 ssh 连接 vm 虚拟机下的 ubuntu12.04,提示服务器拒绝了密码。二、解决方法1、尝试修改 vim /etc/ssh/sshd_config 文件的如下内容# Authentication:LoginGraceTime 120PermitRootLogin yesStrictModes yes...# Change to no ...

2019-05-11 20:47:03 947

原创 enum枚举类型

阅读下面的程序,写出输出内容。#include <stdio.h>enum { ITEM_A = 0, ITEM_B = 0, ITEM_C};int main(int argc, char const *argv[]){ printf("%d\n", ITEM_C); return 0;}

2019-04-14 15:19:52 178

原创 修复 j-link "the connected j-link is defective" 警告

一、现象j-link ob 提示 “the connected j-link is defective” 警告,每次下载都需要点击确定关闭,另外单步调试经常死机。二、解决方法参考这篇帖子。具体就是修改 IAR 安装路径下的 JLinkARM.dll 文件。路径为:D:\Program Files (x86)\IAR Systems\Embedded Workbench 7.5\arm\...

2018-12-20 17:35:24 7825 5

原创 IAR开发STM32堆栈设置

一、前言关于堆栈的定义在此就不赘述,详细内容可以看这篇博客。堆栈溢出会导致野指针,返回地址错误等问题,通常程序已经无法正常运行,进入 HardFault 异常中断。为了避免这种情况,一般会分配较大的空间用做栈,可是如果仅仅为了安全就分配大空间的栈势必导致内存浪费。本文介绍两种获取栈最大消耗的方法,以方便合理设置栈的大小。二、方法1、方法一栈指针 SP 指向的位置可以反应出当前栈的消耗量。...

2018-10-25 22:28:12 1855

原创 汇编文件从 keil 移植到 IAR

1、修改段和区域的写法系统段和区域在 ADS 下定义为 AREA,在 IAR 下定义为 RSEG,因此需要做如下更改。keil 下的写法AREA |.text|, CODE, READONLY, ALIGN=2IAR 下的写法RSEG CODE:CODE:NOROOT(2)2、修改 RN 伪指令在 ADS 中,可以使用语句 name RN Rn 来给 寄存器 Rn...

2018-10-19 10:38:19 812

原创 ide 与 leetcode 运行结果不一样

在做 leetcode 的第 15 题, 3Sum 时发现,同样的代码在本地运行的结果是正确的,而在 leetcode 的服务器上结果却是错误的。而且检查了程序中,也并没有使用全局或者静态变量。通过打印,仔细对比两种环境下的输出发现,原来是在代码有一条语句指针指向了数组外边的第一个地址。语句是内容是比较当前地址的值是否和后一个地址的值相同, 由于后一个地址实际上已经发生了溢出,在当前地址为...

2018-09-15 15:07:15 4909

原创 j-link v9 修复记录

j-link v9主控: stm32f205RC现象1、给 M0 下载固件的过程中经常出错,提示找不到M0。需要反复尝试很多次才可以下载。2、在一次正常的拔线断电后,再也无法识别,灯也不亮了。修复方法1、准备另一个可以使用的 j-link。这里使用的就是这种只有四根线,只支持 SWD 的 j-link OB。2、拆开坏了的 j-link v9, 可以看到 PCB ...

2018-09-13 12:05:46 4900 6

原创 MPEG Audio 简述

MPEG AUDIO 简介MP3 是 MPEG Layer3 音频压缩技术的简写,这种技术可在音质极少损伤的情况下获取更好的压缩性能。MP3文件可以被压缩成不同的速率,文件压缩的越小,音质损伤越大。标准的压缩比例为10:1,一段3分钟的音频数据压缩后只需4MB大小。MPEG 音频压缩算法由联合图像专家组开发,作为高质量数字音频数据压缩的国际标准。MPEG-1 音频压缩算法基于两种机理来减少...

2018-08-12 16:16:48 1598

原创 前导零计数

前导零计数计算一个 32位 数头部 0 的个数。例如 1 前面有 31 个0, 0 则前面有 32 个0。C 语言实现int cntLeadingZeros(uint32_t i){ int ret = 0; uint32_t temp = ~i; while(temp & 0x80000000) { temp <&lt...

2018-08-02 18:03:06 2832

原创 fread 返回 0

fread 函数一直返回 0,检查过读取的数量不会超过文件大小,错误发生在打开文件时错误。错误代码如下:FILE *in_file, *out_file;unsigned int open_files(const char *in_file_name, const char *out_file_name){ if( in_file = fopen(in_file_name,...

2018-07-25 21:14:05 689

原创 记一款游戏--《程序员升职记》

最近在玩一款编程类的游戏,叫做《程序员升职记》,steam 平台只需¥36。通过组合几条非常基本的指令,例如加减、自加、自减、比较、跳转,实现一些小功能,例如简单的数值绝对值输出、两数乘法、阶乘运算、反转字符串等。游戏的本质是一款支持 11 条指令,最多支持 24 字节内存的 8 位 cpu 的运行。这款游戏前面的一些关卡主要在引导和介绍游戏,同时不断给出新的指令,开始只有简单的几条指...

2018-07-22 11:01:18 8106

原创 PCM 转 WAV

PCM 数据无法直接通过播放器打开,因为少了 44 字节的文件头,这里面最主要的信息是描述该 PCM 的采样频率,通道数,以及位数。双击 pcmToWav.exe,拖入待转换的 PCM 数据,输入通道数和采样频率,默认使用 16-bit 表示一个采样点。等待程序运行结束,就会生成一个同名的 .wav 文件。python 源码# -*- coding: utf-8 -*-# @...

2018-06-07 19:43:14 2194

原创 文件转换为C数组 fileToC

fileToC简单说明fileToC 是一款使用 python 编写的程序,可以将任意文件的二进制数据转换为 .C 文件的数组,以便程序编译。双击 fileToC.exe 程序,将要转换的 test.any 文件拖入命令行,等待程序自动转换,结束后便可以得到一个和该文件同名的 .c 文件结果如下:test.any 文件的二进制数据分析这款程序的使用场景是当我们编程时...

2018-05-18 13:25:27 1115

原创 CSDN博客数据导出

CSDN2HEXO 源码地址CSDN2HEXOCSDN2HEXO 是一款基于CSDN开放平台 的 csdn blog 内容下载器, 可以下载博客中的文章内容和图片,文章保存为 markdown 格式,图片可下载无水印图片,并根据文章标题生成文件夹存储相关数据。用法1、首先需要获得开发者认证,并创建应用,获取到 App_key 和 App_secret 以通过 OAuth2 认证,...

2018-04-28 14:46:23 2732

转载 C语言中,隐藏结构体的细节

本文转载自 博客园我们都知道,在C语言中,结构体中的字段都是可以访问的。或者说,在C++ 中,类和结构体的主要区别就是类中成员变量默认为private,而结构体中默认为public。结构体的这一个特性,导致结构体中封装的数据,实际上并没有封装,外界都可以访问结构体中的字段。C++中我们尚可用类来替代结构体,但是,C语言中是没有类的,只能用结构体,但很多时候,我们需要隐藏结构体的字段,不让外...

2018-04-18 17:49:48 362

原创 C语言 符号的不同意义

C语言的许多符号在不同的上下文环境里有不同的意义,相当于被“重载”了。如下展示了一些符号的不同意义。static在函数内部,表示该变量的值在各个调用间一直保持延续性。类似与全局变量,区别在于作用域不同。在函数外部,表示该函数或者变量只对本文件可见。extern用于函数定义,表示全局可见(属于冗余,因为函数名在默认情况下具有外部的链接属性,如果函数没有在调用它的转换单元中定义,编...

2018-03-27 22:53:22 1321 2

原创 IAR 和 keil 使用外部 SDRAM 的区别

当芯片内部的 SRAM 不够用时,就需要在外部扩展 SDRAM,然后在写程序时将一些比较大的 buffer 定义在外部内存中。在进行正确的配置之后,对外部 SDRAM 的使用,和芯片内部的 SRAM 是一样的,可以直接对 SDRAM 的地址进行读写访问。因此,最简单的方法就是,如下所示的代码,直接使用指针指到外部 SDRAM 的地址,之后对指针进行移动,便可以对全部 SDRAM 进行读写。使用...

2018-03-26 19:34:15 1556

原创 C语言 ringBuffer 实现

一、 ringBuffer 介绍ringBuffer 称作环形缓冲,也有叫 circleBuffer 的。就是取内存中一块连续的区域用作环形缓冲区的数据存储区。这块连续的存储会被反复使用,向 ringBuffer 写入数据总是从写指针的位置开始,如写到实际存储区的末尾还没有写完,则将剩余的数据从存储区的头开始写;从该 ringBuffer 读出数据也是从读指针的位置开始,如读到实际存储区的末尾...

2018-03-22 20:30:13 9267 5

原创 C语言 malloc 内存泄漏

错误代码如下:int Init_layer2_Decoder(void){ Stream = (struct mad_stream*)malloc(sizeof(struct mad_stream)); Frame = (struct mad_frame*)malloc(sizeof(struct mad_frame)); Synth = (struct mad_...

2018-03-18 20:33:29 819

原创 STM32 硬件CRC和软件CRC速度比较

一、测试条件硬件: STM32L432KC 主频: 80MHz 编译器: IAR 8.20.1 编译选项: High Speed no size constraints CRC 生成多项式: 0x782f二、测试方法软件提前生成CRC表,用于查询。分别使用软件CRC算法和硬件CRC外设对一个缓存进行计算,目的是从该缓存中找到同步头。同步头共11字节,前两个字节为后九个字节的...

2018-03-12 22:46:18 9988 3

原创 STM32 无法通过 %f 打印浮点数

一、问题使用 IAR 开发 STM32,发现无法通过 printf 重定向到串口打印出浮点数。代码如下: 输出结果如下: 可见,浮点数部分无法正常显示。二、解决方法这是由于 IAR 默认选择的 printf 库不支持浮点数的的输出。可在设置选项中修改。如下:默认使用 small,改为 auto 即可。 三、备注在不修改设置的情况下,尝试过如下两种代码解决。一种是通...

2018-03-02 14:54:06 8913 2

原创 STM32L432 CoreMark跑分测试

测试环境: IAR for ARM 7.80.4测试得分:277 官方给出的分数为:273.55 如下图:

2018-02-28 12:55:50 628

原创 STM32F469 CoreMark跑分测试

一、CoreMark 介绍CoreMark 是一项测试处理器性能的基准测试。代码使用 C 语言写出,包含:列表,数学矩阵操作和状态及 CRC 等运算法则。目前 CoreMark 已迅速成为测量与比较处理器性能的业界基准测试。CoreMark 的得分越高,意味着性能更高。二、代码移植移植 CoreMark 的测试代码到 STM32 平台非常简单。ST 官方资料文档就有移植步骤的详细说...

2018-02-27 19:52:13 2865

翻译 掌控堆栈确保系统稳定 IAR技术手册翻译

翻译自 IAR 技术手册堆和栈在嵌入式系统中是非常基础的概念。正确设置堆和栈的大小对于系统的稳定可靠非常重要。不正确设置时,系统可能会以某种非常奇怪的方式崩溃而造成灾难性的后果。堆和栈的大小必须被程序员设置。通常情况下计算栈使用量都是非常困难的,但是在小型嵌入式系统中却比较容易,并且理解栈的使用也可以解决一些很难发现的运行时错误。另一方面,给栈分配过多的空间也意味着对内存资源的浪费。对于大

2018-01-06 16:23:57 585

原创 Nexus5 安装Gapps

一、前言Nexus5的第三方ROM非常多,这些第三方ROM一般都不带有某种服务(你懂就好)。一般可通过刷入OpenGapps项目提供的插件包来实现。目前使用的魔趣ROM,刷机完成后,system分区已经被使用了93%,Nexus5的 system分区约为1G,这就导致了连体积最小的 OpenGapps pico包都无法安装。返回错误70,表示没有足够的空间安装文件。二、解决方法

2018-01-05 22:59:31 723

原创 IAR DLIB Library heap usage statistics IAR heap 分析

翻译自 IAR Technical Note 28545 《IAR DLIB Library heap usage statistics》 update 2017/9/22介绍关于堆的描述在《IAR C/C++ Development Guide for ARM》的 Dynamic memory on the heap 一章中。本技术手册仅描述在应用程序中如何统计堆的使用量。通过跟踪 malloc

2018-01-03 20:47:56 669

原创 STM32 USB无法连接电脑

一、说明在调试 STM32 USB device MSC 功能时,使用官方提供的库和示例项目,电脑可以正确识别设备,也可以正常操作。但是将 USB 部分的代码移植到自己的工程后,发现电脑无法正确识别设备,有时会在右下角显示无法识别设备。二、解决方法在main.c中添加 hal_delay() 函数的实现方式。在默认的模板工程里,一般使用如下的方式实现延迟函数。__weak uint32_t HAL

2017-12-06 22:26:10 8064

原创 树莓派内核升级的三种方式

一、前言树莓派使用的镜像比较旧了,可以通过两种方式进行升级。一种是本地下载编译升级,即Local build,还有一种采用交叉编译。本次使用第一种方式升级内核。二、升级过程1、目前的内核版本,使用 uname -a 查看 2、使用 sudo apt-get install git bc 安装必备软件3、使用 git clone --depth=1 https://github.com/raspb

2017-10-22 22:00:25 13548

原创 电脑使用模拟器玩手机游戏

一、前言我玩过的游戏并不少,坚持玩下来的只有一个养成类游戏《梦想小镇》,英文名township。虽说玩了也有好几年了,但基本上是玩一段时间就卸载,过很久又重新下载开始玩。好在这个游戏可以使用脸书账号备份,因此进度没丢。手机屏幕小,玩起来视野比较小,在电脑上鼠标玩起来也会比较爽。二、模拟器模拟器使用的是MuMu模拟器。也没用过别的模拟器,因此没有对比,不过感觉这个模拟器还是挺不错的,可以安装play

2017-10-22 21:52:40 1695

原创 STM32 定时器输入捕获实现红外遥控数据接收

之前已经写过了一个使用定时器普通计时功能来识别红外遥控数据的文章。本次是使用定时器输入捕获来实现,这种方法比起定时器普通计数来说要更加复杂一些,不过效果会更好。一、原理1、红外发射协议红外发射协议已经在之前的文章中写过,在此就不赘述。2、定时器计数和输入捕获定时器就是按照一个特定的频率对计数值进行加一或减一操作,当数值溢出时则产生一个标志或中断。定时器的输入捕获就是可以测量输入信号的脉冲宽

2017-09-11 16:47:59 7428

原创 Arduino 按键实验

一、功能实现按键控制LED亮灭。按下点亮,再次按下熄灭。二、原理图三、代码int ButtonState;int ButtonLastState;int ButtonCounter;void setup() { // put your setup code here, to run once: pinMode(13,OUTPUT); pinMode(11,INPUT_PULLUP);

2017-08-19 20:14:35 10931 1

原创 STM32 定时器实现红外遥控数据接收

一、原理1、红外发射协议红外通信的协议有很多种。这个实验使用的是NEC协议。这个协议的采用PWM的方法进行调制,利用脉冲宽度来表示0和1。NEC 遥控指令的数据格式为:同步码头、地址码、地址反码、控制码、控制反码。同步码由一个9ms的低电平和一个4.5ms的高电平组成,地址码、地址反码、控制码、控制反码均是 8 位数据格式。按照低位在前,高位在后的顺序发送。采用反码是为了增加传输的可靠性(可用于

2017-08-08 23:11:06 10700 7

原创 leetcode: power of three 三种解法

一、题目leetcode 上有这么一道题,power of three.题目如下: Given an integer, write a function to determine if it is a power of three.要求: Could you do it without using any loop / recursion?就是说给出一个数,判断该数是否是 3 的 n 次

2017-08-01 22:16:39 395

原创 STM32 BSRR BRR ODR 寄存器解析

一、用法经常会看到类似如下的宏定义语句,用于对已经初始化后的 IO 口输出高、低电平。#define SET_BL_HIGH() GPIOA->BSRR=GPIO_Pin_0 #define SET_BL_LOW() GPIOA->BRR=GPIO_Pin_0其作用类似于如下两个库函数,void GPIO_SetBits(GPIO_Typedef* GPI

2017-08-01 11:54:09 2417 3

转载 C语言变量声明加冒号的用法

原文链接:博客园 C语言变量声明加冒号的用法有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位。例如在存放一个开关量时,只有0和1 两种状态, 用一位二进位即可。为了节省存储空间,并使处理简便,C语言又提供了一种数据结构,称为“位域”或“位段”。所谓“位域”是把一个字节中的二进位划分为几 个不同的区域,并说明每个区域的位数。每个域有一个域名,允许在程序中按域名进行操作。这样就

2017-06-30 12:12:24 1044

原创 utf-8 to unicode

一、utf-8 unicode utf-161、unicode 使用两字节表示字符。2、utf-8 和 utf-16均为变长编码,使用1~4个字节来表示字符。3、utf-8 和 utf-16是不一样的,汉子使用 unicode 表示是两个字节,utf-8 是三个字节,utf-16 是两个字节。4、utf-8 只是 unicode的一种实现方式,类似的方式还有 utf-16 和 utf-32。

2017-05-17 00:06:07 541

原创 WIN10版OneDrive不能登录,显示正在同步其他账户

一、错误现象前几天通过Win10系统的推送进行了小版本的更新,更新之后需要重写登陆OneDrive,但是登陆却出现错误,提示正在同步其他账户,根据系统的指示在设置中更改账号并不能解决。 二、解决方法1、控制面板卸载OndDrive不过一般在控制面板是找不到OneDrive的,因此需要先执行安装包安装程序。安装包的路劲为C:\Windows\SysWOW64 之后便可以在控制面板卸载程序中找到On

2017-05-14 10:44:07 9317

原创 WIN10 更新系统后,串口无法连接

一、问题1、WIN10 更新系统后,无法连接 ST 开发板上 USB 转串口,但可以正常的下载程序。 二、解决方法1、尝试更改 COM 口,例如从 COM3 转为 COM4。 2、尝试更新 ST-LINK 的固件版本,如下: 之后便可正常使用了:

2017-04-26 09:41:47 8533 3

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