可用于嵌入式的解释器调研对比,及lua解释器介绍

嵌入式不一定只能用C!

---------------------------------------------------------------------------------------手动分割线--------------------------------------------------------------------------------
本文章参考了以下文章:

这里是引用

---------------------------------------------------------------------------------------手动分割线--------------------------------------------------------------------------------

文章目录

    • 嵌入式不一定只能用C!
  • 一、引言
  • 二、可应用于嵌入式的解释器调研
  • 三、解释器对比
  • 四、lua介绍及其应用
  • 五、代码示例

---------------------------------------------------------------------------------------文章开始--------------------------------------------------------------------------------

一、引言

嵌入式系统领域中,C语言以其高效和底层控制的特点,长期以来被认为是首选。然而,随着技术的发展和应用需求的多样化,越来越多的开发者开始探索其他编程语言在嵌入式系统中的潜力。实际上,解释器语言如Python、Lua等,也逐渐在嵌入式开发中展露头角。它们不仅可以简化开发过程,还能提高开发效率和灵活性,为嵌入式系统的创新提供更多可能性。本文将探讨这些解释器语言在嵌入式系统中的应用及其优势,揭示嵌入式开发不一定只能用C的崭新前景。
在这里插入图片描述

二、可应用于嵌入式的解释器调研

目前适用于嵌入式系统的脚本解释器有很多种,以下是一些比较常用的:
MicroPython:
介绍:MicroPython 是 Python 语言的精简版,专为嵌入式系统设计。
特点:内存占用小,支持实时操作系统(RTOS),适用于资源有限的设备。
应用:广泛用于物联网(IoT)设备,如 ESP8266 和 ESP32。

CircuitPython:
介绍:由 Adafruit 开发,基于 MicroPython,特别适用于教育和简单的嵌入式项目。
特点:易于使用和部署,特别针对初学者优化,拥有丰富的硬件支持库。
应用:常用于教育和快速原型开发。

Lua(使用 LuaJIT 或 eLua):
介绍:Lua 是一种轻量级的、可嵌入的脚本语言,广泛用于嵌入式系统。
特点:内存占用小,执行速度快,简单易学。
应用:常用于游戏开发、物联网设备和嵌入式控制器。

JavaScript(如 Duktape 和 JerryScript):
介绍:Duktape 和 JerryScript 是适用于嵌入式设备的 JavaScript 引擎。
特点:小巧、高效,支持现代 JavaScript 特性。
应用:物联网设备、智能家居产品等。

Tcl:
介绍:Tcl 是一种通用的脚本语言,具有良好的嵌入式支持。
特点:简单易学,内存占用小,具有强大的扩展能力。
应用:网络设备、嵌入式控制系统等。

Forth:
介绍:Forth 是一种非常古老但高效的编程语言,常用于嵌入式系统。
特点:非常低的资源需求,允许直接操作硬件,适用于极小型的嵌入式系统。
应用:工业控制、机器人、消费电子等。

Ruby(如 mruby):
介绍:mruby 是 Ruby 语言的精简版,适合嵌入式应用。
特点:灵活、易于扩展,内存占用相对较低。
应用:嵌入式控制系统、物联网设备。

三、解释器对比

解释器对比
详细说明:
移植难度:涉及将脚本语言解释器编译和运行在目标嵌入式平台上。
裁剪难度:涉及去除不必要的功能和库以减少内存和存储占用。
流行性:根据脚本语言在嵌入式系统中的广泛应用程度。
教程和社区支持:根据在线教程、文档、论坛和社区的活跃度。
性能:主要指脚本语言的执行效率和内存占用情况。

具体性能评估:
MicroPython:性能中等,适用于大多数嵌入式应用,但在资源极其有限的设备上可能显得较重。
CircuitPython:与 MicroPython 类似,性能中等,更偏向易用性。
Lua:性能高,Lua 本身非常轻量,特别适合资源受限的嵌入式系统。
JavaScript(Duktape/JerryScript):性能中等,Duktape 和 JerryScript 设计轻量,但与 Lua 相比仍有一定的性能差距。
Tcl:性能中等,适合嵌入式系统,但不如 Lua 高效。
Forth:性能高,极低的资源需求和直接操作硬件的能力使其非常高效。
mruby:性能中等,相对于完整的 Ruby 语言,mruby 更适合嵌入式应用,但与 Lua 和 Forth 相比仍稍逊一筹。
通过这个表格,开发者可以更直观地了解每种脚本语言在嵌入式系统中的适用性,特别是在移植、裁剪、性能和社区支持等方面的差异,从而选择最适合自己项目的语言。

四、lua介绍及其应用

Lua 概述
Lua 是一种轻量级、高效、可嵌入的脚本语言,起源于巴西,由 Roberto Ierusalimschy、Luiz Henrique de Figueiredo 和 Waldemar Celes 于 1993 年开发。Lua 以其简单、灵活、快速和嵌入式友好的特点而闻名,非常适合用于嵌入式系统。

Lua 的特点
轻量级:Lua 解释器本身非常小巧,占用的内存和存储资源极少。
高效:Lua 拥有快速的解释器和高效的垃圾回收机制,性能在脚本语言中名列前茅。
可嵌入:设计初衷即为嵌入式应用,Lua 可以方便地嵌入到 C/C++ 程序中,并与宿主程序进行紧密交互。
灵活性:Lua 提供动态类型和动态数据结构,如表(table),可以方便地进行复杂的数据操作。
可扩展性:支持元表(metatable)和元方法(metamethod),可以轻松扩展语言的功能。
Lua 在嵌入式系统中的应用
灵活配置:

Lua 常用于读取和解析配置文件,允许用户在不重新编译程序的情况下更改配置。
配置文件可以用 Lua 脚本编写,这样可以实现更复杂的配置逻辑。
编程组态:

在嵌入式系统中,Lua 可以用于动态定义和调整系统的行为。
通过 Lua 脚本,可以在运行时配置系统参数、初始化设备、设置网络协议等。
逻辑控制:

Lua 可用于实现嵌入式系统中的业务逻辑控制,如状态机、调度任务、事件处理等。
逻辑控制脚本可以独立于核心代码,使得系统更加模块化和可维护。
应用实例
物联网(IoT)设备:

NodeMCU:基于 ESP8266 的开源物联网平台,使用 Lua 语言进行设备编程和控制。
Lua 脚本用于控制传感器、执行设备操作、进行数据处理和上传。
游戏开发:

Love2D:一个用 Lua 编写的 2D 游戏引擎,广泛用于开发独立游戏。
在游戏中,Lua 常用于编写游戏逻辑、事件处理和用户界面。
网络设备:

Cisco:一些 Cisco 路由器和交换机使用 Lua 进行网络配置和管理脚本。
Lua 脚本用于自动化配置、故障诊断和性能监控。
工业自动化:

Lua 可用于 PLC(可编程逻辑控制器)和 SCADA(监控与数据采集系统)系统中,实现动态逻辑控制和数据处理。
例如,Lua 脚本可以动态调整生产线的参数,优化生产过程。
机器人:

在机器人控制中,Lua 可以用于定义机器人动作、路径规划和传感器数据处理。
Lua 脚本使得机器人控制系统更加灵活,可以在运行时调整机器人行为。

五、代码示例

示例代码
读取配置文件

-- config.lua
config = {
    hostname = "example.com",
    port = 8080,
    enable_logging = true
}

使用配置文件

#include <lua.h>
#include <lauxlib.h>
#include <lualib.h>

void load_config(const char* filename) {
    lua_State *L = luaL_newstate();
    luaL_openlibs(L);
    
    if (luaL_loadfile(L, filename) || lua_pcall(L, 0, 0, 0)) {
        fprintf(stderr, "Cannot run config file: %s\n", lua_tostring(L, -1));
        return;
    }

    lua_getglobal(L, "config");
    if (lua_istable(L, -1)) {
        lua_getfield(L, -1, "hostname");
        const char* hostname = lua_tostring(L, -1);
        lua_getfield(L, -2, "port");
        int port = lua_tointeger(L, -1);
        lua_getfield(L, -3, "enable_logging");
        int enable_logging = lua_toboolean(L, -1);

        printf("Hostname: %s\n", hostname);
        printf("Port: %d\n", port);
        printf("Enable Logging: %d\n", enable_logging);
    }

    lua_close(L);
}

int main() {
    load_config("config.lua");
    return 0;
}

----------------------------------------------------------------------------------到这里就结束了-------------------------------------------------------------------------------

时间流逝、年龄增长,是自己的磨炼、对知识技术的应用,还有那不变的一颗对嵌入式热爱的心!
在这里插入图片描述

到这里就结束了,希望大家点赞o( ̄▽ ̄)d、关注(o)/~、评论(▽)!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/666701.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

城市之旅:使用 LLM 和 Elasticsearch 简化地理空间搜索(二)

我们在之前的文章 “城市之旅&#xff1a;使用 LLM 和 Elasticsearch 简化地理空间搜索&#xff08;一&#xff09;”&#xff0c;在今天的练习中&#xff0c;我将使用本地部署来做那里面的 Jupyter notebook。 安装 Elasticsearch 及 Kibana 如果你还没有安装好自己的 Elasti…

字符串 | 字符串匹配之 KMP 算法以及 C++ 代码实现

目录 1 为什么使用 KMP&#xff1f;2 什么是 next 数组&#xff1f;2.1 什么是字符串的前后缀&#xff1f;2.2 如何计算 next 数组&#xff1f; 3 KMP 部分的算法4 完整代码 &#x1f608;前言&#xff1a;这篇文章比较长&#xff0c;但我感觉自己是讲明白了的 1 为什么…

迈的普拉姆利普绘图:深入解析与实战应用

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、引言&#xff1a;matplotlib绘图的基本原理 代码案例 二、深入了解&#xff1a;matplo…

Android更新优化 - 增量更新是如何节省用户时间和流量的

增量更新和全量更新 我想玩过大型手游的人都知道&#xff0c;手游的安装包非常大&#xff0c;因为资源图片众多。而你每次更新都把所有文件都更新下来&#xff0c;是非常耗时的&#xff0c;对吧。耗时是一个方面&#xff0c;有些人在户外开的是移动网络&#xff0c;动不动就几…

vue3 侦听器

侦听器示例 计算属性允许我们声明性地计算衍生值。然而在有些情况下&#xff0c;我们需要在状态变化时执行一些“副作用”&#xff1a;例如更改 DOM&#xff0c;或是根据异步操作的结果去修改另一处的状态。 在组合式 API 中&#xff0c;我们可以使用 watch 函数在每次响应式…

模型构建器之迭代器

上一篇我们介绍了模型构建器的基础&#xff0c;将一个工作流串联起来&#xff0c;然后做成模型工具。今天我们介绍模型构建器的第二个重要功能——迭代&#xff0c;也就是程序中的循环。 先来看一个例子。要给数据库中所有要素类添加一个相同的字段&#xff0c;该怎么做&#…

Diffusion Model, Stable Diffusion, Stable Diffusion XL 详解

文章目录 Diffusion Model生成模型DDPM概述向前扩散过程前向扩散的逐步过程前向扩散的整体过程 反向去噪过程网络结构训练和推理过程训练过程推理过程优化目标 详细数学推导数学基础向前扩散过程反向去噪过程 Stable Diffusion组成结构运行流程网络结构变分自编码器 (VAE)文本编…

ctfshow-web入门-信息搜集(web1-web10)

勇师傅还是想打 CTF 目录 1、web1 2、web2 3、web3 4、web4 5、web5 6、web6 7、web7 8、web8 9、web9 10、web10 1、web1 开发注释未及时删除 F12 看源码 拿到 flag&#xff1a;ctfshow{99854d7a-54a2-491a-8626-d5bfe7b5c2ca} 2、web2 js前台拦截 无效操作 按 F12 …

分享 ASP.NET Core Web Api 中间件获取 Request Body 两个方法

不废话&#xff0c;直接上正文。_ 方法一 思路&#xff1a;利用 BodyReader 直接读取 HttpContext 的 Request Body&#xff0c;再反序列化 var reqStream context.Request.BodyReader.AsStream(); var jsonObj JsonSerializer.Deserialize<CheckAndParsingMiddlewareM…

5.25.1 用于组织病理学图像分类的深度注意力特征学习

提出了一种基于深度学习的组织病理学图像分类新方法。我们的方法建立在标准卷积神经网络 (CNN) 的基础上,并结合了两个独立的注意力模块,以实现更有效的特征学习。 具体而言,注意力模块沿不同维度推断注意力图,这有助于将 CNN 聚焦于关键图像区域,并突出显示判别性特征通…

Xilinx IP解析之DDS Compiler v6.0(1)—— 基础概念

前言 DDS&#xff08;Direct Digital Synthesis&#xff0c;直接数字综合器&#xff09;是一种正弦波发生器&#xff0c;在Quartus中它被称为NCO&#xff08;Numerically Controlled Oscillator&#xff0c;数控振荡器&#xff09;&#xff0c;两者是对同一功能IP核的不同称呼。…

VS2017中使用qt翻译家,除ui界面外其他用tr包裹的字符串在翻译家中显示为乱码

1、ui界面中的中文,可以正常显示 2、其他用tr包裹的字符串,显示为乱码 3、解决 改为utf8保存。 然后更新翻译文件,重新打开发现已经ok了。 参考博客: https://blog.csdn.net/zhou714534957/article/details/124948822 https://blog.csdn.net/weixin_52689816/article/d…

【如何用爬虫玩转石墨文档?】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

【全开源】教育系统(FastAdmin+ThinkPHP+Uniapp)

一款基于FastAdminThinkPHPUniapp开发的西陆教育系统&#xff08;微信小程序、移动端H5、安卓APP、IOS-APP&#xff09;&#xff0c;支持线上线下课程报名&#xff0c;线上课程支持视频课程、音频课程、图文课程、课程在线支付。 塑造教育未来的基石 引言&#xff1a;教育系统…

Fully Convolutional Networks for Semantic Segmentation--论文笔记

论文笔记 资料 1.代码地址 2.论文地址 https://arxiv.org/abs/1411.4038 3.数据集地址 论文摘要的翻译 卷积网络是强大的视觉模型&#xff0c;可以产生特征层次结构。我们表明&#xff0c;卷积网络本身&#xff0c;经过端到端&#xff0c;像素对像素的训练&#xff0c;在…

CI/CD:持续集成/持续部署

1. 安装docker、docker-compose # 安装Docker yum install -y yum-utils device-mapper-persistent-data lvm2 yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo sed -i sdownload.docker.commirrors.aliyun.com/docker-ce /…

【SpringBoot】JWT+Token之Token自动续期

目录 回顾一下JWT基于JWT的认证流程安全性性能一次性 Token过期影响解决智障思路分析 token定时检查续期思路分析大致代码问题 双token【重点】思路分析补充微信网页授权方案 实现1.依赖2.配置3.拦截器及配置4.其他类5.token映射类6.jwt工具类7.controller类8.测试 总结双token…

HackTheBox-Machines--Bashed

Bashed 测试过程 1 信息收集 NMAP 80 端口 目录扫描 http://10.129.155.171/dev/phpbash.min.php http://10.129.155.171/dev/phpbash.php 半交互式 shell 转向 交互式shell python -c import socket,subprocess,os;ssocket.socket(socket.AF_INET,socket.SOCK_STREAM);s.co…

模型 FABE(特性 优势 好处 证据)法则

说明&#xff1a;系列文章 分享 模型&#xff0c;了解更多&#x1f449; 模型_思维模型目录。特性、优势、好处、证据&#xff0c;一气呵成。 1 FABE法则的应用 1.1 FABE法则营销商用跑步机 一家高端健身器材公司的销售代表正在向一家新开的健身房推销他们的商用跑步机。以下…

腾讯元宝眼中的我,竟是一个变现20w的AI博主!

文章首发于公众号&#xff1a;X小鹿AI副业 大家好&#xff0c;我是程序员X小鹿&#xff0c;前互联网大厂程序员&#xff0c;自由职业2年&#xff0c;也一名 AIGC 爱好者&#xff0c;持续分享更多前沿的「AI 工具」和「AI副业玩法」&#xff0c;欢迎一起交流~ 昨天&#xff08;5…