硬汉嵌入式论坛

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

[LUA教程] H7-TOOL的LUA小程序教程第6期:文件系统API方便大家SPI,CANFD,I2C和串口操作目标设备就可以实现脱机数据记录2022-08-30

[复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106990
QQ
发表于 2022-8-30 01:04:33 | 显示全部楼层 |阅读模式
LUA脚本的好处是用户可以根据自己注册的一批API(当前TOOL已经提供了几百个函数供大家使用),实现各种小程序,不再限制Flash里面已经下载的程序,就跟手机安装APP差不多,所以在H7-TOOL里面被广泛使用,支持在线调试运行,支持离线运行。

TOOL的LUA教程争取做到大家可以无痛调用各种功能函数,不需要学习成本。

开放LUA的fwrite函数,大大方便脱机数据记录,有了这个功能后,大家使用LUA小程序操作SPI,CANFD,I2C和串口操作目标设备就可以实现脱机数据记录功能了,或者做日志功能都是可以方便实现的。

注:文件系统API操作的是TOOL自带的4GB eMMC

列举目录文件
f_dir(path)   -- 参数为完整目录字符串

举例 :
f_dir("0:/H7-TOOL/Lua/串口脱机烧录/app.bin")

读文件内容 (一次最大读 16KB)
f_read(filename, offset,  read_bytes)  --文件名,  偏移地址,  读取长度
返回: 实际读取的文件长度

举例:
-- 第1个参数是路径,第2个参数的偏移地址,第3个参数读取大小
-- 返回值bytes表示读取的字节数,bin表示返回的数据
bytes, bin = f_read(filepath, 0, 224)


获取文件大小
f_size()  -- 参数为完整目录字符串
返回文件大小

举例:
filesize=f_size("0:/H7-TOOL/Lua/串口脱机烧录/app.bin")
print(filesize)

写文件
f_write("0:/H7-TOOL/Lua/1.txt", 0,  "123")
f_write("0:/H7-TOOL/Lua/1.txt", 0,  "\x12\x34\x56\x78\x00\x12")
- 第1个形参是文件名,需要完整路径
- 第2个形参是文件偏移地址
- 第3个形参是待写入的文件数据(可以是ascii字符串、二进制数组(包括0x00))
- 返回值1表示成功,0表示失败
- 如果TOOL磁盘已加密。则会直接返回错误。

  磁盘加密后需要先执行 lua_f_password("123456")   --输入密码
  密码出错5次,则禁止文件访问了,需要重新上电。

举例:
f_write("0:/H7-TOOL/Lua/1.txt", 0,  "123")
bytes, bin = f_read("0:/H7-TOOL/Lua/1.txt", 0,  3)

print(bin)



案例1:

写文件操作,仅需调用f_write即可。

[Lua] 纯文本查看 复制代码
function printf(...)
   print(string.format(...))
end

f_write("0:/H7-TOOL/Lua/1.txt", 0,  "www.armbbs.cn")
bytes, bin = f_read("0:/H7-TOOL/Lua/1.txt", 0,  30)


printf("读取字节数:%d, 读取的内容:%s",  bytes, bin )


image.png


案例2:

执行下面的lua语句,将查看 fix_data.lua 文件的内容

[Lua] 纯文本查看 复制代码
f_dir("0:/H7-TOOL/Programmer/LuaLib")
print()
bytes, bin = f_read("0:/H7-TOOL/Programmer/LuaLib/fix_data.lua", 0, 16 * 1024)
print("实际长度:", bytes)
print("文件内容:")
print(bin)  --文本文件直接print,二进制文件用 print_hex

image.png


案例3:

读取二进制文件
image.png


参考案例:

下面的案例全部用到了文件系统操作。

1、串口Bootloader案例下载和文字版操作说明
https://www.armbbs.cn/forum.php?mod=viewthread&tid=113456

2、I2C Bootloader案例下载和文字版操作说明
https://www.armbbs.cn/forum.php?mod=viewthread&tid=113998

3、CANFD/CAN Bootloader案例下载和文字版操作说明
https://www.armbbs.cn/forum.php?mod=viewthread&tid=113770

4、SPI Bootloader案例下载和文字版操作说明
https://www.armbbs.cn/forum.php?mod=viewthread&tid=114301
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106990
QQ
 楼主| 发表于 2022-8-30 01:28:23 | 显示全部楼层
更新完毕。
回复

使用道具 举报

0

主题

10

回帖

10

积分

新手上路

积分
10
发表于 2022-9-16 16:33:20 | 显示全部楼层
请问硬汉哥,这个固件发送的速率为64(I2C)以及224(UART)是有什么考虑么,以及比较稳定的速率可以设置为多少?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106990
QQ
 楼主| 发表于 2022-9-17 01:08:53 | 显示全部楼层
fujianjie 发表于 2022-9-16 16:33
请问硬汉哥,这个固件发送的速率为64(I2C)以及224(UART)是有什么考虑么,以及比较稳定的速率可以设置为 ...

这个是我随意定义的,大家根据自己的需要修改就行。

波特率的话,可以常规的115200, 也可以1M,2M的波特率,这个看你的设备是否可以正常识别串口高波特率了。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-13 10:39 , Processed in 0.264842 second(s), 32 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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