Skip to content

修复STM32MCU在不同优化级别使用rt_kprintf函数输出异常的问题#10634

Closed
ItsGettingWorse wants to merge 1 commit into
RT-Thread:masterfrom
ItsGettingWorse:ItsGettingWorse-patch-1
Closed

修复STM32MCU在不同优化级别使用rt_kprintf函数输出异常的问题#10634
ItsGettingWorse wants to merge 1 commit into
RT-Thread:masterfrom
ItsGettingWorse:ItsGettingWorse-patch-1

Conversation

@ItsGettingWorse

@ItsGettingWorse ItsGettingWorse commented Aug 24, 2025

Copy link
Copy Markdown
Contributor

Fixed bugs under different optimization levels

拉取/合并请求描述:(PR description)

[

在使用Keil AC6编译STM32H7xx模版库生成STM32H743VI芯片的对应工程的时候,发现默认的AC6编译条件下生成的msh工作不正常。 逐步逐层逐层查询,发现AC6工程使用armclang默认优化等级为'-O1',AC5工程使用armcc默认优化等级为'-O0',不同的优化等级下编译器优化可能会导致新的问题。

  1. rt_kprintf()
  2. _kputs()
  3. rt_device_write()
  4. 设备写入()
  5. stm32_putc()

发现修改底层函数中,调试状态不正常,15个字符仅处理了第一个字符,与串口现象相符,查看原因是因为UART_FLAG_TC显示完成上述,但寄存器窗口中显示未完成,存在编译器优化问题。
添加数据同步指令后正常.

你的解决方案是什么 (what is your solution)

在对应出错节点添加DSB同步方法.

  1. 未修改前
    输出msh>输出不正常 仅输出"m"
  2. 修改后输出
    msh>输出正常输出"msh>"

请提供验证的bsp和config (provide the config and bsp)

bsp/stm32/stm32h743-armfly-v7

]

当前拉取/合并请求的状态 Intent for your PR

必须选择一项 Choose one (Mandatory):

  • 本拉取/合并请求是一个草稿版本 This PR is for a code-review and is intended to get feedback
  • 本拉取/合并请求是一个成熟版本 This PR is mature, and ready to be integrated into the repo

代码质量 Code Quality:

我在这个拉取/合并请求中已经考虑了 As part of this pull request, I've considered the following:

  • 已经仔细查看过代码改动的对比 Already check the difference between PR and old code
  • 代码风格正确,包括缩进空格,命名及其他风格 Style guide is adhered to, including spacing, naming and other styles
  • 没有垃圾代码,代码尽量精简,不包含#if 0代码,不包含已经被注释了的代码 All redundant code is removed and cleaned up
  • 所有变更均有原因及合理的,并且不会影响到其他软件组件代码或BSP All modifications are justified and not affect other components or BSP
  • 对难懂代码均提供对应的注释 I've commented appropriately where code is tricky
  • 代码是高质量的 Code in this PR is of high quality
  • 已经使用formatting 等源码格式化工具确保格式符合RT-Thread代码规范 This PR complies with RT-Thread code specification
  • 如果是新增bsp, 已经添加ci检查到.github/ALL_BSP_COMPILE.json 详细请参考链接BSP自查

Fixed bugs under different optimization levels
@github-actions github-actions Bot added BSP: STM32 BSP related with ST/STM32 BSP labels Aug 24, 2025
@github-actions

Copy link
Copy Markdown

📌 Code Review Assignment

🏷️ Tag: bsp_stm32

Reviewers: @Liang1795 @hamburger-os @wdfk-prog

Changed Files (Click to expand)
  • bsp/stm32/libraries/HAL_Drivers/drivers/drv_usart.c

📊 Current Review Status (Last Updated: 2025-08-24 15:11 CST)


📝 Review Instructions

  1. 维护者可以通过单击此处来刷新审查状态: 🔄 刷新状态
    Maintainers can refresh the review status by clicking here: 🔄 Refresh Status

  2. 确认审核通过后评论 LGTM/lgtm
    Comment LGTM/lgtm after confirming approval

  3. PR合并前需至少一位维护者确认
    PR must be confirmed by at least one maintainer before merging

ℹ️ 刷新CI状态操作需要具备仓库写入权限。
ℹ️ Refresh CI status operation requires repository Write permission.

@wdfk-prog

Copy link
Copy Markdown
Contributor
  • 不应该是这样子.可能是timeout超时到达后退出了,能否贴出stm32_putc的返回值看看是否超时错误
  • 可能-O1优化处理更快,或者优化将原逻辑修改不正确了.可以贴出-O0-O1的汇编代码来看看

@LittleGreyG

Copy link
Copy Markdown
Contributor

把block_timeout时间给长一点不行么。

@Rbb666 Rbb666 added the -1 No vote label Oct 20, 2025
@ItsGettingWorse

Copy link
Copy Markdown
Contributor Author

这个问题等有时间在看看把, 感觉汇编里面问题可能比较大. 可以反汇编看看这个问题是否解决了, 优化登记上去之后确实输出是有问题的, 这个问题可以在不同的处理器上进行复现.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

-1 No vote BSP: STM32 BSP related with ST/STM32 BSP

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants