STM32F103各型号对比

STM32F 系列属于中低端的32位ARM微控制器,该系列芯片是意法半导体(ST)公司出品,其内核是Cortex-M3,STM32F103 则是其中一个子系列。

STM32F103 系列 MCU (微控制器,Microcontroller Unit) 统一采用 ARM Cortex-M3 内核,CPU 最高速度 72 MHz。该系列产品的闪存 Flash 大小由 16KB ~ 1MB 不等,支持多种控制外设、USB全速接口以及 CAN 总线接口

STM32F103 各型号含义如下

STM32F103 引脚数 Flash闪存容量 封装工艺 温度
T: 36 Pin 4: 16KB H: BGA 6: Industrial Temperature range -40℃ to -85℃
C: 48 Pin 6: 32KB T: LQFP 7: Industrial Temperature range -40℃ to -105℃
R: 64 Pin 8: 64KB H: WLCSP64
V: 100 Pin B: 128KB
Z: 144 Pin C: 256KB
D: 384KB
E: 512KB
F: 768KB
G: 1MB

例如,某 MiniSTM32F103开发板V3版本,使用 STM32F103RCT6 作为 MCU。那么我们可以判断出这款 MCU 的参数如下:48 Pin,256KB FLASH,使用 LQFP 工艺封装,工作温度在 -40℃ ~ -85℃ 之间。

更完整分类,请参考官方选型手册:

参考资料

  1. 关于 STM32 软硬件兼容性相关的知识

OpenGauss解锁Locked的账号

在开发 OpenGauss 数据库驱动时,使用同一账户重复登录的次数过多,会导致账户被锁定。

这时候,我们可以使用 gsql 命令行工具,登录另一个管理员账户给这个账号解封:

1
alter user lolimay account unlock;

参考资料

  1. openGauss1.0.0 用户被锁

把十进制表示的字节数组转换为十六进制表示

1
2
3
4
5
6
7
8
9
const arr = '150 82 45 39 181 90 66 61 68 125 221 223 184 235 226 20 52 152 174 14 132 180 221 206 15 10 219 141 96 224 148 78'

const hexBytesToIntArray = bytes => {
return bytes
.map(s => parseInt(s)) // 以 10 进制解析字符串为数字
.map(n => n.toString(16).padStart(4, '0x0')) // 将转为 16 进制表示填充前置0
}

hexBytesToIntArray(arr.split(' '))

需要注意的是,不能把 parseInt 直接作为参数传进 map 中,因为 map 的回调函数签名为 (data: any, index?: number) => any,而 parseInt 的函数签名为 (str: string, radix?: number) => number,如果直接把 parseInt 则默认会把 index 作为 radix (进制)传给 parseInt 导致解析错误。

另,上面提到 parseInt 可以接受一个可选进制 radix 参数,所以把上述方法反过来,也可以完成十六进制表示的数据转换为10进制数据,如:

1
parseInt('0xff', 16).toString(10) // 255

清空当前工作区

之前切换到其它分支时,但是碰到当前工作区有脏修改的情况一直是用的

1
git stash

来把工作区的修改保存在暂存区。其实这种做法是不太优雅的,因为我的目的是丢弃当前工作区的修改。今天特地 Google 了一下,发现了丢弃当前工作区修改的正确方式是:

1
git checkout -- .

别再用nvm了,用fnm!

nvm 做 Node 版本管理器已经有好几年时间了。nvm 说实话是真的慢,每次我开一个新 tmux session,至少都要等3秒以上才能进入会话。慢点没关系,主要功能正常就行,但是最近又出现 nvm 与 prefix 不兼容的问题。

这次打算彻底替代掉它了,Google 了一下,发现社区又造新轮子了 fnm

下载体验了下,rust 写的命令行工具就是快,切换新 session 用时不到一秒!(nvm 是用 shell script 写的,两者高下立判。)

这里贴一下安装方式:

1
curl -fsSL https://fnm.vercel.app/install | bash # 安装

接着添加下面这几行到你的 .zshrc.bashrc 中:

1
2
3
# fnm
export PATH=/Users/lolimay/.fnm:$PATH
eval "`fnm env`"

重启终端即可生效!

Cococs Creator 3.0制作点击回弹效果

给想要添加点击回弹效果的节点添加 cc.Button 组件,然后设置该组件的 Transition 值为 SCALE 即可:

消失的磁盘空间去哪了?

过了几天,磁盘空间终究还是又满了?使用了之前的清理日志的方法只能腾出几百M的空间了。

使用 du 命令查看根目录,发现根目录只占17G,整个磁盘40G,剩下的20多G去哪了呢?

1
2
3
root@lolimay:/# du -sch $(ls --color=never --all) 2> /dev/null | sort -rh
17G total
17G .

通过这篇文章发现可以通过 lsof | grep deleted 命令找到被删除的文件(在文件系统中找不到了),但是由于程序还在运行,导致这个被删除的文件仍被占用,从而占用的磁盘空间不能被释放:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
root@lolimay:/# lsof | grep deleted | awk '{for(i=1;i<=6;i++){printf "%s ", $i}; print $7/1048576 "MB" " "$8" "$9 }'
nginx 1605 root 2w REG 253,1 0.00390625MB 1454073 /www/wwwlogs/nginx_error.log
nginx 1605 root 4w REG 253,1 0.00390625MB 1454073 /www/wwwlogs/nginx_error.log
nginx 1605 root 5w REG 253,1 0.000277519MB 1861658 /www/server/nginx/off
nginx 1605 root 7w REG 253,1 0.0984421MB 1454074 /www/wwwlogs/api.lolimay.cn.log
nginx 1605 root 8w REG 253,1 0.000199318MB 1454082 /www/wwwlogs/api.lolimay.cn.error.log
nginx 1605 root 9w REG 253,1 0MB 1454083 /www/wwwlogs/csec.lolimay.cn.log
nginx 1605 root 10w REG 253,1 0MB 1454084 /www/wwwlogs/csec.lolimay.cn.error.log
nginx 1605 root 11w REG 253,1 0.00923347MB 1454085 /www/wwwlogs/devtool.lolimay.cn.log
nginx 1605 root 12w REG 253,1 0.0195312MB 1454086 /www/wwwlogs/devtool.lolimay.cn.error.log
nginx 1605 root 13w REG 253,1 0.00899124MB 1454154 /www/wwwlogs/kugou-dev.lolimay.cn.log
nginx 1605 root 14w REG 253,1 0.0195312MB 1454155 /www/wwwlogs/kugou-dev.lolimay.cn.error.log
nginx 1605 root 15w REG 253,1 6.06264MB 1454156 /www/wwwlogs/kugou.lolimay.cn.log
nginx 1605 root 16w REG 253,1 15.3351MB 1454157 /www/wwwlogs/kugou.lolimay.cn.error.log
nginx 1605 root 17w REG 253,1 0.000652313MB 1454158 /www/wwwlogs/kugouv2.lolimay.cn.log
nginx 1605 root 18w REG 253,1 0MB 1454159 /www/wwwlogs/kugouv2.lolimay.cn.error.log
nginx 1605 root 19w REG 253,1 15.8019MB 1454160 /www/wwwlogs/lolimay.cn.log
nginx 1605 root 20w REG 253,1 0.128906MB 1457104 /www/wwwlogs/mmic.lolimay.cn.log
nginx 1605 root 21w REG 253,1 0MB 1457105 /www/wwwlogs/mmic.lolimay.cn.error.log
nginx 1605 root 22w REG 253,1 20948.7MB 1457106 /www/wwwlogs/proxy.lolimay.cn.log <<< 好家伙,20G的空间竟然在这!
nginx 1605 root 23w REG 253,1 147.82MB 1457107 /www/wwwlogs/proxy.lolimay.cn.error.log
nginx 1606 www 2w REG 253,1 0.00390625MB 1454073 /www/wwwlogs/nginx_error.log
nginx 1606 www 4w REG 253,1 0.00390625MB 1454073 /www/wwwlogs/nginx_error.log
nginx 1606 www 5w REG 253,1 0.000277519MB 1861658 /www/server/nginx/off
nginx 1606 www 7w REG 253,1 0.0984421MB 1454074 /www/wwwlogs/api.lolimay.cn.log
nginx 1606 www 8w REG 253,1 0.000199318MB 1454082 /www/wwwlogs/api.lolimay.cn.error.log
nginx 1606 www 9w REG 253,1 0MB 1454083 /www/wwwlogs/csec.lolimay.cn.log
nginx 1606 www 10w REG 253,1 0MB 1454084 /www/wwwlogs/csec.lolimay.cn.error.log
nginx 1606 www 11w REG 253,1 0.00923347MB 1454085 /www/wwwlogs/devtool.lolimay.cn.log
nginx 1606 www 12w REG 253,1 0.0195312MB 1454086 /www/wwwlogs/devtool.lolimay.cn.error.log
nginx 1606 www 13w REG 253,1 0.00899124MB 1454154 /www/wwwlogs/kugou-dev.lolimay.cn.log

我们重启 nginx 进程即可释放这些空间:

1
service nginx restart

再看一下一下磁盘占用:

1
2
3
4
5
6
7
8
root@lolimay:/# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 3.9G 0 3.9G 0% /dev
tmpfs 3.9G 1.8M 3.9G 1% /dev/shm
tmpfs 3.9G 532K 3.9G 1% /run
tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
/dev/vda1 40G 17G 21G 45% /
tmpfs 783M 0 783M 0% /run/user/0

舒服了,瞬间有 21G 可用空间了。

为了解除后顾之忧,我们直接在 nginx 的配置文件中把这个站点的日志功能关闭:

1
2
access_log  off;
error_log off;

MISCONF Redis is configured to save RDB snapshots

禁用 Redis 存储快照到磁盘上就可以了:

1
2
3
redis-cli
> config set stop-writes-on-bgsave-error no
> quit

Vim进阶(2021-03-29)

参考文章:7 Vim Tips That Changed My Life (With Demo)

  1. Jump to the matching bracket/brack ([, {, }, ] 等)

通过 % 可以快速跳转到最近的一个括号

  1. Fix indentation in the whole file

通过 = G 可以快速自动修复文档中的缩进问题,但实际上我在 VSCode 中更偏爱使用 Command+F 快捷键来快速格式化文档

  1. Search for word currently under cursor

通过 * 可以快速跳转到下一个和光标下相同的词

ESLint检查svelte文件

在项目根目录创建了 .eslintrc 配置文件,内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
{
"parserOptions": {
"ecmaVersion": 2020,
"sourceType": "module"
},
"env": {
"es6": true,
"browser": true
},
"rules": {
"semi": ["error", "never"]
},
"plugins": [
"svelte3"
],
"overrides": [
{
"files": [
"*.svelte"
],
"processor": "svelte3/svelte3"
}
],
"ignorePatterns": ["scripts/*"]
}

个人习惯是语句末尾不加分号,但是以上规则在 VSCode 中没生效,ESLint 只检查了 JavaScript 文件。

解决方案,修改 VSCode 用户 settings.json 配置文件,添加以下配置项:

1
2
3
4
"eslint.validate": [
"javascript",
"svelte"
]

这样在 VSCode 中就会检查 svelte 文件中的 JavaScript 语法了。