[utest][pwm] Add configurable PWM matrix test - #11754
Conversation
📌 Code Review Assignment🏷️ Tag: componentsReviewers: @Maihuanyi Changed Files (Click to expand)
📊 Current Review Status (Last Updated: 2026-08-28 15:03 CST)
📝 Review Instructions
|
|
👋 感谢您对 RT-Thread 的贡献!Thank you for your contribution to RT-Thread! 为确保代码符合 RT-Thread 的编码规范,请在你的仓库中执行以下步骤运行代码格式化工作流(如果格式化CI运行失败)。 🛠 操作步骤 | Steps
完成后,提交将自动更新至 如有问题欢迎联系我们,再次感谢您的贡献!💐 |
|
| rt_size_t index; | ||
|
|
||
| pwm_tc_active_count = 0; | ||
| if (PWM_TC_GROUP_COUNT == 0) |
There was a problem hiding this comment.
pwm_tc_stop_active_channels() 在关闭失败时刻意保留 pwm_tc_active_count,但下次运行时 utest_tc_init() 直接将其清零。连续运行测试时,残留输出将永远无法再被 cleanup 跟踪和关闭。
| "components.drivers.pwm.configuration_matrix", | ||
| utest_tc_init, | ||
| utest_tc_cleanup, | ||
| RT_PWM_TC_TIMEOUT); |
There was a problem hiding this comment.
RT_PWM_TC_TIMEOUT 实际不生效。它只被写入 UTEST_TC_EXPORT;当前 UTest 执行器仅显示 run_timeout,不会据此中止测试。因此将超时设为 1 秒时,默认 3 秒矩阵仍会完整运行,配置项与说明不符。
| { | ||
| rt_tick_t tick; | ||
|
|
||
| tick = rt_tick_from_millisecond(millisecond); |
There was a problem hiding this comment.
毫秒值由 rt_uint32_t 隐式传给接受 rt_int32_t 的 rt_tick_from_millisecond()。大于 INT32_MAX 的组时长或步进间隔会被解释成负值并转换成 RT_WAITING_FOREVER,可能让输出长期保持开启。
拉取/合并请求描述:(PR description)
[
为什么提交这份PR (why to submit this PR)
现有 PWM utest 缺少可复用的多通道、分组和频率/占空比变化验证能力,难以覆盖固定输出与动态输出组合,也无法按通道独立控制是否参与测试。新增可配置的 PWM 矩阵测试,为不同 BSP 提供统一的 PWM 功能回归入口。
你的解决方案是什么 (what is your solution)
新增 PWM utest 及其 Kconfig/SCons 集成。测试按组顺序执行,同一组内启用的通道并发运行;每个通道可以独立选择设备名、通道号、是否启用、波形点表、更新间隔和读回容差,并在设置后可通过
PWM_CMD_GET进行可选的周期/脉宽校验。components/drivers/misc/utest/pwm_tc_config.h是默认配置入口,主要配置方式如下:PWM_TC_CFG_CHANNEL_<n>_ENABLED:选择通道是否启动。默认只启用通道 1,其他示例通道关闭。PWM_TC_CFG_CHANNEL_<n>_DEVICE_NAME和PWM_TC_CFG_CHANNEL_<n>_NUMBER:配置 PWM 设备名和硬件通道号。PWM_TC_CFG_CHANNEL_<n>_READBACK_TOLERANCE:配置读回周期/脉宽容差,单位为万分比;设置为0时关闭读回校验。PWM_TC_POINT_PERCENT(frequency, duty):用 Hz 和百分比定义频率/占空比点;也可用PWM_TC_POINT直接使用万分比占空比。PWM_TC_MODE_FIXED:固定单个频率和占空比;PWM_TC_MODE_SWEEP_ONCE:按点表变化一次并保持最后一点;PWM_TC_MODE_SWEEP_LOOP:按点表循环变化。PWM_TC_CHANNEL_CONFIG:为每个通道选择模式、点表和步进间隔;每个通道可以使用不同配置。PWM_TC_CFG_GROUP_<n>_DURATION_MS和PWM_TC_GROUPS:配置每组运行时长和组执行顺序。新增通道时,在通道配置数组中增加对应条目,并确保RT_PWM_TC_MAX_CHANNELS足够。Kconfig 还提供
RT_UTEST_PWM、RT_PWM_TC_CONFIG_FILE、RT_PWM_TC_MAX_CHANNELS和RT_PWM_TC_TIMEOUT,分别用于启用测试、替换配置头文件、限制单组并发通道数和设置测试超时。请提供验证的bsp和config (provide the config and bsp)
]
当前拉取/合并请求的状态 Intent for your PR
必须选择一项 Choose one (Mandatory):
代码质量 Code Quality:
我在这个拉取/合并请求中已经考虑了 As part of this pull request, I've considered the following:
#if 0代码,不包含已经被注释了的代码 All redundant code is removed and cleaned up