0%

在做 leetcode 的第 15 题3Sum 时发现,同样的代码在本地运行的结果是正确的,而在 leetcode 的服务器上结果却是错误的。而且检查了程序中,也并没有使用全局或者静态变量。

这里写图片描述

通过打印,仔细对比两种环境下的输出发现,原来是代码有一条语句指针指向了数组外边的第一个地址。语句的内容是比较当前地址的值是否和后一个地址的值相同, 由于后一个地址实际上已经发生了溢出,在当前地址为数组最后一个元素时,下一个地址就在数组外边了,这个地址的值是不确定的。在本地调试时,由于两个地址的值不同,所以程序结果正确,而在 leetcode 服务器上运行时,这两个值相同,因此程序最终的结果就错误了。

这里写图片描述

阅读全文 »

j-link v9

主控: stm32f205RC

现象

  • 1、给 M0 下载固件的过程中经常出错,提示找不到M0。需要反复尝试很多次才可以下载。
  • 2、在一次正常的拔线断电后,再也无法识别,灯也不亮了。

修复方法一

阅读全文 »

MPEG AUDIO 简介

MP3 是 MPEG Layer3 音频压缩技术的简写,这种技术可在音质极少损伤的情况下获取更好的压缩性能。MP3文件可以被压缩成不同的速率,文件压缩的越小,音质损伤越大。标准的压缩比例为10:1,一段3分钟的音频数据压缩后只需4MB大小。

MPEG 音频压缩算法由联合图像专家组开发,作为高质量数字音频数据压缩的国际标准。MPEG-1 音频压缩算法基于两种机理来减少音频信号码率额,一是利用统计相关性,去除音频信号的冗余,二是利用人耳的心理声学现象如频率掩蔽和时间掩蔽等,去除听觉冗余。分为三个层次,分别是 layer1,layer2,layer3,每个层次针对不同的应用,但是三个层次的基本模型是相同的,每个后继的层都有更高的压缩比,但是需要更加复杂的编解码器。

更新的版本是 MPEG-2,这个版本扩展了MPEG-1的采样率标准,在 MPEG-1 的 32kHz,44.1kHz, 48kHz 的基础上,支持16kHz,22.05kHz,24kHz 采样率。并且MPEG-2还支持多通道。

有一个非官方的标准MPEG-2.5,支持更低的采样率,支持8KHz,11.025kHz 和 12KHz。

阅读全文 »

前导零计数

计算一个 32位 数头部 0 的个数。例如 1 前面有 31 个0, 0 则前面有 32 个0。

C 语言实现

1
2
3
4
5
6
7
8
9
10
11
12
13
int cntLeadingZeros(uint32_t i)
{
int ret = 0;

uint32_t temp = ~i;

while(temp & 0x80000000)
{
temp <<= 1;
ret++;
}
return ret;
}
阅读全文 »

fread 函数一直返回 0,检查过读取的数量不会超过文件大小,错误发生在打开文件时错误。

错误代码如下:

1
2
3
4
5
6
7
8
9
10
11
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, "rb") == NULL) //err
return 0;

if( out_file = fopen(out_file_name, "wb") == NULL) //err
return 0;

return 1;
}
阅读全文 »

这里写图片描述

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

阅读全文 »

PCM 数据无法直接通过播放器打开,因为少了 44 字节的文件头,这里面最主要的信息是描述该 PCM 的采样频率,通道数,以及位数。

双击 pcmToWav.exe,拖入待转换的 PCM 数据,输入通道数和采样频率,默认使用 16-bit 表示一个采样点。等待程序运行结束,就会生成一个同名的 .wav 文件。

这里写图片描述

python 源码

阅读全文 »

fileToC

github项目地址

简单说明

fileToC 是一款使用 python 编写的程序,可以将任意文件的二进制数据转换为 .C 文件的数组,以便程序编译。

双击 fileToC.exe 程序,将要转换的 test.any 文件拖入命令行,等待程序自动转换,结束后便可以得到一个和该文件同名的 .c 文件

阅读全文 »

本文转载自 博客园

我们都知道,在C语言中,结构体中的字段都是可以访问的。或者说,在C++ 中,类和结构体的主要区别就是类中成员变量默认为private,而结构体中默认为public。结构体的这一个特性,导致结构体中封装的数据,实际上并没有封装,外界都可以访问结构体中的字段。

C++中我们尚可用类来替代结构体,但是,C语言中是没有类的,只能用结构体,但很多时候,我们需要隐藏结构体的字段,不让外界直接访问,而是通过我们写的函数进行间接访问,这样就提高了程序的封装性。

阅读全文 »