Emacs 如何调试单片机(嵌入式 Embedded Debug)

概述 本文讲述如何在 Emacs 进行嵌入式调试, 对 MCU 单片机硬件进行调试(比如: STM, HC 等芯片) 说明 大多数入门单片机调试都是从 Keil, IAR Embedded 之类的 IDE 软件. 由于 IDE 这些软件集成了 调试 功能, 导致不知道 编译 + 调试 是如何进行的. 调试底层逻辑: gdb 进行调试. Emacs 调试单片机 安装必要依赖 GitHub - svaante/dape: Debug Adapter Protocol for Emacs Emacs 安装 dape, 然后根据 dape 说明再安装 cpptools Downloads | GNU Arm Embedded Toolchain Downloads – Arm Developer 安装 Arm GCC 工具链, 该工具包含 arm-none-eabi-xxx 等命令行工具. 检查 Arm GCC 是否安装成功, 在终端输入 arm-none-eabi-gdb 看有没有输出. ...

2025 年 04 月 25 日 · 231 words · ISouthRain

Emacs 技巧 | 善用翻译

大多数人对于不同语言的翻译功能基本需求如下: 翻译文本阅读 单词读音/音频 输入文本翻译 阅读电子书 大多数人是如何使用这几种翻译的方式呢? 翻译文本阅读 将需要翻译的文本复制到 翻译工具/软件 中, 这过程需要切换不同的软件, 非常繁琐. 单词读音/音频 将需要翻译的单词复制到 翻译工具/软件, 并点击播放音频. 输入文本翻译 将需要翻译的文本复制到 翻译工具/软件 进行翻译, 然后再将翻译结果复制. 阅读电子书 将电子书翻译 缺点是翻译结果比较生硬, 不如一个一个单词翻译准确. 将电子书的翻译单词复制到 翻译工具/软件 进行翻译. 在这些 翻译需求中, 尤其以 输入翻译 和 播放单词音频 在不同 翻译工具/软件 难以达到理想状态. 在下面我将介绍如何使用 Emacs 快速/高效/一体化 进行以上 翻译需求 Emacs 能将以上翻译需求 速率更快/效率更高 我将要使用 Emacs 的两个包实现将这些功能: (Emacs 版的 谷歌翻译)GitHub - atykhonov/google-translate: Emacs interface to Google Translate GitHub - ISouthRain/dict-line: Emacs show Dict . Emacs 显示字典词. 你应该需要学会这两个包的使用… 关于如何使用这两个包, 这是我的配置, 你将这些代码放到 init.el 中即可: ...

2024 年 10 月 13 日 · 433 words · ISouthRain

Emacs Issue

Emacs Issue 前言 这个文章是 记录个人使用 Emacs 相关信息/问题 它可能不适用于所有人 这可能会给遇到相同问题时的 Emacser 有所帮助! 如果你遇到了某些 Emacs 相关问题, 并解决了, 可以在下面 评论区 记录下来, 我会尝试添加到文章当中 Issue Minibuffer 如何换行? C-q C-j 让 Minibuffer 支持使用 拼音 查找 例如在 org-mode 中使用 consult-imenu 命令时, 弹出的内容可以使用 拼音 查找 以下方法本人是使用 orderless, vertico, consult, 三个包配合用的 (use-package vertico :ensure t :hook (after-init . vertico-mode)) (use-package consult :ensure t) (use-package orderless :ensure t :config (setq completion-styles '(orderless basic) completion-category-defaults nil completion-category-overrides '((file (styles partial-completion)))) ;; 对 vertico 进行拼音查找, 全拼的第一个字母, 例如找 配置, 输入 pz 两个字母 (defun completion--regex-pinyin (str) (orderless-regexp (pinyinlib-build-regexp-string str))) (add-to-list 'orderless-matching-styles 'completion--regex-pinyin) ) ;; 如果使用的 小鹤双拼, 可以使用 https://github.com/ISouthRain/pinyinlib.el 仓库, 配置: (setq pinyinlib-use-method 'xiaohe) Windows org-mode 使用 GnuPG(GPG) 加密后无法解密, 加密信息出现 ^M 比如使用 org-crypt 这个包进行 GPG 加密时, 却无法解密 原因是 文件换行符 问题, Windows 系统的默认换行符是 CRLF, 只需将 CRLF 改为再加密就不会出现 CRLF 方法一: 添加函数, 删除 ^M 结尾的信息再进行解密 ;; 解决 ^M 解密问题 (defun freedom-org-decrypt-entry () "移除行尾 ^M(CRLF) 并解密 Org-decrypt Replace DOS eolns CR LF with Unix eolns CR" (interactive) (goto-char (point-min)) (while (search-forward "\r" nil t) (replace-match "")) (org-decrypt-entry)) 方法二: 加密之前 将文件的换行符改为 LF , 例如: C-x <RET> f utf-8-unix <RET> Windows Emacs 使用 Daemon 方式打开文件时, 文件名乱码导致无法打开对应文件 我使用添加以下配置修复 (require 'server) ;; 如果没有启动 daemon server 就启动 (unless (server-running-p) (server-start)) ;; 防止 windows 使用 server 打开中文文件名乱名导致无法打开文件 (when (eq system-type 'windows-nt) (setq locale-coding-system 'gb18030) ;此句保证中文字体设置有效 (setq w32-unicode-filenames 'nil) ; 确保file-name-coding-system变量的设置不会无效 (setq file-name-coding-system 'gb18030) ; 设置文件名的编码为gb18030 ) Org-mode 的 Table 表格没有对齐问题 这个是由于 中文字体 和 英文字体宽度不等宽导致, 设置Emacs使用某些 等宽字体 就可以解决 等宽字体, 两个例子 Iosevka(英文) GitHub - be5invis/Iosevka: Versatile typeface for code, from code. 霞鹜文楷(中文) GitHub - lxgw/LxgwWenKai: An open-source Chinese font derived from Fontworks’… 使用以下配置可以解决, 只有对应某个系统, 就能加载对应Emacs的配置, Emacs 自动识别 这个配置也相当于配置了 Emacs字体相关设置 darwin 属于 Mac 系统 Windows-nt 属于 Windows 系统 gnu/Linux 属于 Linux 系统 (when (eq system-type 'darwin) (setq fonts '("SF Mono" "冬青黑体简体中文")) (set-fontset-font t 'unicode "Apple Color Emoji" nil 'prepend) (set-fontset-font t 'unicode "Hack Nerd Font Mono" nil 'append) (set-face-attribute 'default nil :font (format "%s:pixelsize=%d" (car fonts) 16k))) (when (eq system-type 'windows-nt) ;; (setq fonts '("Iosevka" "霞鹜文楷")) (setq fonts '("Iosevka" "微软雅黑")) (set-fontset-font t 'unicode "Segoe UI Emoji" nil 'prepend) (set-fontset-font t 'unicode "Segoe UI Symbol" nil 'append) (set-fontset-font t 'unicode "Hack Nerd Font Mono" nil 'append) (set-face-attribute 'default nil :font (format "%s:pixelsize=%d" (car fonts) 20)));; 只有 双数 才能 对齐 (when (eq system-type 'gnu/linux) (unless IS-Termux (setq fonts '("Iosevka" "微软雅黑")) (set-fontset-font t 'unicode "Segoe UI Emoji" nil 'prepend) (set-fontset-font t 'unicode "Segoe UI Symbol" nil 'append) (set-fontset-font t 'unicode "Hack Nerd Font Mono" nil 'append) (set-face-attribute 'default nil :font (format "%s:pixelsize=%d" (car fonts) 20)))) (if (display-graphic-p) (dolist (charset '(kana han symbol cjk-misc bopomofo)) (set-fontset-font (frame-parameter nil 'font) charset (font-spec :family (car (cdr fonts)))))) 类似方法有 GitHub - tumashu/cnfonts: emacs中文字体配置工具。可以快速方便的的实现中文字体和英文字体等宽(也就是常说的中英文对齐)。 Ripgrep 无法搜索中文 例如使用以下命令无法搜索中文: consult-ripgrep ripgrep-regexp ;; 解决 ripgrep 无法搜索中文和 consult-ripgrep 无法搜索中文 (setq default-process-coding-system '(utf-8-unix . gbk)) ;; 默认(utf-8-dos . utf-8-unix)

2023 年 05 月 19 日 · 438 words · ISouthRain

Emacs use-package 包管理器

use-package 源码地址 GitHub - jwiegley/use-package: A use-package declaration for simplifying your… 什么是 use-packaeg use-package 是管理 Emacs 包(插件) 的一个宏管理器 可以管理每个包的设置,并配置和定义 安装 use-package 将以下源码复制到你的 init.el 文件中, 然后重启 Emacs ;; 添加下载包的来源 (eval-and-compile (customize-set-variable 'package-archives '( ("melpa" . "http://melpa.org/packages/") ("org" . "http://orgmode.org/elpa/") ("gnu" . "https://elpa.gnu.org/packages/") ("nongnu" . "https://elpa.nongnu.org/nongnu/") )) (package-initialize) ;; 如果Emacs 检测到你没有安装 use-package, 那么自动安装 use-package (unless (package-installed-p 'use-package) (package-refresh-contents) (package-install 'use-package)) ) 使用 use-package 例如: 安装 doom-themes 主题 ;; 安装 doom-themes 主题,并启用 doom-one 主题 (use-package doom-themes :ensure t :config (load-theme 'doom-one t)) use-package 关键词解释 :ensure t/nil 是否从网络源安装? t 代表从网络安装,nil 代表从 Emacs 内置包加载(如果Emacs内置了这个包,Emacs如果没有那么将报错) :config 加载/下载 包 之后再加载的配置 :init 加载/下载 包 之前加载的配置 :defer num 懒加载,num 代表数字, 在 Emacs 启动完成 num秒后再加载 :config 的内容, 可以减少 Emacs 启动时间 还有更多关键词使用,可以自己到项目地址查看 比如 bind 自定义按键, commands 调用某个命令后再加载 :config 配置

2022 年 12 月 15 日 · 118 words · ISouthRain

Emacs google-translate 翻译文本

google-translate 源码地址 GitHub - atykhonov/google-translate: Emacs interface to Google Translate 安装 google-translate 安装 use-package , 如果你没有使用 use-package (eval-and-compile (customize-set-variable 'package-archives '( ("melpa" . "http://melpa.org/packages/") ("org" . "http://orgmode.org/elpa/") ("gnu" . "https://elpa.gnu.org/packages/") ("nongnu" . "https://elpa.nongnu.org/nongnu/") )) (package-initialize) (unless (package-installed-p 'use-package) (package-refresh-contents) (package-install 'use-package)) ) 安装 google-translate (use-package google-translate :ensure t :config (setq google-translate-default-source-language "auto" google-translate-default-target-language "zh-CN") (setq google-translate-translation-directions-alist '(("en" . "zh-CN") ("zh-CN" . "en") ("en" . "ru"))) ) 配置解释 语言来源, 默认自动 (setq google-translate-default-source-language "auto") 目标语言,中文简体 (setq google-translate-default-target-language "zh-CN") 翻译方案 英文 -> 中文, 中文 -> 英文, 英文 -> 俄语, 使用 C-n 切换 (setq google-translate-translation-directions-alist '(("en" . "zh-CN") ("zh-CN" . "en") ("en" . "ru"))) 使用 将光标放到你要翻译的文本上 M-x google-translate-smooth-translate 回车 C-n 切换翻译方案 本期视频 <!DOCTYPE HTML>

2022 年 12 月 13 日 · 110 words · ISouthRain