PN学堂GD32教程第8篇——RTC

本章代码仓库:

bash 复制代码
git clone https://gitee.com/jumayusi/unit8-gd32-rtc.git

8.1 如何实现时间戳和日历之间的转换

RTC基本硬件结构

外设结构框图,与STM32F103系列一样,GD32F303没有影子寄存器,想要实现万年历功能只能通过软件转换。

Unix时间戳

C标准库的time.h中,提供了日历时间和时间戳相互转换的相关函数:

我们主要会用第三和第四个函数。

time_t是对uint32_t的重定义,tm的定义如下:

C语言回顾:

8.2 使用指针函数的注意事项

本节课讨论的要点是如何在指针函数中返回一个有效的内存地址给其他函数去使用。

cpp 复制代码
struct tm *Test(void)
{
  return (struct tm *)malloc(sizeof(struct tm));
}
    

struct tm *timeInfo=NULL;

timeInfo=Test();
printf("address of timeInfo is 0x%p\r\n",timeInfo);

timeInfo=Test();
printf("address of timeInfo is 0x%p\r\n",timeInfo);

思考上面两次打印的结果是否一致?答案肯定是不一致的。每次调用malloc函数时,堆管理器(Heap Manager)都会从系统的动态内存堆中分配一块新的、独立的内存空间。

cpp 复制代码
    timeInfo=gmtime(&timeStamp);
    printf("address of timeInfo is 0x%p\r\n",timeInfo);

    timeInfo=gmtime(&timeStamp);
    printf("address of timeInfo is 0x%p\r\n",timeInfo);

对比gmtime函数的输出结果可知,gmtime内部使用了静态全局变量。

8.3 RTC和BKP硬件结构

相关推荐
superxxd5 小时前
基于rust的多平台原生GIS引擎
人工智能·物联网·实时音视频
hz567891 天前
手术室视频示教系统解决方案:让临床教学突破空间限制
安全·音视频·实时音视频·信息与通信·智能硬件
可乐鸡翅yeah_1 天前
M3U8 测试用例库建设,流媒体团队测试资产沉淀与回归体系搭建
音视频·实时音视频·m3u8·m3u8在线播放·音视频在线播放
Htojk3 天前
电视 / 电台新闻监听平台:端到端流程技术调研
数据分析·实时音视频
中视会议3 天前
实时音视频 + AI Agent,打造新一代远程运维系统
实时音视频·智能巡检·实时远程运维·远程专家协作·asr语音识别
hz567893 天前
音频视频sdk开发实践:从实时通话到视频互动的完整方案
音视频·实时音视频·信息与通信
海水冷却3 天前
H5 移动端如何实现视频聊天功能
实时音视频
hz567893 天前
视频会议私有化部署指南:架构、成本与实施流程详解
安全·音视频·实时音视频·信息与通信
YWamy5 天前
政企项目 RTC SDK 评估思路:从技术指标到落地选型
音视频·实时音视频
hz567896 天前
音视频 SDK在行政执法的应用方案:实现执法全过程音视频留痕
安全·实时音视频·信息与通信