[活动专区] 手机验证码功能1----移植过程与代码讲解--RTC与RTT

[复制链接]
 楼主| candao2 发表于 2023-4-4 10:24 | 显示全部楼层 |阅读模式
本帖最后由 candao2 于 2023-7-28 10:32 编辑

#申请原创#
概述
         本篇从本地RTCRTT日志输出开始,因为验证码的计算严格依赖于时间,而整个项目运行过程和结果都需要RTT日志来显示,为了将运行过程显示的更加精确,包括每一条通信指令的发出和完成时间,所以我将在每一条输出的RTT日志上打上时间戳。有了功能强大的日志输出功能,你会发现,在项目开发,测试,生产,问题产品返厂分析等各个流程发挥重要作用。
         项目目录结构如下:firmware目录是国民的固件库文件,SNTP是我项目文件
                  image1.png             
   下图是SNTP目录下的文件,ConfigRTT是直接从J-Link复制过来的目录,sntp是存放sntp协议文件,totp存放算出验证码的文件,incsrc存放RTCLPUART,按键配置,以及主程序的代码源文件和头文件。
         开发环境:Keil5.30 ,国民N32G43XCL-STB 串口连接 NB-IOT模块
image2.png


RTC的工作
         src目录下新建源文件rtc.c 存放RTC的驱动配置和所有有关时间操作的代码。

    SDK例程中的以下函数都复制到rtc.c,在这里我把这些函数都封装在了RTC_init函数中,这样直接在主函数中调用RTC_init就可以了。
image3.png

    为了便于观察设置RTC默认时间是否成功,因为SDK例程中已经加入了串口的log显示,所以我把log.c,log.h文件也加入到工程中,并在RTC_init函数的第一行加入log_init();另外要在rtc.c顶部包含log.h
         串口就是默认PA9TX, 如下图:我设置的日期是2023-01-12时间是4:22:30,记住这个时间,因为在RTC初始化成功之后RTT输出日志上的时间戳就是这个时间。
image4.png


RTT的工作
         RTT日志输出的功能移植到国民mcu上,论坛上已有说明,这里不再多说,主要说我自己对RTT日志输出函数SEGGER_RTT_printf的封装。
         RTT目录中新建asiacom_rtt.h文件,写入以下代码,如下图,用宏定义的方式封装了一个带时间戳日志输出的宏,这个宏增加了__FUNCTION__, __LINE__参数,这样当调用ASIACOM_RTT_LOG时,ASIACOM_RTT_LOG输出日志的同时会自动输出此条日志所在的那个函数和所在行数。
         另外在调用ASIACOM_RTT_LOG时,只需包含asiacom_rtt.h,不用再包含RTT自带的头文件SEGGER_RTT.h,这样就实现了解耦合,即当不想通过RTT输出日志,比如通过串口输出日志,可以直接把SEGGER_RTT_printf替换成log.c文件中的log_info函数,这样就实现了日志输出平台的切换。试想如果没有这层封装,所有直接调用SEGGER_RTT_printf的地方都得替换成log_info,那样修改的地方就会很多,很不安全。
image5.png

上图中的get_BEIJING_time_from_rtc()函数是定义在rtc.c中,
如下图,就是读取RTC时间,组装成一个字符串放在参数time指定的数组中
image6.png

         下面我在3个地方加入ASIACOM_RTT_LOG("iam here......");如下图

   image7.png image8.png
         一切就绪,下面是看看输出效果的时候了,打开J-Link RTT Viewer ,在开发板上连接J-Link,烧录编译的固件,可以看到3log分别在哪个函数中,分别在哪一行,前面2log是在rtc初始化之前,所以时间戳是2000-01-01T00::00:00: main函数 114行的log是在rtc初始化之后,所以是rtc默认的时间。


image9.png

pixhw 发表于 2023-4-8 22:24 | 显示全部楼层
RT-thead的程序吗?              
mmbs 发表于 2023-4-9 16:00 | 显示全部楼层
RTC与RTT这个有什么关系的              
qcliu 发表于 2023-5-4 15:14 | 显示全部楼层
rtt的文件夹需要人工添加还是工程自动生成呢
drer 发表于 2023-5-4 16:16 | 显示全部楼层
请问添加ASIACOM_RTT_LOG的位置有讲究吗
coshi 发表于 2023-5-4 16:24 | 显示全部楼层
drer 发表于 2023-5-4 16:16
请问添加ASIACOM_RTT_LOG的位置有讲究吗

这个应该没有  只是为了印证一下功能而已
tpgf 发表于 2023-5-4 16:50 | 显示全部楼层
这种有一定时间范围容错的是不是对rtc的精度要求就很低了啊
chenqianqian 发表于 2023-5-4 20:20 来自手机 | 显示全部楼层
讲解详细,不过和手机验证码有啥关系。
kxsi 发表于 2023-5-5 07:59 | 显示全部楼层
RTT日志上打的时间戳是完全严格符合实际的时间吗
wiba 发表于 2023-5-5 09:48 | 显示全部楼层
kxsi 发表于 2023-5-5 07:59
RTT日志上打的时间戳是完全严格符合实际的时间吗

不知道是发送数据前的时间戳还是发送完的时间戳
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

5

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部

5

主题

5

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部