RT-Thread论坛
直播中

幽默

10年用户 887经验值
擅长:362163
私信 关注
[问答]

RTC出现3处警告rt_rtc_ops stm32_rtc_ops怎么解决?

1.新版drv_rtc框架,有3处警告;
STM32_rtc_get_secs,stm32_rtc_set_secs, stm32_rtc_get_timeval
警告如下:
initialization from incompatible pointer type [-Wincompatible-pointer-types]    drv_rtc.c
经检查
函数原型static rt_err_t stm32_rtc_get_timeval(void [i]args)
改成static rt_err_t stm32_rtc_get_timeval(struct timeval args)
就可以了;希望开发者再接再厉;

回帖(1)

张国厚

2025-10-9 17:29:47

针对RTC驱动中出现3处警告的问题,原因是函数指针类型不兼容。以下是详细解决方案:


问题原因


新版drv_rtc框架要求rt_rtc_ops结构体中的函数指针具有特定参数类型,而当前实现的函数参数类型不匹配:


// 旧版错误定义(引发警告)
static rt_err_t stm32_rtc_get_secs(void *args);
static rt_err_t stm32_rtc_set_secs(void *args);
static rt_err_t stm32_rtc_get_timeval(void *args);  // 您已修复此函数

完整解决方案


修改drv_rtc.c中的三个函数定义及调用方式:



  1. 修正函数声明和参数类型

    // 修改函数参数为具体类型指针
    static rt_err_t stm32_rtc_get_secs(rt_time_t *sec)
    {
    *sec = (rt_time_t)(RTC_DateToTimeStamp() / 1000);
    return RT_EOK;
    }


static rt_err_t stm32_rtc_set_secs(rt_time_t sec)
{
// 将秒数转换为日期时间并写入RTC
RTC_TimeStampToDate(
sec * 1000);
return RT_EOK;
}


// 您已修正的部分(保持如下)
static rt_err_t stm32_rtc_get_timeval(struct timeval *tv)
{
uint64_t ns = RTC_DateToTimeStamp();
tv->tv_sec = ns / 1000000000;
tv->tv_usec = (ns % 1000000000) / 1000;
return RT_EOK;
}



2. **检查rt_rtc_ops结构体赋值**
确保结构体成员指向修正后的函数:
```c
static const struct rt_rtc_ops stm32_rtc_ops = {
    .init     = stm32_rtc_init,
    .get_secs = stm32_rtc_get_secs,      // 指向新修正函数
    .set_secs = stm32_rtc_set_secs,      // 指向新修正函数
    .get_timeval = stm32_rtc_get_timeval // 指向您已修正的函数
};

关键修改点































函数名 旧参数类型 新参数类型 作用
stm32_rtc_get_secs void * rt_time_t * 获取秒级时间戳
stm32_rtc_set_secs void * rt_time_t * 设置秒级时间戳
stm32_rtc_get_timeval void * struct timeval * 获取微秒级时间(您已修复)

验证步骤



  1. 编译工程,确认-Wincompatible-pointer-types警告消失

  2. 运行date命令测试RTC时间读取/设置功能

  3. 使用高精度定时器验证get_timeval的微秒级精度



开发者建议:此类问题通常源于RT-Thread驱动框架升级时的接口变更。建议定期同步官方最新驱动实现,并关注rt_rtc_ops结构体的类型定义(位于rt-thread/components/drivers/include/drivers/rtc.h)。



通过以上修改即可彻底解决警告问题,同时确保RTC功能的兼容性和稳定性。

举报

更多回帖

发帖
×
20
完善资料,
赚取积分