请选择 进入手机版 | 继续访问电脑版

前馈科技

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 554|回复: 0

STM32的WFI指令导致OpenOCD出错问题

[复制链接]

97

主题

97

帖子

539

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
539
发表于 2021-12-26 17:31:58 | 显示全部楼层 |阅读模式
近日通过OpenOCD调试NuttX,发现一个诡异问题,通过OpenOCD烧写NUTTX至STM32的Flash中,NuttX运行起来之后Openocd通信就出错了:
WFI3.png
怀疑过STM32F405器件,也怀疑过STLink硬件或驱动,但通过以下实验均排除了:
1: 使用STlink V2烧写NuttX至STM32F405RGT6,存在问题;
2: 使用b-g431b-esc1集成的基于STM32F03的ST-Link烧写NuttX至STM32G31存在同样的问题.
在网上搜索,有人遇到过类似问题,并给了解决方案:


Error: jtag status contains invalid mode value – communication failure = SOLVED!

WFI2.png
但NuttX那么大,到底有没有类似指令呢?在NuttX的issue中搜索也没找到答案,不得已,采用Code::Blocks单步调试NuttX,费了九牛二虎之力,终于定位到IDLE任务,它调用了stm32的idle函数:
WFI.png
#if !(defined(CONFIG_DEBUG_SYMBOLS) && defined(CONFIG_STM32_DISABLE_IDLE_SLEEP_DURING_DEBUG))
即:没使能CONFIG_DEBUG_SYMBOLS或没使能CONFIG_STM32_DISABLE_IDLE_SLEEP_DURING_DEBUG 则NuttX在空闲时就会调用WFI指令使STM32内核进入睡眠态以便省电.
由于CONFIG_DEBUG_SYMBOLS已经使能,只需再使能CONFIG_STM32_DISABLE_IDLE_SLEEP_DURING_DEBUG即可关闭WFI指令:

WFI4.png
在System Type中选中Disable IDLE Sleep (WFI) in debug mode ,重新编译后问题解决


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|计算机控制

GMT+8, 2024-3-29 22:28 , Processed in 0.054053 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表