硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1263|回复: 7
收起左侧

[技术分享] H7-TOOL 串口记录小程序 Lua分享

[复制链接]

0

主题

2

回帖

7

积分

新手上路

积分
7
QQ
发表于 2024-12-16 22:51:32 | 显示全部楼层 |阅读模式
为了提高系统程序的稳定性,且方便查找程序在长期运行过程中发生报错问题。就需要调试工具长期接入被测设备,通电1,2天,记录设备运行数据,最后电脑记事本ctrl+F查找报错点和报错时间;亦或者用excel导入做图标数据分析等都可以使用本lua小程序。
目前我正使用此小程序用于记录设备上发生的链表剩余可分配空间不足,运行参数检查,通讯丢包等异常查找等非常方便。期待坛友们对此代码一起共同优化。


本文参考了第十二期帖子,并对其进行了优化:
https://www.armbbs.cn/forum.php?mod=viewthread&tid=122322&fromuid=58




1)Serial recording tool.lua 运行此程序用于记录串口日志到emmc
功能说明:
※追加记录方式,重新打开小程序可以继续上次记录点记录
※支持记录串口一和串口二(二选一)
※带时间戳保存

期待功能:
※对RTT记录支持
※对UTF-8编码格式的支持,目前仅支持GB2312 GBK编码

代码:
Serial recording tool.lua (1.62 KB, 下载次数: 9)

[C]
-------------------------------------------------------
--     H7-TOOL 串口日志
-------------------------------------------------------
local str
local len
local offset
local count
local totalstr
local filepath = "0:/H7-TOOL/Lua/串口日志记录/test.csv" -- csv文件记录路径
local reccout
local ret
local key

function printf(...) print(string.format(...)) end
-------------------------------------------------------
--  第2步:选择串口一,并设置串口波特率921600,奇偶校验位无,数据位8,停止位1
-------------------------------------------------------
uart_cfg(1, 921600, 0, 8, 1)

count = 0
offset = 0

fLen,bin = f_read(filepath,0,16*1024)
print("实际长度:",fLen)
print("文件内容")
print(bin)


offset = fLen --在源文本后追加文本
printf("进入串口日志接收模式")
-------------------------------------------------------
--   第3步:执行操作
-------------------------------------------------------
while (1)
do
  delayms(1) -- 加上这个延迟方便显示屏版展示信息
  len, str = uart_recive(1, 100, 500) -- 串口1接收,最大100个字符,超时时间500ms
  if(len ~= 0) then  -- 接收成功
    count = count + 1
    printf("【Recv:\t%dByte】串口%d次接收",string.len(str), count)

    time = os.time()
    hms = os.date("%H:%M:%S,", time)
    totalstr = hms..str.."\r\n" -- 合并字符串
    ret = f_write(filepath, offset, totalstr) -- 写入到eMMC

    if(ret == 1) then
      printf("CSV 文件偏移:\t%d",offset)
      
      offset = offset + #totalstr
    else
      printf("写入CSV文件失败")
    end
  end

  key =  get_key() -- 监测到C键单击,退出监测

  if(key == 4) then
    reccout = 0
    printf("终止记录")
  end
end


运行过程:
演示1.jpg

进入eMMC虚拟U盘,可以看到test.csv文件,打开后查看
excel.png




2)Record viewer.lua 方便脱机查看记录历史

功能说明:
※将文件分页方式预览查看
※支持文件删除

期待功能:
※API对硬件翻页的支持

代码:



[C]
--F01=上一页,PageUp()
--F02=下一页,PageDn()
--F03=删除文件,Del()

-------------------------------------------------------
--     H7-TOOL 串口历史记录查看
-------------------------------------------------------
local len
local count
local totalstr
local filepath = "0:/H7-TOOL/Lua/串口日志记录/test.csv" -- csv文件记录路径
local key
local page=0
local ONE_PAGE_LEN=96 -- 单页显示最大长度
BIN_LEN,bin = f_read(filepath,0,16*1024)


--成功叫一声,失败叫三声
function TestErr(void)
    beep()
    delayms(100)
    beep()
    delayms(100)
    beep()  
end

function Del(void)
    f_write(BIN_LEN,0)
end

function PageDn(void)
    --截取前ONE_PAGE_LEN位
    if(page>BIN_LEN) then
        print("已经到底了")
        TestErr()
        return
    end
    page=page+ONE_PAGE_LEN
    res = string.sub(bin,page-ONE_PAGE_LEN,page)
    print(res)
end

function PageUp(void)
    --截取前ONE_PAGE_LEN位
    if(page<=0) then
        print("已在顶部")
        TestErr()
        return
    end
    page=page-ONE_PAGE_LEN
    res = string.sub(bin,page-ONE_PAGE_LEN,page)
    print(res)
end



功能演示:

请解压后查看
H7 Tool 串口记录演示视频.zip (14.95 MB, 下载次数: 2)





Record viewer.lua

1.05 KB, 下载次数: 2

评分

参与人数 1金币 +100 收起 理由
eric2013 + 100 很给力!

查看全部评分

回复

使用道具 举报

0

主题

2

回帖

7

积分

新手上路

积分
7
QQ
 楼主| 发表于 2024-12-21 13:44:11 | 显示全部楼层
2024.12.21已更新版本V1.1,UI记录刷新更快,支持文件删除操作,支持打开空文件等
删除文件.png

Record viewer.lua

1.63 KB, 下载次数: 1

Serial recording tool.lua

1.8 KB, 下载次数: 2

回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115988
QQ
发表于 2024-12-17 00:18:34 | 显示全部楼层
谢谢楼主分享。

将直接添加到服务器了,可以直接播放
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115988
QQ
发表于 2024-12-22 08:07:28 | 显示全部楼层
processor 发表于 2024-12-21 13:44
2024.12.21已更新版本V1.1,UI记录刷新更快,支持文件删除操作,支持打开空文件等

谢谢分享
回复

使用道具 举报

0

主题

111

回帖

111

积分

初级会员

积分
111
发表于 2025-1-8 08:30:03 | 显示全部楼层
感谢分享,参考下
回复

使用道具 举报

2

主题

45

回帖

51

积分

初级会员

积分
51
发表于 2025-1-8 10:05:14 | 显示全部楼层
感谢分享
回复

使用道具 举报

1

主题

1

回帖

4

积分

新手上路

积分
4
发表于 2025-1-8 13:49:39 | 显示全部楼层
感谢分享
有一些改进建议:
1.代码中指定的路径或csv文件不存在时,建议做一下保护,代码不要让他继续执行了。或者自动生成路径及文件
2.保存文件是否可以让用户配置?选择继续上一次的?还是本次新创建一个?
3.波特率是否也可以做成配置项?而不是写死在代码里

我使用还遇到了一些问题:
1.记录的代码运行时经常提示“终止记录”,但是我并没有按C键
2.viewer的代码我这边无法显示记录内容,但是我电脑读取EMMC中的文件是可以正常打开并显示内容的
回复

使用道具 举报

9

主题

36

回帖

63

积分

初级会员

积分
63
发表于 2025-2-17 17:11:02 | 显示全部楼层
感谢分享
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-6-1 15:30 , Processed in 0.269182 second(s), 31 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表