康威生命游戏(Conway's Game of Life)

各位小萌新们,你们好鸭~😁,我是电协(学生电子爱好者协会,和电竞没有关系!!!)的一名大二学长,欢迎来到我的个人网站。

现在摆在你面前的是我用 STM32 微控制器实现的一个康威生命游戏(英语:Conway’s Game of Life),又称康威生命棋,是英国数学家约翰·何顿·康威在1970年发明的元胞自动机。由于元胞自动机牵涉到的知识实在是太多太多了(其实是我也不懂🙃),这里我就不一一展开了,如果你感兴趣的话呢可以自行了解一下。

关于 printf 的缓冲区

最近在写程序的时候遇到了一个问题:最开始,为了重定向stdout流,我重写了_write函数,将其重定向至串口:

1
2
3
4
5
6
7
8
9
10
11
/* 该重定向方法适用于 GCC 编译器,如果用的是 ARMCC 编译器请自行查找资料 */
int _write(int fd, char *ptr, int len) {
for (int i = 0; i < len; i++) {
if (*(ptr + i) == '\n') {
HAL_UART_Transmit(&huart1, (uint8_t *)&"\r", 1, 1);
}
HAL_UART_Transmit(&huart1, (uint8_t *)ptr + i, 1, 1);
}

return len;
}

之后调用printf("OK");输出。程序运行后并没有任何输出,调试发现_write函数并没有被执行。

LVGL 的移植

最近了解了一下开源图形库 LVGL,现在记录一下移植的过程。其实 LVGL 移植挺方便的,仅需实现两个函数。

将 LVGL 添加至项目

首先,在 GitHub Release 中下载最新版本的源代码。下载完成后,将解压出的文件夹复制到工程目录的一个文件夹中(这里以Middlewares/lvgl/为例)。

在 Docker 中运行 GUI 程序

最近在调试 MCU 的过程中需要用到 ST 新推出的软件STM32CubeMonitor,虽然有 Linux 版本,但官方只提供了deb安装包,这让 Arch 用户咋办?用debtap,也不是不行,但我更新仓库就从没成功过,之前在 Windows 中用过 SSH 的X11 Forwarding透传功能,可以远程运行 GUI 程序,寻思着在 Docker 中是不是也可以,尝试了一下,遇到了一点问题,最终还是成功了,接下来就介绍一下方法和遇到的问题。