移植lua5.3.5到到FreeRTOS,并在赛灵思(Xilinx)ZYNQ SOC上运行

2018年的尾巴,第一次写博客,记录自己做的一点东西,希望2019年有一个好的开始。

开发环境:Xilinx SDK17.4

操作系统:FreeRTOS

1.将lua源码编译为静态链接库

(1)在Xilinx SDK IDE 中新建一个静态链接库工程

移植lua5.3.5到到FreeRTOS,并在赛灵思(Xilinx)ZYNQ SOC上运行_第1张图片

(2)在新建的静态链接库工程中添加lua源码,编译得到lua静态链接库。

移植lua5.3.5到到FreeRTOS,并在赛灵思(Xilinx)ZYNQ SOC上运行_第2张图片

2.更改lua源码适应FreeRTOS文件系统

(1)在lua中加载lua脚本是基于标准的C语言文件系统的,但是FreeRTOS中不是用的标准C语言文件系统,所以在lua源码中的关于加载lua脚本相关函数中的文件操作API要改为FreeRTOS提供的文件操作函数。

a.在lauxlib.c文件中,结构体LoadFF和函数getF, skipBOM, skipcomment, luaL_loadfilex等要做相应修改。

b.在luaconf.h文件中,添加#define LUA_USE_C89

(2)lua提供了一个IO库用来操作文件,其API也是基于标准C语言的文件系统函数的,所以也需要修改来适应FreeRTOS的文件系统。这样移植后的lua才能操作文件。

a.在lauxlib.h文件中,修改结构体luaL_Stream

b.在liolib.c文件中,修改结构体RN和函数io_open,g_read, read_line, test_eof, read_chars, read_number, read_all,f_write, g_write

(3)修改lua源码完成后,重新编译lua静态链接库工程,得到新的lua静态库。

3.将lua静态库链接到应用工程中。

(1)在SDK中新建一个应用工程,将lua静态库链接到该工程中。

移植lua5.3.5到到FreeRTOS,并在赛灵思(Xilinx)ZYNQ SOC上运行_第3张图片

(2)编译应用工程,关于libc.a会有链接错误,提示一些函数没有定义,这里可以是libc.a这个库使用的不对,或者其他什么原因,此处为了让链接顺利,暂时先自定义这些没有定义的函数。

移植lua5.3.5到到FreeRTOS,并在赛灵思(Xilinx)ZYNQ SOC上运行_第4张图片

4.在ZYNQ 板子上跑lua脚本

(1)在应用工程中新建一个task来跑lua脚本

移植lua5.3.5到到FreeRTOS,并在赛灵思(Xilinx)ZYNQ SOC上运行_第5张图片

(2)编写一个测试用的lua脚本,user.lua

移植lua5.3.5到到FreeRTOS,并在赛灵思(Xilinx)ZYNQ SOC上运行_第6张图片

(3)编译应用工程,得到二进制文件,将该二进制文件和user.lua一起拷贝到ZYNQ的SD卡中(ZYNQ设置为SD卡启动)

(4)给ZYNQ板子上电,打印lua脚本运行结果

移植lua5.3.5到到FreeRTOS,并在赛灵思(Xilinx)ZYNQ SOC上运行_第7张图片

5.测试lua的文件操作函数

(1)在lua脚本中添加文件操作的函数

移植lua5.3.5到到FreeRTOS,并在赛灵思(Xilinx)ZYNQ SOC上运行_第8张图片

(2)新建一个txt文件并拷贝到SD卡中

(3)运行程序,查看结果

移植lua5.3.5到到FreeRTOS,并在赛灵思(Xilinx)ZYNQ SOC上运行_第9张图片

(4)打开SD卡中的txt文件,查看lua脚本中要写入的内容是否包含在txt文件中

你可能感兴趣的:(lua)