MAC内核+外部PHY
**** 以太网接入**MCU**方案 以太网接入是嵌入式开发必不开的东西,那么目前主要有两种方式,**“软件TCP/IP协议栈接入以太网方案”**以及**“硬件TCP/IP协议栈以太网接入方案”**。 目前软件TCP/IP协议栈比较广泛。 软件TCP/IP协议栈接入以太网方案 这种以太网接入方案是LwIP+MAC内核+PHY层芯片共同实现的,用于实现以太网的物理...
**** 以太网接入**MCU**方案 以太网接入是嵌入式开发必不开的东西,那么目前主要有两种方式,**“软件TCP/IP协议栈接入以太网方案”**以及**“硬件TCP/IP协议栈以太网接入方案”**。 目前软件TCP/IP协议栈比较广泛。 软件TCP/IP协议栈接入以太网方案 这种以太网接入方案是LwIP+MAC内核+PHY层芯片共同实现的,用于实现以太网的物理...
> 注意netif就是指网卡,即网络接口 netif结构体 之前提到过**网卡是硬件接口**,LwIP是软件,那么怎么实现让硬件和软件无缝连接一起呢?并且软件如何兼容不同的硬件呢? **在LwIP中使用一个数据结构——netif来描述一个网卡**;这是因为网卡多种多样,比如:WiFi、以太网;以及还有各种的以太网的驱动,比如LAN8720。所以LwIP将无法统一的部分进行了抽象;但是底层接口...
以太网介绍:从物理层到MAC子层的核心原理 以太网(Ethernet)是当前应用最广泛的局域网技术,因其在组网领域的高占比,常被大众直接等同于“互联网”。实际上,它是遵循**IEEE 802.3标准**构建的局域网技术,核心定义集中在OSI参考模型的**物理层(PHY)** 与**数据链路层的介质访问控制子层(MAC)**,小到学校的PC局域网(用水晶头网线连接),大到企业的局部网络,都以以太网为...
JSON:现代开发必备的数据交换格式 在前后端开发、跨平台数据传输场景中,JSON已成为最主流的数据格式之一。它凭借简洁的语法和高效的解析性能,成为连接不同系统的数据“通用语言”。 一、JSON的定义 JSON(JavaScript Object Notation)是一种**轻量级的数据交换格式**,核心宗旨是“用更少的编码,实现更快的数据传输”。 其适用范围极广,可在多种编程语言(如Jav...
LwIP的三种编程接口 LwIP作为轻量级TCP/IP协议栈,提供了三种不同层级的编程接口,分别是**RAW/Callback API**、**NETCONN API**和**SOCKET API**。这些接口在易用性和执行效率上呈现互补关系:**易用性从左到右依次提高,而执行效率从左到右依次降低**(即最易用的接口牺牲了部分效率)。 一、RAW/Callback API(内核回调接口)...
> 本标签类型为介绍LwIP,从简入深、从理论到代码编写 网络协议 常见的网络协议 1. **TCP/IP**:是一种协议族。 2. **HTTP协议**:超文本传输协议,作用于<客户端-服务器>架构之上。浏览器作为客户端通过URL向服务端发送所有请求,服务端接收到请求后,向客户端发送响应消息。 3. **FTP协议**:文件传输协议,工作在应用层的网络协议。使得主机间可以共享文件...
> 这是全网最全的 WSL2 安装与配置指南 介绍 `WSL2(Windows Subsystem for Linux 2)`是Windows提供的一种轻量级Linux运行环境,具备完整的 Linux内核,并支持更好的文件系统性能和兼容性。它允许用户在Windows系统中运行Linux命令行工具和应用程序,而无需安装虚拟机或双系统。 打开设置 1. 启用或关闭Windows功能 任务栏搜...
合宙作为我第一家实习公司,其在行业上是一位佼佼者,我们合宙推出多种产品,满足了几乎所有客户对通信模组的需求。 并且,合宙有一个特色`Luatos`,是一种基于`lua`的开发脚本。它是一种针对嵌入式的脚本运行框架。针对资源较少的嵌入式环境进行了优化,极大提升了运行效率。 >但是对于习惯C的嵌入式开发者,就需要拿出时间去学习、熟悉该脚本 我一直认为`一个公司的销售不了解产品那一定会让去问开...
作为嵌入式开发者,存储器是我们开发过程中最频繁的硬件组件之一。从微小的8位单片机到复杂的嵌入式Linux系统,每个设备都用到了各种类型的存储器。 概念 **存储器主要分为ROM和RAM**,RAM和ROM的最大区别是`RAM在断电以后保存的数据会自动消失,ROM不会消失`。 当然我们可以把所有的存储器按两种方式分类,`易失性`和`功能用途`。 按易失性划分(最核心分类) - **非易失...
>DTU是作为串口数据与IP数据转换的传输通道 >RTU是集数据采集、现场设备控制、数据传输于一体的单元 >二者核心差异在于是否具备“现场数据采集与设备控制功能” >随着各样的无线网络传输技术的出现,网关应运而生。网关能够适配更多协议标准 我们从一个房间走到另一个房间,必须要经过一扇门。同样,从一个网络向另一个网络发送消息,也必须经过一个“关口”,而`DTU`、`RTU`就是这样的`关口`。...
>本文介绍了国产CH347芯片的多种工作模式,包括USB转UART、IIC、SPI和JTAG等功能。 >目前正在设计合宙PC模拟器通过CH347实现控制SPI、IIC、GPIO的功能,所以给大家分享一下这个非常给力的国产芯片。 CH347介绍 `CH347`是一款**高速USB总线转接芯片**,通过`USB总线`提供`异步串口`、`I2C同步串行接口`、`SPI同步串行接口`和`JTAG接...
>GATT 是蓝牙低功耗(BLE)中用于规范设备间服务(Service)、特征(Characteristic)等数据结构,并实现数据读写、通知等交互的核心协议。 GATT介绍 蓝牙GATT(通用属性配置)是低功耗蓝牙(BLE)中用于定义设备之间通信数据结构的协议。 通过`服务`、`特征`、`属性`来实现设备间的数据传输。**GATT使用属性协议(ATT)来传输数据,这些数据以短数据段的形式...
简介 Linux的`make`程序用来自动话编译大型源码,实现只需要一个`make`执行就可以全自动完成。 `make`能自动化完成,是因为项目路径下提供了一个`Makefile`文件,由该文件负责告诉`make`,应该去编译和链接该项目程序。 `make`起初只针对C语言开发,但它实际应用并不限定C语言,而是执行Linux命令去应用到任意项目,甚至不是编程语言。 >此外`make`...
**** 基本语法 **Markdown 是一种轻量级标记语言**,Markdown语法十分简单,常用的标记符号不超过10个,不到半小时就能完全掌握。 对于我来说使用Markdown的好处是,可以专注内容而不是纠结排版。 标题语法 在Markdown中要创建标题,只需要在文字前加入(`#`)。#的数量代表着标题的级别(一、二、三级标题)。 其他方式 可以在文本下方添加`===`或`--...
框架说明 Lua支持多任务的功能,开发者可以用最简单的方式,新建多个任务,而不是像传统的开发方式一样,只能用定时器进行延时。 当使用LuaTask框架时候,需要调用sys库,并且在代码最后一行,调用sys.run()以启动LuaTask框架,框架内的代码回在run()内运行。 框架示例 多任务 ``` sys = require("sys") --创建第一个 sys.taskIni...
认识lua lua是一种轻量小巧的脚本语言,它用标准C语言编写并以源代码形式开放。**标志Lua虚拟机可以很方便的嵌入别的程序中**,从而为应用程序提供灵活的扩展功能。而整个Lua虚拟机编译后仅仅100余k,经过适当的裁剪可能做到更小,十分适合嵌入式的开发。 Lua的运行速度占有绝对优势,这些都决定了Lua作为嵌入式脚本的最佳选择。 输出 在Lua中,可以使用print函数打印出你想要的...
线程池的原理 我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题:如果并发得线程数量很多,并且每个线程都是执行一个时间很短得任务结束了,这样频繁得创建线程会降低系统的效率,因为频繁创建线程和销毁线程需要时间。 线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。线程池线程都是后台线程。每个线程都可以默认得堆栈大小,以默认优先级运...
线程同步的概念 多个线程对内存中的共享资源访问时,让线程进行线性的方式,有顺序的访问。线程对内存的这种访问方式就是线程同步。 下面是一个两个线程同时对变量num,进行加1的操作的demo,但是最终结果与预想结果,有很大差异。下面我们将分析并解决线程同步的问题。 ``` #include <pthread.h> #include <stdio.h> #include <unistd.h> #...
多线程特点 线程是轻量级的进程,在Linux环境下线程的本质仍是进程。在计算机上运行的程序是一组指令及指令参数的组合,指令按照既定的逻辑控制计算机运行。操作系统会以进程为单位,分配系统资源。 可以理解为:进程是资源分配的最小单位,线程是操作系统调度的最小单位。 在概念上了解线程与进程的区别: - 进程有自己独立的地址空间,多个线程共用一个地址空间 - 线程更加节省系统资源,效率不...
流与FILE对象 **在标准IO中,所有的操作都是围绕流(stream)进行的**。当用标准IO库打开或创建一个文件时,我们已使一个流与一个文件相关联。 对于ASCII字符集,一个字符用一个字节表示。对于国际字符集,一个字符可以用多个字节表示。标准IO文件流可用单个字节和多字节字符集。 流的定向决定了所读、写的字符是单字节还是多字节的。 **当一个流最初被创建时,他并没有指向**。如...