打印
[活动专区]

手机验证码功能1----移植过程与代码讲解--RTC与RTT

[复制链接]
723|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 candao2 于 2023-7-28 10:32 编辑

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


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

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

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


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,那样修改的地方就会很多,很不安全。

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

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

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




使用特权

评论回复
沙发
pixhw| | 2023-4-8 22:24 | 只看该作者
RT-thead的程序吗?              

使用特权

评论回复
板凳
mmbs| | 2023-4-9 16:00 | 只看该作者
RTC与RTT这个有什么关系的              

使用特权

评论回复
地板
qcliu| | 2023-5-4 15:14 | 只看该作者
rtt的文件夹需要人工添加还是工程自动生成呢

使用特权

评论回复
5
drer| | 2023-5-4 16:16 | 只看该作者
请问添加ASIACOM_RTT_LOG的位置有讲究吗

使用特权

评论回复
6
coshi| | 2023-5-4 16:24 | 只看该作者
drer 发表于 2023-5-4 16:16
请问添加ASIACOM_RTT_LOG的位置有讲究吗

这个应该没有  只是为了印证一下功能而已

使用特权

评论回复
7
tpgf| | 2023-5-4 16:50 | 只看该作者
这种有一定时间范围容错的是不是对rtc的精度要求就很低了啊

使用特权

评论回复
8
chenqianqian| | 2023-5-4 20:20 | 只看该作者
讲解详细,不过和手机验证码有啥关系。

使用特权

评论回复
9
kxsi| | 2023-5-5 07:59 | 只看该作者
RTT日志上打的时间戳是完全严格符合实际的时间吗

使用特权

评论回复
10
wiba| | 2023-5-5 09:48 | 只看该作者
kxsi 发表于 2023-5-5 07:59
RTT日志上打的时间戳是完全严格符合实际的时间吗

不知道是发送数据前的时间戳还是发送完的时间戳

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

5

帖子

0

粉丝