关于 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函数并没有被执行。

在 Docker 中运行 GUI 程序

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

如何在Windows下愉快地用VS Code写C/C++

Visual Studio Code(下面简称VS Code)是由Microsoft开发的一款开源代码编辑器,凭借其出色的性能、高度的可定制性和简洁的UI获得了大量程序员的喜爱,在安装对应的插件后,即可成为多种语言的IDE。但VS Code本身只是一个编辑器,并不包含编译器,所以这篇文章,我就来介绍一下如何配置VS Code,让你在Windows下愉快地写C/C++程序。

如何在Hexo中高效地插入图片

TL;DR

使用图床工具PicGo,配合阿里云的OSS可高效地在文章中插入图片。

引言

相信很多人在一开始使用Hexo的时候,对于如何在文章中插入图片都感到很烦恼,直接拷贝到/images目录下?代码仓库越来越大;使用网上的图床?上传太麻烦😣。这里我将介绍一种简单的办法,帮助你在Hexo中高效地插入图片。

Hexo如何实现CI/CD?

现在来介绍一下我的网站是如何实现持续部署的。

Docker

首先要在服务器上Build一个Docker镜像,用于生成Hexo网站,因为如果直接用Python调用shell命令构建的话,会有环境变量和权限的问题,所以这里我们把源代码目录bind到容器中,然后在容器中构建。Dockerfile如下:

1
2
3
4
5
6
7
8
9
10
11
FROM node:12-alpine
RUN echo "Asia/Shanghai" > /etc/timezone \
&& echo "https://mirrors.ustc.edu.cn/alpine/v3.9/main/" > /etc/apk/repositories \
&& npm config set registry https://registry.npm.taobao.org \
&& apk add --no-cache git

VOLUME /build/src
WORKDIR /build
COPY ./build.sh /build

ENTRYPOINT ["/bin/sh", "./build.sh"]