技术博客

合宙主流通信模组梳理

合宙作为我第一家实习公司,其在行业上是一位佼佼者,我们合宙推出多种产品,满足了几乎所有客户对通信模组的需求。 并且,合宙有一个特色`Luatos`,是一种基于`lua`的开发脚本。它是一种针对嵌入式的脚本运行框架。针对资源较少的嵌入式环境进行了优化,极大提升了运行效率。 >但是对于习惯C的嵌入式开发者,就需要拿出时间去学习、熟悉该脚本 我一直认为`一个公司的销售不了解产品那一定会让去问开...

嵌入式存储器(ROM/RAM/Flash)知识梳理

作为嵌入式开发者,存储器是我们开发过程中最频繁的硬件组件之一。从微小的8位单片机到复杂的嵌入式Linux系统,每个设备都用到了各种类型的存储器。 概念 **存储器主要分为ROM和RAM**,RAM和ROM的最大区别是`RAM在断电以后保存的数据会自动消失,ROM不会消失`。 当然我们可以把所有的存储器按两种方式分类,`易失性`和`功能用途`。 按易失性划分(最核心分类) - **非易失...

一文搞懂DTU、RTU的区别和应用场景

>DTU是作为串口数据与IP数据转换的传输通道 >RTU是集数据采集、现场设备控制、数据传输于一体的单元 >二者核心差异在于是否具备“现场数据采集与设备控制功能” >随着各样的无线网络传输技术的出现,网关应运而生。网关能够适配更多协议标准 我们从一个房间走到另一个房间,必须要经过一扇门。同样,从一个网络向另一个网络发送消息,也必须经过一个“关口”,而`DTU`、`RTU`就是这样的`关口`。...

一款高速USB转接多种协议芯片CH347

>本文介绍了国产CH347芯片的多种工作模式,包括USB转UART、IIC、SPI和JTAG等功能。 >目前正在设计合宙PC模拟器通过CH347实现控制SPI、IIC、GPIO的功能,所以给大家分享一下这个非常给力的国产芯片。 CH347介绍 `CH347`是一款**高速USB总线转接芯片**,通过`USB总线`提供`异步串口`、`I2C同步串行接口`、`SPI同步串行接口`和`JTAG接...

带你认识蓝牙 GATT协议

>GATT 是蓝牙低功耗(BLE)中用于规范设备间服务(Service)、特征(Characteristic)等数据结构,并实现数据读写、通知等交互的核心协议。 GATT介绍 蓝牙GATT(通用属性配置)是低功耗蓝牙(BLE)中用于定义设备之间通信数据结构的协议。 通过`服务`、`特征`、`属性`来实现设备间的数据传输。**GATT使用属性协议(ATT)来传输数据,这些数据以短数据段的形式...

迈进Makefile的世界(入门)

简介 Linux的`make`程序用来自动话编译大型源码,实现只需要一个`make`执行就可以全自动完成。 `make`能自动化完成,是因为项目路径下提供了一个`Makefile`文件,由该文件负责告诉`make`,应该去编译和链接该项目程序。 `make`起初只针对C语言开发,但它实际应用并不限定C语言,而是执行Linux命令去应用到任意项目,甚至不是编程语言。 >此外`make`...

带你掌握专业的文档格式-markdown

**** 基本语法 **Markdown 是一种轻量级标记语言**,Markdown语法十分简单,常用的标记符号不超过10个,不到半小时就能完全掌握。 对于我来说使用Markdown的好处是,可以专注内容而不是纠结排版。 标题语法 在Markdown中要创建标题,只需要在文字前加入(`#`)。#的数量代表着标题的级别(一、二、三级标题)。 其他方式 可以在文本下方添加`===`或`--...

LuatOS——LuaTask框架

框架说明 Lua支持多任务的功能,开发者可以用最简单的方式,新建多个任务,而不是像传统的开发方式一样,只能用定时器进行延时。 当使用LuaTask框架时候,需要调用sys库,并且在代码最后一行,调用sys.run()以启动LuaTask框架,框架内的代码回在run()内运行。 框架示例 多任务 ``` sys = require("sys") --创建第一个 sys.taskIni...

LuatOS——基础语法

认识lua lua是一种轻量小巧的脚本语言,它用标准C语言编写并以源代码形式开放。**标志Lua虚拟机可以很方便的嵌入别的程序中**,从而为应用程序提供灵活的扩展功能。而整个Lua虚拟机编译后仅仅100余k,经过适当的裁剪可能做到更小,十分适合嵌入式的开发。 Lua的运行速度占有绝对优势,这些都决定了Lua作为嵌入式脚本的最佳选择。 输出 在Lua中,可以使用print函数打印出你想要的...

线程池

线程池的原理 我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题:如果并发得线程数量很多,并且每个线程都是执行一个时间很短得任务结束了,这样频繁得创建线程会降低系统的效率,因为频繁创建线程和销毁线程需要时间。 线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。线程池线程都是后台线程。每个线程都可以默认得堆栈大小,以默认优先级运...

线程同步

线程同步的概念 多个线程对内存中的共享资源访问时,让线程进行线性的方式,有顺序的访问。线程对内存的这种访问方式就是线程同步。 下面是一个两个线程同时对变量num,进行加1的操作的demo,但是最终结果与预想结果,有很大差异。下面我们将分析并解决线程同步的问题。 ``` #include <pthread.h> #include <stdio.h> #include <unistd.h> #...

多线程与线程同步

多线程特点 线程是轻量级的进程,在Linux环境下线程的本质仍是进程。在计算机上运行的程序是一组指令及指令参数的组合,指令按照既定的逻辑控制计算机运行。操作系统会以进程为单位,分配系统资源。 可以理解为:进程是资源分配的最小单位,线程是操作系统调度的最小单位。 在概念上了解线程与进程的区别: - 进程有自己独立的地址空间,多个线程共用一个地址空间 - 线程更加节省系统资源,效率不...

【APUE】——标准I/O

流与FILE对象 **在标准IO中,所有的操作都是围绕流(stream)进行的**。当用标准IO库打开或创建一个文件时,我们已使一个流与一个文件相关联。 对于ASCII字符集,一个字符用一个字节表示。对于国际字符集,一个字符可以用多个字节表示。标准IO文件流可用单个字节和多字节字符集。 流的定向决定了所读、写的字符是单字节还是多字节的。 **当一个流最初被创建时,他并没有指向**。如...

【APUE】——文件和目录

我们从stat函数开始,逐个说明state结构的每一个成员以了解文件的所有属性。并说明修改这些属性的各个函数(修改所有者、修改权限等)。 stat、fstat和lstat函数 ``` #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> int stat(const char *pathname, struct st...

【APUE】——文件I/O

引言 在UNIX系统中可用的文件I/O函数——打开文件、读文件、写文件等。UNIX系统中大多数文件I/O只需用5个函数:open、read、write、lseek、close。 文件描述符 文件描述符贯穿sysio系统调用的类型 对Kernel而言,所有打开的文件都通过文件描述符引用。**文件描述符就是一个非负整数**。当打开一个现有文件或创建一个新文件时,**内核向进程返回一个文件描述...

C仿写sqlite3轻量级数据库

源码下载路径: 刘同学数据库 创建数据库 使用.open 创建数据库(数据库是唯一的),创建后再次使用.open即为打开数据操作。 示例: ``` .open test.db ``` 创建表 语法 CREATE TABLE的基本语法: ``` CREATE TABLE table_name( column1 datatype PRIMARY KEY(one or mor...

蓝桥杯——嵌入式组大总结

蓝桥杯——嵌入式组大总结,编写代码秘籍 详细的视频教程在 **1.** **LED** 1.1. **cubemx配置** 使能所有的LEDGPIO,设置输出模式 1.2. **Keil** 使能锁存器,板子上OE一直为低电平,当LE为高电平,使能锁存器 控制LED配置寄存器,并将LE置低位 **2.** **LCD** 2.1. **Cubemx配置**...

内存为程序分配空间的四种分配方式

**内存为程序分配空间有四种分配方式:** - 连续分配方式 - 基本分页存储管理方式 - 基本分段存储管理方式 - 段页式存储管理方式 连续分配方式 连续分配方式实现起来比较方便,所需要的硬件支持比较少 连续分配方式可以细分为四种:**单一连续分配、固定分区分配、动态分区分配和动态重定位分配** 其中固定分区的分配方式,因为分区固定,所以缺乏灵活性,当程序太小时,会造成内存浪费...

rtt——线程间通信(互斥量)

互斥量的概念 在 RT-Thread 中,互斥量(Mutex,互斥锁)用于确保共享资源在任意时刻只被一个线程访问 - **确保共享资源的互斥访问**:互斥量用于保护对共享资源的访问,确保在任意时刻只有一个线程可以访问该资源;避免多个线程同时修改共享资源而导致的数据不一致或竞态条件 - 实现临界区保护:互斥量通常用于实现临界区保护,将对共享资源的访问限制在临界区内。**只有获取了互斥量的线程...

rtt——线程间通信(消息队列)

**消息队列是一种线程间的通信方式,是邮箱的扩展** 消息队列的工作机制 消息队列能够接收来自线程或中断服务例程中**不固定长度的消息**,**并把消息缓存在自己的内存空间中**。其他线程也能够从消息队列中读取相应的消息,而当消息队列为空时,可挂起读取线程。当有新的消息到达时,挂起的线程将被唤醒为接收并处理消息 **消息队列是一种异步的通信方式** 通常将先进入消息队列的消息先传给线程...

87 篇文章,第 1 页,共 5