当前位置: 首页 > wzjs >正文

长沙seo优化价格济南 网站优化

长沙seo优化价格,济南 网站优化,凡客诚品鞋子质量怎么样,.net做网站的优缺点VScodeOpenOCDCmakeHTOS栈回溯在国产32芯片上完全调试 说实话用的都是HAL库开发的,flash链接文件用的都是stm32的,只能说国产芯片抄的基本完全一样了。具体芯片是什么就不介绍了,看过文章就能猜出来是哪家的了。代码开源在Gitee上了。https:…

VScode+OpenOCD+Cmake+HTOS栈回溯在国产32芯片上完全调试

说实话用的都是HAL库开发的,flash链接文件用的都是stm32的,只能说国产芯片抄的基本完全一样了。具体芯片是什么就不介绍了,看过文章就能猜出来是哪家的了。代码开源在Gitee上了。https://gitee.com/huayi1234/HTOS/tree/VScode+openocd

基于 VS Code 的 STM32+HTOS 开发环境详解

1. 开发环境概述

本文将详细介绍一个基于 VS Code 的 STM32 开发环境配置,该环境使用 CMake 作为构建系统,OpenOCD 作为调试和下载工具,以及 Ninja 作为构建工具。这是一套专业的嵌入式开发环境,特别适用于 STM32F103 系列微控制器的开发,同时集成了自研的 HTOS 轻量级实时操作系统。

2. VS Code 配置文件详解

在这套开发环境中,.vscode 目录下有三个关键的 JSON 配置文件,它们定义了如何在 VS Code 中构建和调试 STM32 项目。下面将详细介绍这些配置文件。

2.1 launch.json - 调试配置

launch.json 文件定义了如何在 VS Code 中调试 STM32 项目:

{"version": "0.2.0","configurations": [{"name": "Cortex Debug","type": "cortex-debug","request": "launch","servertype": "openocd","cwd": "${workspaceRoot}","executable": "${workspaceRoot}/build/Debug/test.elf","device": "STM32F103C8T6","configFiles": ["${workspaceRoot}/apm32_openocd.cfg"],"svdFile": "${workspaceRoot}/STM32F103xx.svd","runToEntryPoint": "main","preLaunchTask": "build","env": {"LC_ALL": "C"}}]
}

这个配置的主要元素:

  • 调试器类型:使用 cortex-debug 插件,这是一个专为 ARM Cortex 芯片调试设计的 VS Code 扩展
  • 硬件类型:配置为 STM32F103C8T6 芯片
  • 可执行文件路径:指向 test.elf
  • OpenOCD 配置:使用 apm32_openocd.cfg 文件(哈哈哈)
  • SVD 文件:使用 STM32F103xx.svd 文件,提供寄存器级别的调试信息
  • 入口点:设置为 main 函数
  • 预启动任务:在调试前先执行 build 任务确保代码已编译

2.2 tasks.json - 任务配置

tasks.json 文件定义了可在 VS Code 中执行的任务:

{"version": "2.0.0","tasks": [{"label": "build","type": "shell","command": "cd ${workspaceFolder}/build/Debug; ninja","group": {"kind": "build","isDefault": true},"problemMatcher": ["$gcc"]},{"label": "download","type": "shell","command": "openocd -f ${workspaceFolder}/openocd.cfg -c \"program ${workspaceFolder}/build/Debug/test.elf verify reset exit\"","dependsOn": "build","problemMatcher": []},{"label": "download-apm32","type": "shell","options": {"shell": {"executable": "cmd.exe","args": ["/c"]}},"command": "openocd -f \"${workspaceFolder}/apm32_openocd.cfg\" -c \"program_apm32\"","dependsOn": "build","problemMatcher": [],"group": "build"},{"label": "debug","type": "shell","options": {"shell": {"executable": "cmd.exe","args": ["/c"]}},"command": "openocd -f \"${workspaceFolder}/apm32_openocd.cfg\"","dependsOn": "build","problemMatcher": [],"isBackground": true,"presentation": {"reveal": "always","panel": "new"}}]
}

主要任务包括:

  1. build:使用 Ninja 构建系统编译项目
  2. download:使用标准 OpenOCD 配置将程序下载到 STM32 芯片
  3. download-apm32:使用特殊的 APM32 配置将程序下载到芯片
  4. debug:启动 OpenOCD 服务器用于调试,这是一个后台任务

2.3 settings.json - VS Code 设置

settings.json 文件包含了 VS Code 的自定义设置:

{"VsCodeTaskButtons.showCounter": true,"VsCodeTaskButtons.tasks": [{"label": "$(tools) 编译","task": "build","tooltip": "编译STM32项目"},{"label": "$(cloud-download) 下载-APM32","task": "download-apm32","tooltip": "编译并下载程序到APM32"},]
}

这个配置使用了 “VsCodeTaskButtons” 扩展,它在 VS Code 界面上添加按钮,方便一键执行常用任务:

  • 一个编译按钮,执行 build 任务
  • 一个下载按钮,执行 download-apm32 任务

3. 调试方法详解

3.1 调试工具链

该项目使用以下调试工具链:

  1. VS Code + Cortex-Debug 扩展:提供 IDE 界面和调试 UI
  2. OpenOCD:提供与调试器硬件的通信
  3. SVD 文件:提供芯片寄存器级别的详细信息,增强调试体验

3.2 调试步骤

在该环境中调试 STM32 项目的步骤:

  1. 编译项目

    • 点击 VS Code 界面上的 “编译” 按钮,或
    • 按下 Ctrl+Shift+B 运行默认构建任务,或
    • 在命令面板中执行 “Tasks: Run Build Task”
  2. 下载程序

    • 点击 VS Code 界面上的 “下载-APM32” 按钮,或
    • 从命令面板中运行 “Tasks: Run Task” 然后选择 “download-apm32”
  3. 启动调试

    • 按下 F5 或点击侧边栏的调试图标,然后点击 “开始调试”
    • VS Code 会自动执行 build 任务,然后启动 OpenOCD 连接目标设备
    • 程序会停在 main 函数入口点
  4. 调试操作

    • 设置断点:点击代码行号左侧
    • 单步执行:F10(逐过程)、F11(逐语句)
    • 查看变量:调试面板中的 “变量” 视图或将鼠标悬停在代码上
    • 查看寄存器:Cortex-Debug 提供的 “寄存器” 视图
    • 查看内存:运行 “Cortex-Debug: View Memory” 命令

3.3 硬件故障调试

该环境特别配置了硬件故障触发和处理机制。在 main.c 中的 task4Function 函数专门设计用来触发硬件故障:

if(counter == 5) {/* 在计数到5时触发硬件故障 */printf("Task4: Trying to trigger hardware fault...\r\n");//HAL_Delay(500); /* 等待消息输出完成 *//* 两种触发硬件故障的方式: *//* 方式1: 访问非法地址 */volatile uint32_t *invalid_ptr = (uint32_t *)0xCCCCCCCC;*invalid_ptr = 0x12345678;  /* 这会触发硬件故障 *//* 方式2: 除零操作 (注释掉,以便上面的方式生效) *//* volatile uint32_t a = 10;volatile uint32_t b = 0;volatile uint32_t c = a / b; /* 这会触发硬件故障 *//* (void)c; /* 避免未使用变量的警告 */
}

通过调试这段代码,可以观察系统如何响应硬件故障,这对测试 HTOS 操作系统的异常处理能力非常有价值。在调试时,可以观察:

  1. 触发硬件故障时的 CPU 寄存器状态
  2. 硬件故障处理程序的执行流程
  3. 系统如何恢复或重置

这个东西的话,其实如果可以在线调试的话倒是没什么用。但是对于无法在线调试的情况下就很有用了,而且整个环境是基于完全开源的场景的,所以可以把代码下载到任何芯片上。任何架构都可以。

4. CMake 构建系统

该项目使用 CMake 作为构建系统,主要配置文件包括:

  • CMakeLists.txt:定义项目的构建规则
  • CMakePresets.json:定义不同的构建预设
  • cmake/gcc-arm-none-eabi.cmake:配置 ARM 交叉编译器的设置

CMake 在项目中的作用:

  1. 自动查找和配置工具链
  2. 定义构建目标和依赖关系
  3. 生成 Ninja 构建文件
  4. 简化交叉编译配置

5. OpenOCD 配置

项目使用了两个 OpenOCD 配置文件:

  • openocd.cfg:标准 STM32 配置
  • apm32_openocd.cfg:针对 APM32 芯片或特定调试器的自定义配置

这些文件定义了:

  1. 调试适配器类型和配置(如 ST-Link)
  2. 目标芯片的配置
  3. 特殊的下载和调试命令

这个下面是用cortex-debug这个插件调试的情况。当然对于RISC-V这种没有插件的应该也可以用OpenOCD的GDB服务器调试。
在这里插入图片描述
如上图可以完全进行在线调试,个人认为调试很方便。另外就是这个debug插件似乎支持一些实时内核,我这个是自己写的内核所以应该不支持,之后可以尝试一些移植来试试。

6. 项目结构

该项目的结构是典型的 STM32CubeMX 生成的项目,增加了 HTOS 操作系统组件:

  • Core/: 包含应用程序代码
    • Inc/: 头文件
    • Src/: 源文件,包括 main.c
  • Drivers/: STM32 HAL 库和 CMSIS 代码
  • HTOS/: 自定义操作系统代码
    • include/: HTOS 头文件
    • kernel/: HTOS 内核实现
    • portable/: 移植层代码
  • build/: 构建输出目录

7. 使用技巧与最佳实践

7.1 高效调试技巧

  1. 断点策略

    • 设置条件断点可以在特定条件满足时才停止
    • 使用日志断点可以在不停止执行的情况下打印信息
  2. 硬件异常分析

    • 设置中断向量表断点来捕获所有异常
    • 使用 SVD 文件查看外设寄存器状态
    • 检查故障状态寄存器了解异常原因
  3. 内存优化

    • 使用内存视图监控栈/堆使用情况
    • 监控 HTOS 任务栈使用情况防止溢出

7.2 常见问题解决

  1. OpenOCD 连接问题

    • 检查 USB 线缆质量
    • 确认 ST-Link 固件是最新版本
    • 尝试降低 SWD 时钟频率
  2. 构建错误

    • 检查工具链路径配置
    • 确认 CMake 和 Ninja 版本兼容
    • 查看详细构建日志
  3. 调试卡死

    • 检查是否进入了无限循环
    • 查看是否触发了硬件故障但没有正确处理
    • 检查硬件连接和供电情况

结语

这套 VSCode + CMake + OpenOCD + Ninja 的开发环境构成了一个功能强大、灵活且高效的 STM32 开发平台。通过本文介绍的 VS Code 配置文件和调试技术,可以充分利用现代工具链的优势,提高嵌入式开发效率。特别是硬件故障调试功能,对于开发可靠的嵌入式系统尤为重要。

希望这篇文章能够帮助开发者更好地理解和使用这套开发环境,构建出更稳定、高效的嵌入式系统!


注:本文中介绍的开发环境和方法可能需要根据具体项目和硬件进行调整,以适应不同的开发需求。


文章转载自:

http://ZM0H7hH0.hqpyt.cn
http://7jNXhevU.hqpyt.cn
http://lcmYn7eR.hqpyt.cn
http://Xb8N3Fy5.hqpyt.cn
http://qD82wmdA.hqpyt.cn
http://1P2vwdIg.hqpyt.cn
http://SF9etj2u.hqpyt.cn
http://u0vX92oN.hqpyt.cn
http://SgS2GRiS.hqpyt.cn
http://umW8EQAa.hqpyt.cn
http://w2pD4EOc.hqpyt.cn
http://fyTC9MKC.hqpyt.cn
http://CMBdf3gq.hqpyt.cn
http://3zugeDlk.hqpyt.cn
http://gdz1zYOl.hqpyt.cn
http://g2a2gaD8.hqpyt.cn
http://IoEwTeue.hqpyt.cn
http://zKftd2eG.hqpyt.cn
http://iL71fBCB.hqpyt.cn
http://XmDM9V9Q.hqpyt.cn
http://3dTNiLmy.hqpyt.cn
http://QMBASCwN.hqpyt.cn
http://ECdr2WgL.hqpyt.cn
http://CINBU061.hqpyt.cn
http://pxchnNV4.hqpyt.cn
http://BpfgWxcO.hqpyt.cn
http://Egz79HYy.hqpyt.cn
http://nT0yinM2.hqpyt.cn
http://GE9bbet3.hqpyt.cn
http://tmIAz3Xb.hqpyt.cn
http://www.dtcms.com/wzjs/682779.html

相关文章:

  • 彭水网站建设推广简单网页制作图片
  • 郑州seo网站推广重庆发布微信公众号
  • 张家港做英文网站网站开发是网站后台开发吗
  • 怎么样做问卷网站企业型网站网址
  • 建设酒店网站ppt模板购物节优惠卷网站怎么做
  • 微信开发网站苏州网站建设招聘
  • 郑州汉狮做网站多少钱微信小程序开发费用一览表
  • 龙华做棋牌网站建设多少钱创意产品
  • 移动网站视频主持人网石家庄科技网站
  • 西安网站seo 优帮云wordpress swf
  • 网站自己做服务器如何做网站毕业设计
  • 国内扁平化网站欣赏c# 网站开发实例教程
  • 诀窍的网站织梦资源下载站网站模板
  • 电子商务网站建设有哪些流程图wordpress建什么站
  • 网站开发任务需求书阀门行业网站怎么做
  • 温州本地网站淘客wordpress数据
  • 高校二级网站建设方案游戏网站建设需要多少钱
  • 揭阳装修网站建设越城网站建设公司
  • 建设银行信用卡网站显示余额开启wordpress多站点
  • 怎样申请做自己的网站电子书网站用dz还是wordpress
  • 网站设计流程大致分为几个阶段做外贸哪些网站比较好
  • 优秀的个人博客网站北京网站开发教师招聘
  • asp.net网站设计网站设计的概述
  • 免费网站免费进入在线关注公众号一单一结兼职
  • 织梦做的网站打包在dw修改国内全屋定制十大名牌
  • 网站建设南通简历模板个人简历电子版免费可编辑
  • 外链 网站权重如何网上免费打广告
  • mc做图的网站wordpress更换style
  • 山东网站建设代理网站定制公司哪家好
  • 国家住房和城乡建设局网站html5旅游网站模板