开源 企业版 高校版 私有云 模力方舟 AI 队友
代码拉取完成,页面将自动刷新
捐赠
捐赠前请先登录
扫描微信二维码支付
取消
支付完成
支付提示
将跳转至支付宝完成支付
确定
取消
1 Star 0 Fork 510

dancer4code/LuatOS

forked from 合宙Luat/LuatOS
加入 Gitee
与超过 1400万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
已有帐号? 立即登录
文件
master
分支 (3)
标签 (20)
master
add_dbg
new_include
v0005_beta1_air640w
v0005_beta2_air302
v0005_beta1
v0005_beta1_air302
v0004
v0004_air302
V0003_Air640w_release
v0003.20201015
V0003_Air640w_preview
v0003_air302_preview
v0003_air302_preview2
v0002_air640w
v0002_air302
V0002_preview
v1.0.0
v0.1.5
v0.1.3
v0.1.1
v0.1.0
v0.0.1
master
分支 (3)
标签 (20)
master
add_dbg
new_include
v0005_beta1_air640w
v0005_beta2_air302
v0005_beta1
v0005_beta1_air302
v0004
v0004_air302
V0003_Air640w_release
v0003.20201015
V0003_Air640w_preview
v0003_air302_preview
v0003_air302_preview2
v0002_air640w
v0002_air302
V0002_preview
v1.0.0
v0.1.5
v0.1.3
v0.1.1
v0.1.0
v0.0.1
克隆/下载
克隆/下载
提示
下载代码请复制以下命令到终端执行
为确保你提交的代码身份被 Gitee 正确识别,请执行以下命令完成配置
初次使用 SSH 协议进行代码克隆、推送等操作时,需按下述提示完成 SSH 配置
1 生成 RSA 密钥
2 获取 RSA 公钥内容,并配置到 SSH公钥
在 Gitee 上使用 SVN,请访问 使用指南
使用 HTTPS 协议时,命令行会出现如下账号密码验证步骤。基于安全考虑,Gitee 建议 配置并使用私人令牌 替代登录密码进行克隆、推送等操作
Username for 'https://gitee.com': userName
Password for 'https://userName@gitee.com': # 私人令牌
master
分支 (3)
标签 (20)
master
add_dbg
new_include
v0005_beta1_air640w
v0005_beta2_air302
v0005_beta1
v0005_beta1_air302
v0004
v0004_air302
V0003_Air640w_release
v0003.20201015
V0003_Air640w_preview
v0003_air302_preview
v0003_air302_preview2
v0002_air640w
v0002_air302
V0002_preview
v1.0.0
v0.1.5
v0.1.3
v0.1.1
v0.1.0
v0.0.1
LuatOS
/
tool.lua
LuatOS
/
tool.lua
tool.lua 5.54 KB
一键复制 编辑 原始数据 按行查看 历史
晨旭 提交于 2020年02月23日 18:54 +08:00 . update: uart回调改成直接调用函数
--[[
(
for wsl:
sudo apt update
sudo apt install qemu-user-static
sudo update-binfmts --install i386 /usr/bin/qemu-i386-static --magic '\x7fELF\x01\x01\x01\x03\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x03\x00\x01\x00\x00\x00' --mask '\xff\xff\xff\xff\xff\xff\xff\xfc\xff\xff\xff\xff\xff\xff\xff\xff\xf8\xff\xff\xff\xff\xff\xff\xff'
sudo service binfmt-support start
)
install:
sudo dpkg --add-architecture i386
sudo apt-get update
sudo apt-get install lua5.3:i386
sudo apt-get install lua5.1
sudo apt-get install luarocks
sudo luarocks install rs232
sudo luarocks install bit32
ps, proxy (for luarocks):
export https_proxy=http://127.0.0.1:1080
export http_proxy=http://127.0.0.1:1080
]]
local help = [[
usage:
download script files:
lua5.1 tool.lua /dev/ttyS8 -d file1 file2 ...
read serial port data:
lua5.1 tool.lua /dev/ttyS8 -r
serial port data after download:
lua5.1 tool.lua /dev/ttyS8 -r -d file1 file2 ...
]]
if #arg < 2 then
print(help)
return
end
local rs232 = require "rs232"
local bit = require "bit32"
local p, e = rs232.port(arg[1],{
baud = '_115200';
data_bits = '_8';
parity = 'NONE';
stop_bits = '_1';
flow_control = 'OFF';
rts = 'OFF';
})
p:open()
local download,readUart
local files = {}--要下载进去的文件路径
for i=2,#arg do
if arg[i] == "-d" then
download = true
elseif arg[i] == "-r" then
readUart = true
else
table.insert(files,arg[i])
end
end
--各种要用到的函数
--按位取反,1字节
local function bnot(n)
local r = 0
for i=1,8 do
local b = bit.rshift(n, 8-i) % 2
b = b == 1 and 0 or 1
r = r + bit.lshift(b, 8-i)
end
return r
end
--计算crc
local function calcrc(s)
local crc = 0
for i=1,s:len() do
crc = bit.bxor(crc, bit.lshift(s:byte(i), 8))
for j=1,8 do
if crc >= 0x8000 then
crc = bit.bxor((bit.lshift(crc, 1) % 0x10000), 0x1021)
else
crc = bit.lshift(crc, 1) % 0x10000
end
end
crc = crc % 0x10000
end
return math.floor(crc/0x100),crc%0x100
end
local SOH = 0x01
local STX = 0x02
local EOT = 0x04
local ACK = 0x06
local NAK = 0x15
local CAN = 0x18
--xmodem传头
local function xmodem(data,n)
local data = data..
string.rep(string.char(0),
128-data:len())
return string.char(SOH,n,bnot(n))..
data..
string.char(calcrc(data))
end
--ymodem传文件
local function ymodem(data,n)
local data = data..
string.rep(string.char(0x1a),
1024-data:len())
return string.char(STX,n,bnot(n))..
data..
string.char(calcrc(data))
end
--取文件名
local function getName(s)
s = s:gsub("\\","/")
return s:match(".+/(.+)") or s:match(".+\\(.+)") or s
end
--发某个数据包
local function sendData(s)
while true do
p:write(s)
while true do
local d = p:read(10,5000)
--print(d:byte(),d:len(),d)
if d:byte() == ACK or d:find("C") then return true end--收到了
if d:byte() == NAK then break end--没收到,再发一遍
if d:len() == 0 then return end
end
end
end
if download then
print("clear all files, if not response, please restart device")
while true do
p:write("reinit\r\n")
local d = p:read(10,1000)
if d:find("reinit") then break end
end
print("send ry")
p:write("ry\r\n")
print("waitting for reply...")
for i=1,100 do
local d = p:read(10,1000)
if d:find("C") then
print("connect ok!")
break
end
end
print("start download")
for i=1,#files do
--编译
if files[i]:sub(-4,-1):upper() == ".LUA" then
local r = files[i]:sub(1,-4).."luac"
print(r)
os.execute("luac5.3 -o \""..r.."\" -s \""..files[i].."\"")
files[i] = r
end
local f,e = io.open(files[i],"r")
if not f then--打开文件失败
print("file open failed, stop download.",files[i],e)
return
end
local data = f:read("*a") --读取整个文件,以便获取大小
local name = getName(files[i])
print("downloading "..name)
--发送文件名
if not sendData(xmodem(name..string.char(0)..tostring(data:len()),0)) then
print("send file name fail") return
end
local p,pack = 1,1
while true do
local d = data:sub(p,p+1023)
if d:len() == 0 then break end--读完了
p = p + 1024
print((p > data:len() and data:len() or p).."/"..data:len())
local sd = ymodem(d,pack)
--print(sd:toHex(),pack)
if not sendData(sd) then
print("send file fail") return
end
pack = pack + 1
end
print("trans end")
if not sendData(string.char(0x04)) then--结束该文件
print("end file fail") return
end
end
if not sendData(xmodem("",0)) then--结束
print("last packet fail") return
end
print("all done, reboot")
p:write("ls\r\n")
p:write("reboot\r\n")
end
if readUart then
print("press ctrl+c to kill this tool")
while true do
io.write(p:read(1000, 100))
end
end
p:close()
Loading...
举报
举报成功
我们将于2个工作日内通过站内信反馈结果给你!
请认真填写举报原因,尽可能描述详细。
请选择举报类型
取消
发送
误判申诉

此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。

如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。

取消
提交

简介

合宙LuatOS是运行在嵌入式硬件的实时操作系统,只需要少量内存和flash空间就能运行,用户编写lua代码就可完成各种功能
取消

发行版

暂无发行版

贡献者

全部

近期动态

不能加载更多了
编辑仓库简介
简介内容
主页
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Lua
1
https://gitee.com/dancer4code/LuatOS.git
git@gitee.com:dancer4code/LuatOS.git
dancer4code
LuatOS
LuatOS
master
点此查找更多帮助

搜索帮助

评论
仓库举报
回到顶部
登录提示
该操作需登录 Gitee 帐号,请先登录后再操作。
立即登录
没有帐号,去注册

AltStyle によって変換されたページ (->オリジナル) /