adb shell settings put global captive_portal_mode 0
之后飞行模式一下,就可以了。
原文链接:本人CSDN博客
adb shell settings put global captive_portal_mode 0
之后飞行模式一下,就可以了。
原文链接:本人CSDN博客
关于堆栈的定义在此就不赘述,详细内容可以看这篇博客。
堆栈溢出会导致野指针,返回地址错误等问题,通常程序已经无法正常运行,进入 HardFault 异常中断。为了避免这种情况,一般会分配较大的空间用做栈,可是如果仅仅为了安全就分配大空间的栈势必导致内存浪费。本文介绍两种获取栈最大消耗的方法,以方便合理设置栈的大小。
栈指针 SP 指向的位置可以反应出当前栈的消耗量。在 STM32 中,栈是向下生长的,如果我们定期的获取栈指针 SP 的值,比较后得到一个最小值,就代表了栈的最大消耗量。而如何才能定期去获取栈指针 SP 的值呢?可以使用定时器产生一个周期性的中断,在中段函数中获取栈指针 SP 的值。最简单的方法就是在系统滴答定时器(SysTick)的中断函数中调用栈分析函数。具体可以参看如下的函数。在程序运行结束后,再去获取最大栈消耗量。
1 | static uint32_t max_stack_usage = 0xffffffff; |
汇编文件移植性比较差,不同的内核架构支持的指令集都不一样,就算是相同的内核,在不同的 IDE 下的写法也有可能不一样。同样的文件在 KEIL 下可以正常运行,在 IAR 下就无法编译通过,这就是因为 KEIL 和 IAR 对汇编文件的写法要求是不一样的。KEIL 以及 ADS 下的一些伪指令和写法,在 IAR 下是不支持或者不一样的。具体可以参考 《EWARM_ADSMigrationGuide.ENU.pdf》,下文只是我自己在移植过程中的一些修改记录。
在做 leetcode 的第 15 题, 3Sum
时发现,同样的代码在本地运行的结果是正确的,而在 leetcode 的服务器上结果却是错误的。而且检查了程序中,也并没有使用全局或者静态变量。
通过打印,仔细对比两种环境下的输出发现,原来是代码有一条语句指针指向了数组外边的第一个地址。语句的内容是比较当前地址的值是否和后一个地址的值相同, 由于后一个地址实际上已经发生了溢出,在当前地址为数组最后一个元素时,下一个地址就在数组外边了,这个地址的值是不确定的。在本地调试时,由于两个地址的值不同,所以程序结果正确,而在 leetcode 服务器上运行时,这两个值相同,因此程序最终的结果就错误了。
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。