Ronan Blog

罗华东的博客 | 向前每多走一步,热爱和勇气就会多一分。

「Gmeek」上传脚本(单篇或批量)

2024-09-03 3 min read Docs Ronan

[!caution]

注意: 该脚本仅适用于通过Gmeek项目搭建的博客网站 在开始使用之前,需要创建 github 的个人 Token

1.创建github个人Token

1.在 GitHub 上任何页面的右上角,单击您的个人资料照片,然后单击 Settings
2.在左侧边栏中,单击 Developer settings(开发人员设置)
3.在左侧边栏中的 Personal access tokens (个人访问令牌) 下,单击 Tokens (classic)
4.选择 Generate new token(生成新令牌),然后单击 Generate new token (classic)
5.在 Note 字段中,为您的令牌指定一个描述性名称。
6.要为您的令牌指定过期时间,请选择 Expiration(过期),然后选择默认选项或单击 Custom(自定义)以输入日期。
7.选择要授予此令牌的范围。要使用令牌从命令行访问存储库,请选择 repo ( 这里一定要打上勾!!! ) 。没有分配范围的令牌只能访问公共信息。
8.滑动到底部,单击 Generate token
9.将新令牌复制到剪贴板并且保管好,令牌只出现一次,一定要保管好!一定要保管好!一定要保管好!

2.使用方法

以下有两个方法,分为sh脚本和python脚本:

[!tip] 建议: Linux与mac系统使用 sh 脚本,Windows使用py脚本体验更佳 也可根据喜好自行采用

2.1配置脚本

对于 sh 脚本

[!important]

使用前需确认以下:

  • 系统已安装curl
  • 系统已安装jq
  • 系统可使用bash

curl、jq 安装方法由于系统不同,方法多样,所以具体安装方法可以自行查找…

在代码开始的前几行,找到以下几个值,在引号里填入自己的信息:

  • TOKEN 为自己创建的Token值
  • OWNER 为自己的github用户名
  • REPO 为自己的Gmeek博客仓库名,一般是 xxx.github.io

对于 py 脚本

1.在开始使用之前,需要安装 requests 模块

Continue reading

手动搭建 stm32 标准外设库+Makefile工程

2024-09-03 2 min read Docs Ronan

本教程以 stm32f407 为例,其他 stm32 芯片配置方式大同小异。

1.下载官方标准外设库

进入 ST 官网的嵌入式软件板块 ,根据自身板子型号选择,有F0-F4多种型号。

之后根据提示选择下载即可,如果没有意外的话,应该会获得一个类似 en.stsw-stm32065_v1-9-0.zip(这是 F4 的标准库) 的压缩包。

2.创建工程

2.1建立工程结构

1.解压从官网下载的标准外设库 en.stsw-stm32065_v1-9-0.zip ,获得一个 STM32F4xx_DSP_StdPeriph_Lib_V1.9.0 目录

2.新建一个my_project目录,并在该目录下创建四个子目录:driverincludelibsrc

3.将标准固件库目录.../STM32F4xx_DSP_StdPeriph_Lib_V1.9.0/Libraries/CMSIS/Include文件夹,以及固件库文件目录.../STM32F4xx_DSP_StdPeriph_Lib_V1.9.0/Libraries/CMSIS/Device/ST/STM32F4xx/Source/Templates/TrueSTUDIO文件夹,全部拷贝到my_project/cmsis文件夹下

4.将标准固件库文件目录.../STM32F4xx_DSP_StdPeriph_Lib_V1.9.0/Libraries/STM32F4xx_StdPeriph_Driver文件夹下的incsrc文件夹全部拷贝移植到lib文件夹下

5.将标准固件库文件目录.../STM32F4xx_DSP_StdPeriph_Lib_V1.9.0/Libraries/CMSIS/Device/ST/STM32F4xx/Include文件夹目录下的stm32f4xx.hsystem_stm32f4xx.h文件拷贝到include文件夹下

6.将标准固件文件目录.../STM32F4xx_DSP_StdPeriph_Lib_V1.9.0/Project/STM32F4xx_StdPeriph_Templates目录下的main.cstm32f4xx_it.csystem_stm32f4xx.c拷贝移植到src文件夹下,stm32f4xx_conf.hstm32f4xx_it.h拷贝到include文件夹中,其中main.c文件是STM32工程文件的主函数程序,(main.c 也可以不拷贝,自行创建即可)

7.将标准固件库文件目录.../STM32F4xx_DSP_StdPeriph_Lib_V1.9.0/Project/STM32F4xx_StdPeriph_Templates/TrueSTUDIO/STM32F40_41xxx文件夹下的STM32F417IG_FLASH.ld拷贝到my_project的工程根目录下,并重命名为stm32_flash.ld

2.2编写 Makefile

到这里我们需要自行手动编写一个 Makefile…

逗你玩呢,我已经写好了,请慢用:


CROSS_COMPILE = arm-none-eabi-

# 将源文件放在这里 (*.c)
SRCDIR=./src
LIBDIR=./lib/src

SRC = ${wildcard ${LIBDIR}/*.c} \
	  ${wildcard ${SRCDIR}/*.c}

# 将以该名称生成二进制文件 (.elf, .bin, .hex)
PROJECT_NAME=out

# 编译器设置。仅编辑 CFLAGS 以包含其他头文件。
CC = $(CROSS_COMPILE)gcc
AS = $(CROSS_COMPILE)as
LD = $(CROSS_COMPILE)gcc
OBJCOPY = ${CROSS_COMPILE}objcopy

# compiler flags 编译器标志
CFLAGS = -g -O2 -Wall -Tstm32_flash.ld
CFLAGS += -DUSE_STDPERIPH_DRIVER
CFLAGS += -D STM32F40_41xxx
CFLAGS += -mlittle-endian -mthumb -mcpu=cortex-m4 -mthumb-interwork
CFLAGS += -mfloat-abi=hard -mfpu=fpv4-sp-d16
CFLAGS += -I .
CFLAGS += -specs=nosys.specs

# 包含 STM 库中的文件
CFLAGS += -I./cmsis/Include
CFLAGS += -I./include
CFLAGS += -I./lib/inc

SRC += ./cmsis/TrueSTUDIO/startup_stm32f40_41xxx.s

# 将 SRC 中每个 .c 文件的扩展名替换为 .o,生成对应的目标文件。例如,如果 SRC 中有一个文件 main.c,它会生成 main.o,以便后续编译和链接时使用这些目标文件。
OBJS = $(SRC:.c=.o)

vpath %.c ./lib/src \
vpath %.c ./src \

.PHONY: proj

all:proj

proj:$(PROJECT_NAME).elf

$(PROJECT_NAME).elf: $(SRC)
	$(CC) $(CFLAGS) $^ -o $@
	$(OBJCOPY) -O ihex $(PROJECT_NAME).elf $(PROJECT_NAME).hex
	$(OBJCOPY) -O binary $(PROJECT_NAME).elf $(PROJECT_NAME).bin

clean:
	rm -f *.o $(PROJECT_NAME).elf $(PROJECT_NAME).hex $(PROJECT_NAME).bin

flash:proj
	st-flash write $(PROJECT_NAME).bin Ox8000000
	STM32_Programmer_CLI -c port=SWD -w $(PROJECT_NAME).hex 

将以上内容复制并保存为Makefile,将其放到my_project工程根目录下

Continue reading

GDB调试

2024-09-03 8 min read Docs Ronan

gdb 是由 GNU 软件系统社区提供的调试器,同 gcc 配套组成了一套完整的开发环境,可移植性很好,支持非常多的体系结构并被移植到各种系统中(包括各种类 Unix 系统与 Windows 系统里的 MinGW 和 Cygwin )。此外,除了 C 语言之外,gcc/gdb 还支持包括 C++、Objective-C、Ada 和 Pascal 等各种语言后端的编译和调试。 gcc/gdb 是 Linux 和许多类 Unix 系统中的标准开发环境,Linux 内核也是专门针对 gcc 进行编码的。

gdb 的吉祥物是专门捕杀 bug 的射手鱼,官方有这样一段描述:

For a fish, the archer fish is known to shoot down bugs from low hanging plants by spitting water at them.

作为一种鱼,射手鱼以喷水射下低垂的植物上的虫子而闻名。

GDB 是一套字符界面的程序集,可以使用命令 gdb 加载要调试的程序。 下面为大家介绍一些常用的GDB调试命令。

1.调试准备

项目程序如果是为了进行调试而编译时, 必须要打开调试选项(-g)。另外还有一些可选项,比如: 在尽量不影响程序行为的情况下关掉编译器的优化选项(-O0),-Wall选项打开所有 warning,也可以发现许多问题,避免一些不必要的 bug。

-g选项的作用是在可执行文件中加入源代码的信息,比如可执行文件中第几条机器指令对应源代码的第几行,但并不是把整个源文件嵌入到可执行文件中,所以在调试时必须保证gdb能找到源文件。

习惯上如果是c程序就使用gcc编译, 如果是 c++程序就使用g++编译, 编译命令中添加上边提到的参数即可。

Continue reading
Older posts Newer posts