当前标签 / 物联网 / 总共10篇

RT-Thread 中的多线程

前面有一篇我们写了一个按键控制 LED 显示的例子,现在我们尝试将该功能单独放入一个线程进行管理。

RT-Thread 线程管理和调度

RT-Thread 线程管理的主要功能是对线程进行管理和调度,系统中总共存在两类线程,分别是系统线程用户线程,系统线程是由 RT-Thread 内核创建的线程,用户线程是由应用程序创建的线程,这两类线程都会从内核对象容器中分配线程对象,当线程被删除时,也会被从对象容器中删除,如图 4-2 所示,每个线程都有重要的属性,如线程控制块、线程栈、入口函数等。

RT-Thread 的线程调度器是抢占式的,主要的工作就是从就绪线程列表中查找最高优先级线程,保证最高优先级的线程能够被运行,最高优先级的任务一旦就绪,总能得到 CPU 的使用权。

阅读更多

RT-Thread 的 CPU 固件移植理解

RT-Thread 的 CPU 抽象层

在嵌入式领域有多重不同的 CPU 架构,我们知道 RT-Thread 是支持不同架构的嵌入式操作系统,我们先来大概看一下 RT-Thread 的架构。

RT-Thread 的架构示意图 RT-Thread 的架构示意图

可以看到 RT-Thread 提供了一个 libcpu 抽象层来适配不同的 CPU 架构, libcpu 向上对内核提供统一的接口,包括全局中断的开关,线程栈的初始化,上下文切换等。

RT-Thread 的 libcpu 抽象层向下提供了一套统一的 CPU 架构移植接口,这部分接口包含了全局中断 开关函数、线程上下文切换函数、时钟节拍的配置和中断函数、Cache 等等内容。

阅读更多

潘多拉STM32L4的简单部件控制

通过按键切换点亮的 LED 灯

电路原理

通过电路原理图我们可以看到 R-G-B 三个 LED 灯共用 3.3v 阳极,通过电阻分压到单片机管脚,原理很简单,我们给管脚输出低电平则相应的 LED 点亮。

1
2
3
4
#define LED_PIN_RED  GET_PIN(E, 7)  //定义红灯管脚

rt_pin_mode(LED_PIN_RED, PIN_MODE_OUTPUT); //定义管脚模式为输入
rt_pin_write(LED_PIN_RED, PIN_LOW);  //低电平点亮

按键的线路接法自带上拉电阻,所以我们设置输入模式为 PIN_MODE_INPUT 即可,不需要考虑上下拉输入模式。

按键连接示意图 按键连接示意图

阅读更多

RT-Thread 学习启动篇

RT-Thread 系统

RT-Thread 是一款完全由国内团队开发维护的嵌入式实时操作系统(RTOS)。

RT-Thread,全称是 Real Time-Thread,顾名思义,它是一个嵌入式实时多线程操作系统,基本属性之一是支持多任务,允许多个任务同时运行并不意味着处理器在同一时刻真地执行了多个任务。事实上,一个处理器核心在某一时刻只能运行一个任务,由于每次对一个任务的执行时间很短、任务与任务之间通过任务调度器进行非常快速地切换(调度器根据优先级决定此刻该执行的任务),给人造成多个任务在一个时刻同时运行的错觉。在 RT-Thread 系统中,任务通过线程实现的,RT-Thread 中的线程调度器也就是以上提到的任务调度器。

与 Linux 系统比较

相较于 Linux 操作系统,RT-Thread 体积小,成本低,功耗低、启动快速,除此以外 RT-Thread 还具有实时性高、占用资源小等特点,非常适用于各种资源受限(如成本、功耗限制等)的场合。虽然 32 位 MCU 是它的主要运行平台,实际上很多带有 MMU、基于 ARM9、ARM11 甚至 Cortex-A 系列级别 CPU 的应用处理器在特定应用场合也适合使用 RT-Thread。

RT-Thread 的系统架构

RT-Thread 与其他很多 RTOS 如 FreeRTOS、uC/OS 的主要区别之一是,它不仅仅是一个实时内核,还具备丰富的中间层组件,如下图所示。

RT-Thread的系统架构图 RT-Thread的系统架构图

阅读更多

浅谈软件是如何控制硬件工作的

声明:以下知识仅限于本人对于软硬件的理解和整理并作为内部分享,因个人知识水平所限,可能存在一些遗漏和不足甚至错误的地方,如有发现可以留言指出。配合此视频看效果更佳哦~

概述

我们都知道软件是服务于硬件的,因为单纯的软件如果不跑到具体的硬件上面将是没有任何价值的。如果单纯的去谈软件是没有任何价值的,软件的开发往往依附于所运行的硬件环境。关于这个话题涉及的知识比较多,而且比较深奥,这个话题其实是《微机原理》这门课程所要解决的问题,这篇文章不打算以晦涩难懂比较深奥的知识揭开这个问题的本质,而是想基于作者(水寒)的知识积累和实践,通过一些简单的电路知识和计算机软硬件知识来了解软件和硬件是怎么交织在一起的。

数字电路

对于我们物联网而言,一般所讨论的硬件其实可以认为是数字电路相关的一套硬件电路。而数字电路和模拟电路有何区别呢?要搞清数字电路模拟电路,首先要搞清什么是数字信号什么是模拟信号。

模拟量转数字量采样过程 模拟量转数字量采样过程

如上图所示,模拟信号是在时间上取值都是连续的,自然界的信号可以说都是模拟信号。但是模拟信号利于观察但是不利于数据交互传递和表示,所以通常我们在计算机中需要将大部分的模拟信号转换为数字信号,方便实现数字电路和软硬件数据交互。

数字电路或数字集成电路是由许多**逻辑门**组成的复杂电路,与模拟电路相比,它主要进行数字信号的处理(即信号以0与1两个状态表示),因此**抗干扰能力较强**。

看到这里你也许还比较迷糊,似懂非懂的感觉,那就对啦!接下来我们以一个小实验来说明一下。

阅读更多

物联网开发中常见的几个标准协议

Let’s say you’re in the planning phase of an IoT project. You have a lot of decisions to make, and maybe you’re not sure where to start. In this article, we focus on a framework for how you can think about this problem of standards, protocols, and radios.

假设你正准备开始一个物联网项目,在开始项目之前你需要做很多选择,有可能你完全不知道从哪开始,这篇文章我们一起来看看如何选择标准的无线通信协议框架。

The framework, of course, depends on if your deployment is going to be internal, such as in a factory, or external, such as a consumer product. In this conversation, we’ll focus on products that are launching externally to a wider audience of customers, and for that, we have a lot to consider.

当然,这些无线通信协议框架是部署在你的设备内部进行通信的,物联网项目中还要考虑到一些外部的硬件,这些硬件都是在制作工厂完成的,所以本文讲重点关注一些使用比较广泛的通信产品。

阅读更多

Android中使用MQTT协议通信

MQTT介绍

物联网 (IoT) 设备必须连接互联网。通过连接到互联网,设备就能相互协作,以及与后端服务协同工作。互联网的基础网络协议是 TCP/IP。MQTT(消息队列遥测传输) 是基于 TCP/IP 协议栈而构建的,已成为 IoT 通信的标准。

IoT通信 IoT通信

MQTT 最初由 IBM 于上世纪 90 年代晚期发明和开发。它最初的用途是将石油管道上的传感器与卫星相链接。顾名思义,它是一种支持在各方之间异步通信的消息协议。异步消息协议在空间和时间上将消息发送者与接收者分离,因此可以在不可靠的网络环境中进行扩展。虽然叫做消息队列遥测传输,但它与消息队列毫无关系,而是使用了一个发布和订阅的模型。

在使用物联网的过程中经常会遇到需要客户端(设备)被动接收服务器的消息的过程,这个过程使用HTTP协议要付出很大代价的,而 AMOP(高级消息队列协议) 使用异步消息总线来解决此类问题,除了AMOP 外 XMPP (可扩展通讯和表示协议)也是一种即时消息协议,但与MQTT相比XMPP在设备和网络上需要的资源要多得多。

由于物联网的环境是非常特别的,所以MQTT遵循以下设计原则:

  1. 精简,不添加可有可无的功能。
  2. 发布/订阅(Pub/Sub)模式,方便消息在传感器之间传递。
  3. 允许用户动态创建主题,零运维成本。
  4. 把传输量降到最低以提高传输效率。
  5. 把低带宽、高延迟、不稳定的网络等因素考虑在内。
  6. 支持连续的会话控制。
  7. 理解客户端计算能力可能很低。
  8. 提供服务质量管理。
  9. 假设数据不可知,不强求传输数据的类型与格式,保持灵活性。

MQTT协议应用场景 MQTT协议应用场景

阅读更多

PC和Android模拟器之间虚拟串口通信

前言

很多时候我们在做串口通信的时候需要去模拟串口来调试,这样可以极大的方便我们的工作,不然的话可能需要连接硬件设备,比较麻烦。一般情况下我们先在电脑上模拟串口后初步调试,最后阶段在硬件设备上实际调试。

工具介绍

Virtual Serial Port Driver

Virtual Serial Port Driver Virtual Serial Port Driver

该软件提供虚拟串行端口的仿真,并通过虚拟零调制解调器电缆对可用的串行端口进行配对。与此软件配对的两个应用程序可以交换数据。每个端口上的每个数据都显示在计算机的设备管理器中以便查看,同时COM端口模拟其预期设置和运行进程。用户可以创建虚拟端口,而不必担心串行端口不足和物理硬件拥挤。该软件的下一个优势是能够与ActiveX、DDL和核心级实用程序等技术集成。

官网地址:https://www.virtual-serial-port.org/

阅读更多

Modbus 的 ASCII 和 RTU 通信

Modbus介绍

Modbus 协议是应用于电子控制器上的一种通用语言。通过此协议,控制器相互之间、控制器经由网络(例如以太网)和其它设备之间可以通信。Modbus协议定义了一个控制器能认识使用的消息结构,而不管它们是经过何种网络进行通信的。它描述了一控制器请求访问其它设备的过程,如果回应来自其它设备的请求,以及怎样侦测错误并记录。它制定了消息域格局和内容的公共格式。

Modbus 是一个请求/应答协议。也叫做 SlaveMasterServerClient

同一种设备在不同领域的不同叫法,SlaveServer 意思相同,MasterClient 意思相同。

  • Slave:工业自动化用语;响应请求;
  • Master:工业自动化用语;发送请求;
  • Server:IT用语;响应请求;
  • Client:IT用语;发送请求;

协议分类

ModBus 协议是应用层报文传输协议(OSI 模型第 7 层),它定义了一个与通信层无关的协议数据单元(PDU),即 PDU = 功能码 + 数据域。     

Modbus通信栈 Modbus通信栈

阅读更多

Android中的串口通信

串口通讯

在计算机之间、计算机内部各部分之间,通信可以以串行和并行的方式进行。一个并行连接通过多个通道(例如导线、印制电路布线和光纤)在同一时间内传播多个数据流;而串行在同一时间内只连接传输一个数据流

虽然串行连接单个时钟周期能够传输的数据比并行数据更少,前者传输能力看起来比后者要弱一些,实际的情况却常常是,串行通信可以比并行通信更容易提高通信时钟频率,从而提高数据的传输速率。

串口通讯和并行通讯的区别 串口通讯和并行通讯的区别

可以从上图看到,并行通讯可以一次传输8字节的数据,而串口一次只传输一个字节。但是通常串行通信都凭借其更低廉的部署成本成为更佳的选择,尤其是在远距离传输中。许多集成电路都具有串行通信接口来减少引脚数量,从而节约成本。

串口通讯的接口标准有很多,最常见的为RS-232、RS-485和USB等,下面我们看一下RS-232的接口标准。

串口通讯示意图 串口通讯示意图

阅读更多