0%

好久没有写过博客了,开通这个静态博客,给自己留一个地方,放自己想写的东西。记录生活点滴。

这个博客由hexo搭建,使用了next主题,Pisces布局。简洁的界面,比较适合我。hexo是用js编写的静态博客生成工具,可以直接使用npm安装。

配置成中文比较简单,在站点配置文件里设置language: zk-CN(不是zh-Hans)就行。

在使用STM32开发时会用到c语言的printf函数,但是printf一般是面向控制台输出的,在STM32中我们想用串口输出,就会涉及到printf函数的重定向,我们不想重写printf而是修改它底层调用的函数如fputc,在高版本的stm32cubeide中则是syscall.c中的_write函数,这个函数是__weak的,我们可以自己实现它,方法如下:

在uart.c文件中添加如下代码:

1
2
3
4
5
6
7
#include "stdio.h"

int _write(int file, char *ptr, int len)
{ //调用相应的串口发送函数实现重定向
HAL_UART_Transmit(&huart1, (uint8_t*)ptr, len, HAL_MAX_DELAY);
return len;
}

然后就可以愉快的使用printf()了,但是如果你如果打印浮点数就会报错,只需要根据报错提示把构建选项里的浮点数选项打开即可。

最近在做一款PCB加热台,可以给3D打印机用,也可以用来做贴片加热,当然,还有一个用途就是烧烤^_^。他的原理是利用金属铜的电阻效应来加热,功率P=U^2/R,其中U是PCB上铜箔两端的电压,R是铜箔的电阻值。

铜箔的电阻计算公式是R=ρL/S,其中ρ是金属铜的电阻率ρ=0.0175Ωmm^2/m(国际上,电阻率定义为横截面积为1平方毫米,长度为1米的导线的电阻),L是铜箔长度,S是横截面积。假设PCB是用1盎司的,它的厚度是35微米,布线线宽是1毫米,总长度为5米,则器电阻为0.0175x5/(1x35x10e-3)=2.5欧姆。用20V供电,其功率为20x20/2.5=160瓦。

这两天在弄一个小项目,纯js的,没用框架,所有东西都是一点点堆起来的,渲染的时候用到了模板引擎,相对于虚拟DOM,它更简单。原理上跟拼字符串差不多,但是它能实现结构和数据分离,看起来代码更清晰。

阅读全文 »

回文,是正读反读都能读通的句子。如何通过程序判断一个字符串是不是回文呢?最简单的方法就是把字符串反转,再与原字符串比较,如果相等那就是回文。但是如果再变换一下,比如html解析的时候,允许标签嵌套,但不允许标签交错,比如允许<div><p></p></div>不允许<div><p></div></p>,或者模板引擎匹配括号比如()[]{},但是不能是([)]这该如何处理呢?

阅读全文 »

esp8266在烧录固件的时候,如果先前已经烧录过其他不同固件,就有可能导致新烧写的固件无法工作,这时候就需要擦除整个flash,再从新烧录。

阅读全文 »

前几天碰到一个地方需要在js中判断一个变量是不是对象,参考了几个实现,都不一样,索性自己写一个。要判断变量类型,首先可能会想到typeof或instanceof,但是typeof只用于区分基本类型,instanceof只适合用于区分类的实例,这两个方法通过组合,也能判断出准确类型,但是太复杂,有没有简单点的方法呢?

阅读全文 »

前端开发经常会调用各种后端接口,这些操作都是异步的,有的接口还有并发限制,这时候就需要对接口调用进行管理,限制同时请求的接口数量,对于这种情况,一般都使用队列来解决并发问题。其难点在于异步流程的设计。

举一个简单的例子:我们想了解某个网站提供的一系列数据,从这些数据做辅助分析,所以需要获取大量数据,但是这个网站做了并发限制,同一时间内最多有3次请求,如果超了,就会返回错误,如果我们不处理并发,后面就会一直得到报错。

阅读全文 »

上次用js实现了一个简单的中间件,它在同步的中间件中工作的很好,但是涉及到异步操作的时候就GG了,如何实现一个支持异步的中间件呢?回想一下,我们调用中间件时使用的是map来便利数组,这个动作本来就是同步的,如果中间件中有异步,也就丢失了,我们需要把遍历改成在next函数中去获取中间件并执行就可以了。

阅读全文 »

中间件可以在调用目标函数之前插入其他函数对数据预先进行处理,是一种很常见的模式。可以像流水线一样对数据进行层层加工,最终到达目标函数。它的实现可以通过在中间件中调用next更新游标,通过游标的值来确定是否进行下一步,游标是在中间件的框架中维护的。这也是js强大的地方。

阅读全文 »