openocd 怎样能支持FreeRTOS 8.1.2

VSCode搭建STM32开发环境与FreeRTOS集成实战指南 嵌入式实时操作系统是物联网和智能设备开发的核心技术,其基本原理是通过任务调度机制实现多任务并发执行。FreeRTOS作为轻量级开源RTOS,采用抢占式调度算法,为资源受限的嵌入式设备提供可靠的多任务管理能力。在STM32微控制器开发中,集成FreeRTOS能够显著提升系统的实时性和可靠性,广泛应用于工业控制、智能家居和穿戴设备等场景。本文基于VSCode和STM32CubeMX工具链,详细演示如何配置完整的开发环境,实现FreeRTOS任务创建、队列通信等关键功能,帮助开发者掌握现代嵌入式开发流程。通过AR 阅读详情

沉寂了几年了,觉得应该分享些什么了。前段时间用FreeRTOS做了些东西,陆续拿出来给大家拍砖。

应该说本人是Linux的粉丝吧,所以我业余时间分享的经验也多半是应用Linux作为桌面开发平台的。闲话少说,进入正题。

选用FreeRTOS绝对不是应为他的代码是如何的优秀,而是因为他在自由软件社区展现出的很强的生命力。要知道,如果一个自由软件社区足够的活跃,就意味着有更多的爱好者不停的解决和修正他运行的过程中遇到的诸多问题。

由于本人的工作中会采用STM32的CortexM的MCU,所以后续的调试方法会以STM32LDiscovery的开发板为例。

FreeRTOS 发布包中有针对不同平台的移植和实例,要想在Linux主机交叉编译需要选用arm-none-eabi-gcc这样的编译工具链,而选用ST的MCU后一个廉价的ST-Link可以作为调试工具,而STM32LDiscovery的板子上自带就有这样的工具。硬件调试工具提供的下载调试程序的通道,还需要一个能够支持GDB Server的服务程序才能用arm-none-eabi-gdb完成代码的调试。

下面的网站讲述了一个st-link的Linux工具可以支持下载调试你的二进制代码。

http://www.wolinlabs.com/blog/linux.stm32.discovery.gcc.html

我个人比较喜欢openocd,他有自己特有的telnet模式可以对目标板进行各种设置,他在支持标准GDB Server的同时还针对嵌入式系统提供RTOS的支持,很多人不太了解这对调试有何好处。如果用gdb调试Linux下的多线程程序可以用info thread这样的命令观察线程的运行状态,当然可以很容的检查线程栈溢出等情况。

准备资源

下载最新的openocd,系统自带的多半太陈旧,嵌入式系统的发展要比PC更快

git clone git://git.code.sf.net/p/openocd/code  openocd

FreeRTOS 8.1.2

为FreeRTOS 8.1.2打补丁

openocd对FreeRTOS的支持,需要在运行openocd的时候加入configure -rtos auto选项,下面是我修改过的openocd board 脚本文件

# This is an STM32L discovery board with a single STM32L152RBT6 chip.
# http://www.st.com/internet/evalboard/product/250990.jsp

source [find interface/stlink-v2.cfg]

transport select hla_swd

set WORKAREASIZE 0x4000
source [find target/stm32l.cfg]

# use hardware reset, connect under reset
reset_config srst_only srst_nogate

$_TARGETNAME configure -rtos auto

运行的时候只需要如下命令

openocd -f board/stm32ldiscovery.cfg

这时候如果你用arm-none-eabi-gdb通过target remote:3333 load代码的时候,会显示没有检测的RTOS。

网上找了些帖子,都没有解决,大概说明是openocd采用了7.6.2之前版本的一个优先级变量,但是如果你把FreeRTOS换成之前的版本仍旧不能成功检测。

我研究了以下FreeRTOS 8.1.2的代码,发现加回原来的这个全局优先级变量可以解决这个问题,而且只是两条语句对于FreeRTOS优先级调度应该没有什么影响


在task文件中寻找如下行,

PRIVILEGED_DATA static volatile TickType_t xTickCount                 = ( TickType_t ) 0U;

在下面加入这一行

PRIVILEGED_DATA static unsigned portBASE_TYPE uxTopUsedPriority         = tskIDLE_PRIORITY;


在函数xTaskGenericCreate中的如下代码

            uxTaskNumber++;
 
            #if ( configUSE_TRACE_FACILITY == 1 )
            {
                /* Add a counter into the TCB for tracing only. */
                pxNewTCB->uxTCBNumber = uxTaskNumber;
            }
            #endif /* configUSE_TRACE_FACILITY */

的前面加入

            #if ( configUSE_TRACE_FACILITY == 1 )
            if( pxNewTCB->uxPriority > uxTopUsedPriority )
            {
                uxTopUsedPriority = pxNewTCB->uxPriority;
            }
            #endif /* configUSE_TRACE_FACILITY */

重新编译FreeRTOS的实例

(原创文章请著名出处http://blog.youkuaiyun.com/rickleaf)

openocd FreeRTOS 调试

开启gdb server

openocd -f board/stm32ldiscovery.cfg

调试下载代码

arm-none-eabi-gdb stm32l1xx_freertos.elf

load

这时候server端显示如下信息

Open On-Chip Debugger 0.9.0-dev-00186-g30203b3-dirty (2014-11-05-23:00)
Licensed under GNU GPL v2
For bug reports, read
    http://openocd.sourceforge.net/doc/doxygen/bugs.html
adapter speed: 300 kHz
adapter_nsrst_delay: 100
Info : The selected transport took over low-level target control. The results might differ compared to plain JTAG/SWD
srst_only separate srst_nogate srst_open_drain connect_deassert_srst
Info : clock speed 300 kHz
Info : STLINK v2 JTAG v23 API v2 SWIM v0 VID 0x0483 PID 0x3748
Info : using stlink api v2
Info : Target voltage: 2.918068
Info : stm32l.cpu: hardware has 6 breakpoints, 4 watchpoints
Info : accepting 'gdb' connection on tcp/3333
Info : STM32L flash size is 128kb, base address is 0x8000000
undefined debug reason 7 - target needs reset
Info : Auto-detected RTOS: FreeRTOS
adapter speed: 300 kHz
target state: halted
target halted due to debug-request, current mode: Thread
xPSR: 0x01000000 pc: 0x0800021c msp: 0x20004000
STM32L: Enabling HSI
adapter speed: 2000 kHz
Info : Padding image section 0 with 3 bytes
target state: halted
target halted due to breakpoint, current mode: Thread
xPSR: 0x61000000 pc: 0x20000012 msp: 0x20004000
target state: halted
target halted due to breakpoint, current mode: Thread
xPSR: 0x61000000 pc: 0x20000012 msp: 0x20004000
adapter speed: 300 kHz
target state: halted
target halted due to debug-request, current mode: Thread
xPSR: 0x01000000 pc: 0x0800021c msp: 0x20004000

在调试端,通过info thread来查看FreeRTOS的运行状况

GNU gdb (GNU Tools for ARM Embedded Processors) 7.6.0.20140529-cvs
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "--host=i686-linux-gnu --target=arm-none-eabi".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from /home/ricky/workspace/stm32/stm32l1xx_freertos/Debug/stm32l1xx_freertos.elf...done.
(gdb) tar rem:3333
Remote debugging using :3333
0x00000000 in ?? ()
(gdb) load
Loading section .isr_vector, size 0x24c lma 0x8000000
Loading section .text, size 0x3df9 lma 0x800024c
Loading section .data, size 0xa4 lma 0x8004048
Start address 0x800010c, load size 16617
Transfer rate: 4 KB/sec, 5539 bytes/write.
(gdb) c
Continuing.
^C
Program received signal SIGINT, Interrupt.
[Switching to Thread 536872480]
0x08002b78 in prvCheckTasksWaitingTermination ()
    at ../system/src/FreeRTOS/Source/tasks.c:2859
2859            while( uxTasksDeleted > ( UBaseType_t ) 0U )
(gdb) info thread
[New Thread 536871864]
[New Thread 536873328]
[New Thread 536871248]
  Id   Target Id         Frame
  4    Thread 536871248 (LED3) 0x08001b90 in vPortYield ()
    at ../system/src/FreeRTOS/Source/portable/GCC/ARM_CM3/port.c:371
  3    Thread 536873328 (Tmr Svc) 0x08001b90 in vPortYield ()
    at ../system/src/FreeRTOS/Source/portable/GCC/ARM_CM3/port.c:371
  2    Thread 536871864 (LED4) 0x08001b90 in vPortYield ()
    at ../system/src/FreeRTOS/Source/portable/GCC/ARM_CM3/port.c:371
* 1    Thread 536872480 (IDLE :  : Running) 0x08002b78 in prvCheckTasksWaitingTermination () at ../system/src/FreeRTOS/Source/tasks.c:2859
(gdb)


至此我们可以用openocd做一些和FreeRTOS更紧密的调试了。

关于笔者是如何构建stm32的freertos的编译环境的,我会在后面的文章讲述。

(原创文章请著名出处http://blog.youkuaiyun.com/rickleaf)


FreeRTOS 8.1.2任务栈与TCB解析:OpenOCD+GDB多任务调试实战 在嵌入式系统开发中,实时操作系统(RTOS)的任务管理与调试是核心挑战。FreeRTOS作为广泛应用的开源RTOS,其任务控制块(TCB)和栈管理机制决定了多任务调度原理。通过解析TCB中的任务名、栈指针和链表结构,调试器能透视系统全貌。结合OpenOCD的RTOS插件技术,可将内存中的TCB链表映射为GDB的独立线程,实现任务级调试。这为排查死锁、栈溢出等复杂问题提供了关键能力,显著提升基于STM32等MCU的嵌入式项目调试效率。本文以FreeRTOS 8.1.2为例,详解TCB结构解析与OpenOCD适 阅读详情

相关推荐

VSCode+STM32CubeMX开发FreeRTOS:现代化STM32开发环境搭建指南

实时操作系统(RTOS)是嵌入式系统开发中的核心技术概念,它通过任务调度和资源管理实现多任务并发执行。FreeRTOS作为轻量级开源RTOS,采用抢占式调度原理,能够有效提升嵌入式设备的响应效率和处理能力。在STM32微控制器开发中,传统的Keil MDK环境存在界面老旧、代码提示弱等问题,而VSCode与STM32CubeMX的组合提供了现代化解决方案。STM32CubeMX负责硬件抽象层和RTOS的图形化配置,生成标准Makefile项目;VSCode则提供强大的代码编辑和调试能力,特别适合需要集成Fr

cunfuteng7334的博客 458

clion安装与配置(二 - STM32)

CLion安装与配置(STM32)--替换keil

w371584831的博客 3306

VSCode+STM32+FreeRTOS开发实战:从环境配置到多任务调试

嵌入式实时操作系统(RTOS)是嵌入式开发中的核心技术,通过任务调度和资源管理实现多任务并发执行。FreeRTOS作为轻量级开源RTOS,采用抢占式调度算法确保高优先级任务及时响应。在STM32微控制器上集成FreeRTOS能够有效提升系统实时性和资源利用率,特别适用于工业控制、物联网设备等场景。本文基于VSCode+STM32CubeMX工具链,详细演示如何配置ARM GCC编译环境、修改Makefile编译规则,并通过Cortex-Debug插件实现Keil级别的调试体验,最终完成FreeRTOS多任务

weixin_30614109的博客 365

OpenOCD+GDB学习记录(1)

OpenOCD个人学习记录

m0_46882426的博客 2783

VSCode搭建STM32开发环境:从Keil迁移到FreeRTOS集成实战

嵌入式开发中,实时操作系统(RTOS)是提升系统可靠性和多任务处理能力的关键技术。FreeRTOS作为轻量级开源RTOS,通过任务调度、内存管理和中断处理等核心机制,为STM32等微控制器提供稳定的实时性保障。在工程实践中,开发环境的选择直接影响开发效率,传统Keil IDE虽然功能完整但存在性能瓶颈。VSCode凭借其轻量级架构和丰富插件生态,结合ARM GCC工具链,能够实现高效的代码编辑、编译调试和项目管理。通过STM32CubeMX生成基础工程框架,配合Cortex-Debug插件,开发者可以在VS

weixin_34122810的博客 402

STM32F407+freeRTOS + VS Code+git配置教程

本教程介绍了基于STM32F407VET6和FreeRTOS的多任务开发流程。主要内容包括:1. 使用STM32CubeMX配置4个任务(串口透传、跑马灯、Modbus通信、ADC采样);2. 详细说明DMA模式选择(circular/normal)及ADC配置要点;3. FreeRTOS任务堆栈设置建议(最小512字节)及内存管理注意事项;4. 开发环境搭建指南(VSCode插件安装、ST-Link固件升级、CMake配置);5. 调试技巧(printf重定向、内存监控)和编译下载方法。教程提供了完整的配

songmake1987的博客 1053

Ubuntu下openocd配合stlink烧录

allen@allen-To-be-filled-by-O-E-M:~$ openocd -f interface/stlink-v2.cfg -f target/stm32f1x.cfg Open On-Chip Debugger 0.9.0 (2018-01-24-01:05) Licensed under GNU GPL v2 For bug reports, read http://...

weixin_40606111的博客 3972

告别Keil!用VSCode+OpenOCD实现STM32可视化调试(附GD32移植技巧)

本文详细介绍了如何使用VSCode和OpenOCD搭建专业级STM32/GD32开发环境,替代传统Keil IDE。通过配置Cortex-Debug插件和OpenOCD工具链,开发者可以实现可视化调试、多线程调试和实时变量监控等高级功能,特别适合国产GD32芯片开发。文章还提供了GD32移植技巧和性能优化方案,帮助开发者提升工作效率。

pluto的博客 857

OPENOCD入门使用FT2232H适配器进行SWD调试

这是我个人选择去的路线。错误:libusb_open()因LIBUSB_ERROR_ACCESS失败错误:未找到设备错误:无法使用vid 0403,pid 6010,描述'*'和串行'FTZ7O8O0'打开ftdi设备在未经许可的情况下在Linux中运行OpenOCD时,将弹出类似的错误消息。Segger J-LinkULINK芯片供应商将默认调试器嵌入到评估板(如STM32,EFM32和其他MCU系列)中总而言之,如果您没有足够的预算,时间或耐心,使用FT2232H的OpenOCD将是您的最佳选择。

zya1314125的博客 5241

VSCode搭建STM32开发环境:替代Keil集成FreeRTOS实战指南

嵌入式系统开发中,实时操作系统(RTOS)是实现多任务管理的核心技术,FreeRTOS作为轻量级开源RTOS,通过任务调度和资源管理原理,为STM32等微控制器提供可靠的多任务支持。在工程实践中,开发环境的选择直接影响开发效率,传统Keil MDK虽然功能完善但存在许可证限制。VSCode作为现代化代码编辑器,结合ARM GCC工具链和STM32CubeMX配置工具,能够构建完整的免费开发环境。这种方案特别适合需要集成FreeRTOS的STM32项目开发,通过智能代码提示、语法高亮和调试集成,为开发者提供更

chunqingtai2922的博客 397

嵌入式裸机到FreeRTOS实战:GCC+OpenOCD+VSCode全链路开发指南

嵌入式开发的核心在于掌握从硬件初始化到实时任务调度的完整技术闭环。理解ARM Cortex-M启动流程、链接脚本内存布局与向量表重映射,是构建可靠系统的底层原理基础;而FreeRTOS的移植关键不在API调用,而在中断响应机制、堆内存配置与任务栈边界控制等硬性约束。结合GCC工具链、OpenOCD烧录调试与VSCode+Cortex-Debug实现透明化RTOS多任务观测,显著提升问题定位效率。该路径广泛适用于STM32/GD32等主流MCU平台,支撑工业控制、传感器节点及轻量GUI(如LVGL)等典型嵌入

weixin_29184371的博客 203

RISC-V/ARM mcu OpenOCD 调试架构解析

PC端可以是GDB编译调试端或者是一个集成的IDE开发环境,它包含了一个OpenOCD的驱动,这个驱动是根据具体芯片有所差别的,OpenOCD提供了一系列调试的接口,芯片厂生产的芯片要支持OpenOCD就需要做自己家的驱动软件,还有一部分的配置文件(xx.cfg)是用来在上层配置具体芯片型号和调试器硬件类型以及flash编程信息的。risc-v根据官方的推荐,调试器服务是选择OpenOCD,DopenOCD(开放片上调试器)是一个开源的片上调试器,旨在提供针对嵌入式设备的调试、系统编程和边界扫描功能。

qq_25502401的博客 3707

深入分析大众点评 Ajax 接口:直接请求 JSON 数据高效获取评论

大众点评网站采用前后端分离架构,通过Ajax接口动态加载数据。按F12打开开发者工具,切换到Network(网络)面板。实际环境中,我们需要使用Python重现这一加密逻辑。查看请求响应,寻找包含评论数据的JSON接口。参数是大众点评的反爬机制核心,需要特别处理。:尊重网站的robots.txt文件规定。:仅将数据用于合法合规的研究和分析目的。:不侵犯大众点评的商业秘密和知识产权。打开大众点评网站,进入任意商户页面。:对采集到的用户信息进行脱敏处理。:避免对目标网站造成过大负担。

Z_suger7的博客 1581

openocd 如何支持FreeRTOS 8.1.2

沉寂了数年,认为我们应该分享一下。前段时间通过FreeRTOS做点什么,大家纷纷拿出来拍砖。 我应该说,Linux现在粉丝。所以,我的业余时间来分享它通常应用的经验Linux作为桌面开发平台。无需再费周折。进入专题。 选择FreeRTOS对不是应为他的代码是怎样的优秀,而是由于他在自由软件社区展现出的非常强的生命力。要知道。假设一个自由软件社区足够的活跃,就意味着有很多其它的爱好者不停...

weixin_30413739的博客 141

从零开始:EAS2+Elmo+Maxon电机调试全流程(含电流环优化技巧)

本文详细解析了从零开始搭建基于EAS2软件、Elmo驱动器和Maxon电机的运动控制系统的全流程。内容涵盖硬件连接规范、EAS2基础配置、核心的电流环模型辨识与手动优化技巧,以及速度环、位置环的搭建与调试策略,旨在帮助工程师构建稳定、高性能的伺服控制核心。

i0j1k2l3m的博客 502

从理论到实践:全面解析Cmk(设备能力指数)的应用与优化

本文全面解析了设备能力指数Cmk的核心概念、计算逻辑与关键应用场景。Cmk作为衡量设备本身固有加工能力的黄金标准,在设备验收、大修后验证及过程能力根因分析中至关重要。文章通过实战案例,详细阐述了执行Cmk测试的“五大固定”黄金法则、数据计算分析方法,并提供了Cmk不达标时的系统性排查与优化策略,帮助制造企业实现预防性质量管理。

jump7的博客 521

FreeRTOS调试工具集成:J-Link与OpenOCD断点调试配置

嵌入式开发中,实时操作系统(RTOS)的调试复杂度远高于裸机开发。FreeRTOS作为广泛应用的RTOS,其任务调度、中断处理和内存管理的调试需要专业工具支持。J-Link(调试器)和OpenOCD(开源调试工具链)是当前主流的调试方案,本文将详细介绍在FreeRTOS项目中集成这两种工具的断点调试配置方法。 ### 硬件与软件要求 - **调试器**:Segger J-Link或兼容Open

gitblog_00919的博客 888

道岔故障监测系统设计(源码+开题)

通过实时监控道岔的工作状态,系统能够及时发现异常情况,预防潜在的安全隐患,从而减少事故发生的概率。此外,监测系统还能够为维护人员提供详细的数据支持,帮助他们更准确地判断道岔的磨损程度和故障类型,优化维修计划,延长道岔的使用寿命。随着智能化、自动化技术的发展,道岔故障监测系统的设计与应用也将推动铁路行业的技术进步,为实现智能铁路和未来交通系统的构建奠定基础。因此,开展道岔故障监测系统的设计研究,不仅具有重要的工程实践价值,也有助于推动铁路运输行业向更高水平的发展。

灵军程序设计 771

OpenOCD简单教学

是 STM32H7 的标准标识,无需强制覆盖。

ZHY0091的博客 1213

2024高校网络安全管理运维赛题目--复现+题目+wp

官方writeup集思广益比较好的备份。

书山有路勤为径,学海无涯苦作舟 1319

jmeter5.4.1 使用案例

jmeter主要用于接口压力测试,模拟海量请求并发访问接口 1.下载jmeter https://jmeter.apache.org/download_jmeter.cgi 2.启动jemter 双击即可 3.配置jmeter 1.先更改语言 2.创建线程组 配置线程执行规划 3.创建http请求默认值 4.创建http请求 5.创建http信息头管理器 指定 Content-Type:application/json 6.创建响应断言 7.创建察看结果数 直接点击 执行 按.

SpringHASh的博客 1221

ESP32 使用 OpenOCD + SystemView 工具分析 FreeRTOS 多线程操作之间的关系

Table of Contents 1、SystemView 工具概览 2、SEGGER 官网获取 SystemView 工具 3、安装 SystemView 工具 4、从 ESP32 上使用 SystemView 所需要的依赖 5、安装工具 OpenOCD 6、在 ESP32 的 menuconfig 中使能 SystemView 的配置选项 7、运行程序,使用 OpenOCD 获...

神迹降临的博客 4471

2024年软考信息安全工程师备考历年真题汇总

信息安全工程师分属“信息系统”专业,位处中级资格,2016年下半年,第一次开考信息安全工程师(中级)考试。目前每年考试一次。已开考六次,2016年11月12日,2017年5月20日,2018年5月26日,2019年5月25日,2020年11月7日,2021年11月6日为第六次考试。 第五次和第六次考试,采用第二版教材。 2024年软考信息安全工程师备考历年真题汇总

月梦工作室 5101
上一篇: ubuntu 12.04 应用源安装RTEMS 4.11的开发工具
下一篇: MingW Autotools 编写Vala程序 之一
知秋一叶
博客等级 码龄19年 196粉丝 68原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值