同步操作将从 梦程MI/luatos-bsp-example 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
大半年没写文字教程了,开始写这篇文章前还在犹豫要不要做,手生了,手放键盘上不知道该打啥字,本来计划做视频教程的,但因为经常嘴瓢,还是写文字吧。
LuatOS本着自身的开源特性,可以很轻松的嵌入到很多微处理器和微控制器,那就说说咋移植这套系统呗,其实并不难,看完基本就会了(大概)
目前我在做的是esp32的luatos分支,(只不过进度挺慢的,有空就写),依照我现有的经验,搞一下基础的移植教程吧。
要想做移植,就要先了解需要移植芯片的sdk,luatos依赖于freertos/rtt这类rtos系统,如果要移植的芯片sdk中用的有rtos,那么恭喜你,可以很轻松的将luatos移植到芯片上。
我给大家准备了配套的移植模板,请根据模板看这篇移植教程
废话少说,开始进入正题
基本步骤
看到这可能还会一脸懵逼?莫慌,听我慢慢道来。
这一步是最开始的一步,就是将lua虚拟机部分集成进芯片,我们要做的就是Ctrl+C Ctrl+V。
要想运行luatos,就要把核心的lua虚拟机部分集成进去,下面就开始步骤讲解。
(1)使用芯片的sdk建立一个空白的工程(这肯定都会)
(2)将luatos仓库里的lua文件夹和luat文件夹复制到新建好的工程里面
这里根据图再简要说明一下,lua文件夹里面的文件可以直接复制,luat里面要复制的有三个部分:
(1)freertos或者rtt,这个是调用rtos的接口,如果芯片使用的是这两种直接复制就好啦,
如果是freertos, 使用现成的 luat/freertos 目录下的代码, 否则需要实现 luat_msgbus.h 和 luat_timer.h
(2)include文件夹,这是头文件所在的地方
(3)modules 这个是和用户做交互用的源码所在(第一次不需要全部加入)
第一次集成加这些就够了
luat文件夹下的ports文件夹,是做接口适配用的,下面会讲
PS:packages里面的东西,不需要在第一次编译的时候加上,后续慢慢加功能的时候加上就行。(防止编译出错)
(3)设置编译
其实就是写Makefile或者cmake
$LUATOS
- lua # Lua虚拟机
- luat/module # lua库实现
- luat/ports # 接口层实现
以上目录内的.h文件需要加入include配置, .c文件加入到编译路径.
以静态库的方式编译进目标就好啦,就不详细解释了,相信看这篇文章的都会写
这里分两部分做适配,设置主入口和base.c
(1)设置主入口
打开工程的main.c(不同芯片叫法可能不一样)
加入以下代码
#include "bget.h"
#include "luat_base.h"
#define LUAT_HEAP_SIZE ()
uint8_t luavm_heap[LUAT_HEAP_SIZE] = {0};
void app_main(void)
{
bpool(luavm_heap, LUAT_HEAP_SIZE);
// lua vm需要一块内存用于内部分配, 给出首地址及大小.
luat_main();
// luat_main是LuatOS的主入口, 该方法通常不会返回.
}
这里做一下批注 #define LUAT_HEAP_SIZE () 这个定义是设置luatos可以使用的内存堆大小,这里要根据芯片可用的大小选择单位是byte
e.g. #define LUAT_HEAP_SIZE (16*1024) //代表分配16k 给luatos使用
(2) 设置base.c
这里可以根据本工程配套的示例仓库做
在ports文件夹内新建一个名为luat_base_xxx.c的文件,所有基础的实现都会在这个文件内找到。
这里说几个部分吧
设置bsp的名称
const char *luat_os_bsp(void)
{
return "example"; //example改成芯片的名字
}
设置log打印函数
void luat_nprint(char *s, size_t l)
{
printf("%s", s);
}
一般可以用printf()这个函数,如果芯片sdk不支持,请换成对应的或者自行实现
编译通过刷入芯片,打开串口就能看到luatos的log打印了
如果编译失败,请根据报错查找原因。
单独把fs这一部分拿出来说一下,lua脚本是存放在fs里面的,所以说,要实现luatos正常的运行,还需要把fs做好适配
这里需要在ports文件夹内新建一个名为luat_fs_xxx.c的文件,把实现函数放在这个文件夹内
int luat_fs_init(void)
luat_fs.h
外设的适配
外设通常指 gpio
/i2c
/spi
, 实现对应的.h文件就可以了, 然后在luat_openlibs
加载
加载示例{"gpio", luaopen_gpio},
基础移植大概讲这些就够用了,基础移植成功之后,后面的就是外设的适配了,这个过程必定是漫长的,还请各位大佬耐心搞一搞,有问题可以来luatos大群1061642968探讨或者提issue。
欢迎大家批评指正,本篇教程到此结束
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。