ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

使用 Codex CLI 和 VS Code 开发嵌入式:把 settings 改到 TaoToken 的实操大纲

使用 Codex CLI 和 VS Code 开发嵌入式:把 settings 改到 TaoToken 的实操大纲 1. 嵌入式工程里 Codex CLI 与 VS Code 的配置链路到底卡在哪如果你正在用 STM32 CMake 做嵌入式开发同时希望把 VS Code 当作主力编辑器、把 Codex CLI 当作终端里的结对助手那么你大概率会遇到一个很具体的问题Codex CLI 默认走的是官方通道而团队或个人往往希望把模型请求统一收敛到一个可控的入口方便做用量统计、密钥管理和多模型切换。这个“把 settings 里的模型接入项改到统一通道”的动作就是本篇要拆解的核心。先说清楚 Codex CLI 是什么、能做什么、适合谁。Codex CLI 是一个跑在终端里的编码代理它可以读取你的工程目录、理解 CMakeLists.txt、执行构建命令、根据编译错误自动修复代码还能做代码审查。它适合已经能用命令行完成cmake --build build的嵌入式工程尤其是 STM32CubeMX 生成的 CMake 工程、Zephyr、ESP-IDF、PlatformIO 这类有明确构建入口的项目。不适合只有 Keil.uvprojx且无法命令行编译的工程——因为 Codex CLI 的很多能力依赖“能跑构建、能看报错”这个闭环。VS Code 在这里的角色是“看代码、看 diff、调试、烧录”的界面层。你可以在 VS Code 里装 C/C、CMake Tools、Cortex-Debug用launch.json断点调试同时在集成终端里跑 Codex CLI 做较大范围的修改。两者配合的关键是让 Codex CLI 的模型请求走一个你指定的 Base URL而不是默认通道。这个 Base URL 就是 TaoToken 的统一通道。我试过的典型卡点有三个第一Codex CLI 的配置项分散在环境变量和配置文件里改错地方不生效第二VS Code 的 settings.json 和 Codex CLI 的配置是两套东西很多人以为改 VS Code 的 settings 就能影响终端里的 Codex其实不是第三改完 Base URL 后没有做一次真实的编译验证导致“看起来配好了实际请求还是走旧通道”。下面按可跟做的顺序把这条链路完整走一遍。本篇以 STM32F103 CMake Ninja OpenOCD 为例操作系统默认 Linux、macOS 或 Windows WSL2。Windows 原生环境下 Codex CLI 的支持仍偏实验建议在 WSL2 的 Linux 文件系统里操作工程放在/home/你的用户名/embedded/下不要放在/mnt/c/...否则跨文件系统会拖慢构建权限和路径也容易出问题。2. 把 Codex CLI 的模型接入项指向 TaoToken 的前置准备在改配置之前先把“钥匙”和“地址”准备好。TaoToken 的官网入口是 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 基址是 https://taotoken.net/api 。注意 API 地址不带 UTM 参数配置里填的就是这个干净的https://taotoken.net/api。你需要准备三样东西我把它叫做“三件套”Base URL、API Key、Model ID。这三件套在 Codex CLI、Cline MCP、CC Switch、Codex 的auth.json里都是通用的任何一处出现都要把这三个值写全缺一个都会导致请求失败。第一步拿到 API Key。进入控制台页面 https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 在 API Keys 管理页创建一个新的 Key。创建后立刻复制保存页面通常只显示一次。如果你需要看接入文档入口在 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 里面有各客户端的字段对照。第二步确认 Model ID。不同客户端对模型名的写法略有差异但核心是“用你在 TaoToken 控制台里看到的模型标识”。如果你不确定该用哪个可以先去模型对话页面 https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 发一条消息确认通道可用再回到 CLI 配置。第三步确认 Codex CLI 已安装。官方安装方式之一是npm i -g openai/codex如果没有 npmsudo apt update sudo apt install -y nodejs npm sudo npm i -g openai/codex安装后运行codex --version确认。升级用npm i -g openai/codexlatest。这里要强调一个容易混淆的点VS Code 里的 GitHub Copilot、Copilot Chat、Codex IDE 扩展和终端里的 Codex CLI 不是同一个东西。Copilot 负责编辑器内补全和局部解释Codex IDE 扩展在 IDE 内使用 Codex而 Codex CLI 是在终端里读写工程、运行命令、自动修复。你要改的“settings 里的模型接入项”指的是 Codex CLI 的配置不是 VS Code 的settings.json。VS Code 的settings.json管的是编辑器行为比如 IntelliSense、格式化、任务Codex CLI 的配置管的是模型请求走哪个 Base URL。两者不要混。如果你还打算用 Coding Plan 做长期编码或 Agent 任务入口在 https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 它更适合持续性的编码场景而不是一次性问答。前置准备做完你应该手上有一个可用的 API Key、确认过的 Model ID、已安装的 Codex CLI、一个能命令行构建的 STM32 CMake 工程。接下来进入真正改配置的环节。3. 可复制的 settings 片段Codex CLI 配置与环境变量写法这一节是全文最需要照着做的地方。Codex CLI 读取配置的方式主要有两种环境变量和配置文件。环境变量优先级高适合临时切换配置文件适合长期固定。两种我都会给你可以按需选。先看环境变量写法。在~/.bashrc或~/.zshrc里加入export OPENAI_BASE_URLhttps://taotoken.net/api export OPENAI_API_KEYsk-你的TaoToken密钥 export OPENAI_MODEL你的ModelID改完执行source ~/.bashrc让配置生效。这里OPENAI_BASE_URL指向 TaoToken 的 API 基址OPENAI_API_KEY填你在控制台创建的 KeyOPENAI_MODEL填模型标识。三件套齐全缺一不可。如果你不想污染全局环境变量可以用 Codex CLI 的配置文件。Codex CLI 的配置目录通常在~/.codex/配置文件是~/.codex/config.toml。用 TOML 写# ~/.codex/config.toml model 你的ModelID model_provider taotoken [model_providers.taotoken] name TaoToken base_url https://taotoken.net/api env_key TAOTOKEN_API_KEY然后在环境变量里只放 Keyexport TAOTOKEN_API_KEYsk-你的TaoToken密钥这种写法的好处是 Base URL 和 Model ID 固定在配置文件里Key 通过环境变量注入不会把密钥写进版本库。注意env_key的值要和你在 shell 里导出的变量名一致写错会导致读取不到 Key。如果你用的是 Codex 的auth.json方式部分版本支持路径通常在~/.codex/auth.json内容结构类似{ OPENAI_API_KEY: sk-你的TaoToken密钥, OPENAI_BASE_URL: https://taotoken.net/api }同样Base URL、Key、Model ID 三件套要写全。auth.json里如果只写了 Key 没写 Base URL请求还是会走默认通道这是最常见的“配了但没生效”的原因。再补充一个 CC Switch 场景。如果你用 CC Switch 管理多个通道切换配置时同样要确认三件套Base URL 填https://taotoken.net/apiKey 填 TaoToken 的 KeyModel ID 填对应模型。CC Switch 只是切换器它不会帮你补全缺失字段缺哪个就报哪个的错。关于 VS Code 的settings.json这里要澄清它不直接控制 Codex CLI 的模型请求。但你可以用它配置集成终端的默认环境让终端启动时自动带上环境变量。在.vscode/settings.json里{ terminal.integrated.env.linux: { OPENAI_BASE_URL: https://taotoken.net/api, OPENAI_MODEL: 你的ModelID } }注意这里没有放 KeyKey 建议放在系统环境变量或~/.codex/config.toml引用的环境变量里避免把密钥写进工程目录被提交。terminal.integrated.env.linux只对 Linux 终端生效WSL2 里同样适用macOS 用terminal.integrated.env.osxWindows 原生用terminal.integrated.env.windows。配置改完后不要急着让 Codex 改代码。先做一次“配置自检”在终端里echo $OPENAI_BASE_URL确认输出是https://taotoken.net/api再codex启动看它是否正常进入交互。如果启动时报 401说明 Key 没读到如果报连接失败说明 Base URL 写错或网络不通。这两个报错在第五节会详细对照。最后提醒一个路径问题~/.codex/config.toml里的路径和原文一致不要写成~/.config/codex/不同版本目录名可能不同以你本机codex首次运行生成的目录为准。如果不确定运行codex后看它提示的配置路径。4. 验证请求与一次真实编译确认补全和问答都走通配置写完必须用一次真实请求验证否则你无法确认请求到底走了哪个通道。验证分两层先验证模型问答再验证工程内的编译闭环。第一层模型问答验证。在终端里启动 Codexcd ~/embedded/my_stm32_project codex进入交互后输入一句简单的中文提问比如“用一句话说明这个工程的主程序入口在哪”。如果 Codex 能正常返回中文回答说明 Base URL、Key、Model ID 三件套都生效了。如果返回 401回到第三节检查 Key如果返回local proxy failed或连接超时检查 Base URL 是否写成了带路径的完整地址应该是https://taotoken.net/api不要多加/v1之类除非文档明确要求。第二层编译闭环验证。这一步是嵌入式场景特有的也是最能暴露配置问题的地方。先确认工程能独立构建cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPEDebug cmake --build build如果这两条命令能跑通说明工具链没问题。然后让 Codex 做一次“读取工程并解释”的动作提示词可以这样写请先阅读这个嵌入式工程的目录结构、CMakeLists.txt、Core/Src/main.c 和 AGENTS.md。 不要修改代码。 请用中文告诉我 1. 这个工程如何编译。 2. 主程序从哪里开始。 3. 哪些文件是生成的哪些适合我写业务代码。 4. 如果我要加 LED 模块应该改哪些文件。如果 Codex 能准确说出构建命令、入口文件和可改文件范围说明它已经正确读取了工程上下文模型请求也走通了。这一步同时验证了“模型通道”和“工程可读性”。第三层让 Codex 做一次小改动并构建。提示词请添加一个按键消抖模块适合 STM32 HAL 工程。 要求 1. 新建 Core/Inc/app_key.h 和 Core/Src/app_key.c。 2. 提供 App_Key_Init 和 App_Key_Tick。 3. 不要使用动态内存。 4. 不要在中断里 HAL_Delay。 5. 修改 CMakeLists.txt 让新文件参与编译。 6. 运行构建并修复编译错误。观察 Codex 是否真的执行了cmake --build build以及它是否根据报错修复。如果它只是生成了文件但没有运行构建说明你的提示词里“运行构建”没被识别或者 Codex 的自动执行权限没开。可以在提示词里更明确地写“请运行 cmake --build build 并读取完整错误输出”。成功的结果应该是新文件被创建CMakeLists.txt 被更新构建通过没有 Error。如果构建失败但 Codex 能定位到第一条真正的 C 编译错误并修复也算走通。关键是“请求发出去了、模型响应了、工程被真实修改并验证了”。这里给一个AGENTS.md的示例放在工程根目录能显著提升 Codex 的修改质量# Embedded Project Rules This is an embedded C project. Rules: - Answer in Chinese when the user writes Chinese. - Prefer small, reviewable changes. - Do not modify generated vendor driver files unless explicitly requested. - For STM32CubeMX files, keep user code inside USER CODE blocks. - After editing, run the configured build command when possible. - If hardware flashing is needed, explain the command but ask before changing device state. - Be careful with interrupt handlers, DMA buffers, volatile variables, and RTOS APIs.有了这个文件Codex 会更清楚哪些文件能改、哪些不要碰减少“把生成代码改乱”的概率。验证完成后你可以在 VS Code 的 Source Control 里查看 diff确认改动范围。然后 Run Build Task再用 Cortex-Debug 下载调试。整个链路是VS Code 看代码 → 终端 Codex 改代码 → VS Code 看 diff → 构建 → 调试 → 提交。5. 本篇常见报错排查401、local proxy failed、reading choices、OAuth配置过程中最容易撞上的报错就那么几个逐个对照排查基本能覆盖九成问题。401 Unauthorized。这是 Key 相关错误。可能原因Key 没导出到当前 shell、Key 拼写错误、Key 已失效、env_key引用的变量名和实际导出的不一致。排查方法echo $OPENAI_API_KEY或echo $TAOTOKEN_API_KEY确认有值再确认~/.codex/config.toml里env_key的值和变量名完全一致。如果用的是auth.json确认OPENAI_API_KEY字段存在且没有多余空格。local proxy failed / connection refused。这是 Base URL 或网络层错误。可能原因Base URL 写成了https://taotoken.net/api/v1这类多余路径、写成了http而不是https、或者本机网络无法访问。排查方法确认配置里是https://taotoken.net/api用curl -I https://taotoken.net/api看是否能通。如果 curl 不通说明是网络环境问题不是配置问题。reading choices / unexpected response shape。这类报错通常出现在响应解析阶段说明请求发出去了但返回结构不符合客户端预期。可能原因Model ID 写错导致服务端返回了非预期格式或者 Base URL 指向了错误的端点。排查方法回到模型对话页面 https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 用同一个 Model ID 发一条消息确认模型本身可用再检查 Base URL 是否精确匹配文档要求。OAuth 相关报错。Codex CLI 首次运行可能提示登录如果你选择 API Key 方式而不是账号登录要确保配置里没有残留的 OAuth token 干扰。排查方法检查~/.codex/下是否有旧的认证文件必要时备份后清理重新用 API Key 方式配置。注意不要同时启用账号登录和 API Key两者可能冲突。VS Code 红线但能编译。这不是 Codex 的问题是 IntelliSense 配置不完整。检查.vscode/c_cpp_properties.json里的includePath和defines。STM32F1 示例{ configurations: [ { name: STM32, includePath: [ ${workspaceFolder}/Core/Inc, ${workspaceFolder}/Drivers/STM32F1xx_HAL_Driver/Inc, ${workspaceFolder}/Drivers/CMSIS/Device/ST/STM32F1xx/Include, ${workspaceFolder}/Drivers/CMSIS/Include ], defines: [USE_HAL_DRIVER, STM32F103xB], compilerPath: /usr/bin/arm-none-eabi-gcc, cStandard: c11, cppStandard: c17, intelliSenseMode: gcc-arm } ], version: 4 }F4 芯片要把路径和宏改成STM32F4xx_HAL_Driver、STM32F407xx。Cortex-Debug 找不到 elf。检查.vscode/launch.json里的executable路径是否指向真实输出文件。示例{ version: 0.2.0, configurations: [ { name: Debug STM32 with OpenOCD, type: cortex-debug, request: launch, servertype: openocd, cwd: ${workspaceFolder}, executable: ${workspaceFolder}/build/firmware.elf, configFiles: [interface/stlink.cfg, target/stm32f1x.cfg], runToEntryPoint: main, showDevDebugOutput: none } ] }firmware.elf要换成你的真实输出名target/stm32f1x.cfg按芯片系列改F4 用stm32f4x.cfg。OpenOCD 连接失败。先命令行运行openocd -f interface/stlink.cfg -f target/stm32f1x.cfg测试能连上再回到 VS Code。WSL2 里看不到 ST-LINK 是常见问题需要 USB 转发或者改在 Windows 侧烧录。Codex 改了但编译失败。最常见原因是新文件没加入 CMakeLists.txt。让 Codex 检查 CMakeLists或者手动确认add_executable里包含了新源文件。排查顺序建议先确认三件套齐全再确认网络可达再确认工程能独立构建最后才怀疑 Codex 本身。大部分问题都在前三步。6. 长期编码与 Agent 场景把 TaoToken 通道固定下来如果你只是偶尔用 Codex CLI 问几个问题环境变量方式就够了。但如果你打算把 Codex CLI 当作日常嵌入式开发的固定助手尤其是让它做多文件修改、自动修复、代码审查这类长任务那么把通道配置固定下来会更省心。固定的方式就是第三节的~/.codex/config.toml把 Base URL 和 Model ID 写死Key 通过环境变量注入。这样每次启动 Codex 都自动走 TaoToken 通道不需要重复导出变量。如果你有多个项目需要不同模型可以在项目根目录放一个.codex/config.toml做局部覆盖但要注意 Codex CLI 是否支持项目级配置以你本机版本为准。对于长期编码和 Agent 任务Coding Plan 入口在 https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 它更适合持续性的编码场景。如果你需要管理多个 Key 或查看用量控制台在 https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 。接入文档在 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 里面有各客户端的字段对照遇到字段不确定时优先查文档。嵌入式场景下有几个地方新手要谨慎不要让 Codex 自动改启动文件startup_*.s、链接脚本.ld、中断向量表、时钟树初始化、Bootloader 跳转代码、Flash 擦写代码、DMA Cache 相关代码、安全相关代码。这些地方可以先让 Codex 解释不要直接修改。提示词可以写“请解释这个链接脚本不要修改。请告诉我每个段的含义尤其是 .isr_vector、.text、.data、.bss。”学习路线建议按这个顺序推进第一步VS Code 能打开工程红线尽量少第二步命令行能cmake --build build第三步OpenOCD 能连接芯片第四步Cortex-Debug 能断在 main第五步Codex 能解释工程第六步Codex 能添加一个小模块并构建成功第七步再开始学 FreeRTOS、DMA、低功耗等高级内容。每一步都验证通过再进下一步比一次性配一堆东西然后到处报错要高效得多。最后给一个实用技巧每次让 Codex 改代码前先git commit一次改完在 VS Code 的 Source Control 里看 diff确认没问题再提交。这样即使 Codex 改乱了也能一键回退。嵌入式工程的生成代码和手写代码混在一起diff 审查比盲目信任自动修改要可靠得多。
返回列表