完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
ulog保存日志文件,如何在掉电时把缓存区内容保存起来? 原因 打印ULOG日志文件时发现,有些日志文件被截断 分析发现可能为掉电时,有部分数据还是缓冲区内,缓冲区没满不会把当前缓冲区内容保存至文件中。 这就导致掉电时的数据不正常或者被截断。 正常运行时,使用“cat”命令查看文件 发现文件末尾的日志缺失的,原因和上述一样。缓冲区没满,没有把当前数据保存起来 如何解决 1.如何判断掉电? ULOG组件有这部分功能吗? 没有的话,如何判断掉电?RTT有相关驱动吗? 2.掉电的时候,时间足够保存文件吗? 硬件上是否要加入电容? 缓冲区改小点? |
|
相关推荐
3个回答
|
|
用的什么文件系统?fatfs是不支持掉电保护的,littlefs是支持掉电保护的。 ulog是没有掉电保护的,可以使用 STM32 的 PVD 机制来进行掉电检测,检测到电压低于一定值的时候就刷缓冲区把日志写入到文件系统中。如果使用 PVD 机制进行掉电检测硬件上最好加一个大电容(超级电容),这样掉电的过程会慢一些,检测到掉电之后可以做的事情多一些。 可以测试一下 PVD 的功能,看看不加电容时能做多少事情。 比如设置等级为 3.1V,电源电压低于 3.1V 时会产生一个中断,在中断里面就把系统调度关了,只执行保存缓冲区日志的工作。 |
|
|
|
我尝试直接在PVD中断中刷新缓冲区,即存入数据到FLASH中。 这样的操作会直接断言失败,不可在中断中使用互斥量。 然后我尝试单独开个0优先级线程阻塞等待PVD中断发出信号 在线程内进行刷新缓冲区 这样测得150us左右线程开始运行。 但是没办法完成整个数据的保存 刷新缓冲区的操作测得最慢需要200ms时间。 我想问一下 PVD中断发送信号量,在外部开启线程触发这种模式是否合理?我这保存需要200ms的话,大电容需要多少?这个电路如何实现?实现这个电路后是否在开机时也会延时上电? |
|
|
|
1 我觉得可以直接在 PVD 的中断处理函数里面操作,反正已经检测到掉电了,那就是到了处理紧急事情的情况了,就不要发送信号量然后由其他线程来处理了,这样会浪费一点时间。直接在中断处理函数中把调度器关了,就执行你的紧急处理代码就行。
2 大电容我也不清楚要多大,不是专门做硬件的,电路大概就是直接并联在VCC和GND之间就行。 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
764 浏览 0 评论
3847 浏览 0 评论
如何使用python调起UDE STK5.2进行下载自动化下载呢?
2479 浏览 0 评论
开启全新AI时代 智能嵌入式系统快速发展——“第六届国产嵌入式操作系统技术与产业发展论坛”圆满结束
2901 浏览 0 评论
获奖公布!2024 RT-Thread全球巡回线下培训火热来袭!报名提问有奖!
31185 浏览 11 评论
72814 浏览 21 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-20 09:24 , Processed in 0.745688 second(s), Total 77, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号