![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
操作系统
流云IoT
这个作者很懒,什么都没留下…
展开
-
IOT-OS之RT-Thread(十七)--- 如何使用HTTP协议实现OTA空中升级
一、Bootloader OTA 原理Bootloader 框架底层由Flash 驱动提供ROM 或Flash 分区访问的能力,为搬移固件代码提供支持。Bootloader 还应提供解密、解压缩、必要的校验功能,经校验通过后将更新版本代码写入或搬移到Application 分区覆盖正在使用的固件代码,这就完成了固件升级过程。二、HTTP OTA Downloader 实现三、Bootloader OTA 示例原创 2020-06-25 00:13:33 · 9954 阅读 · 3 评论 -
ARM 代码烧录方案与原理详解 --- SWD/JTAG + Bootloader + OTA (ICP + ISP + IAP)
一、ICP(In Circuit Programing):可通过CPU的Debug Access Port 烧录代码,比如ARM 的SWD或JTAG;二、ISP(In System Programing):可借助MCU厂商预置的Bootloader 实现通过板载UART或USB接口烧录代码,比如STM32的System memory可预置ISP代码;三、IAP(In Applicating Programing):由开发者实现Bootloader功能,可提供代码烧录、差分升级、空中升级、一键恢复等功能。原创 2020-06-22 21:03:48 · 25392 阅读 · 4 评论 -
IOT-OS之RT-Thread(十六)--- WLAN管理框架 + AP6181(BCM43362) WiFi模块
一、WLAN管理框架简介随着物联网快速发展,越来越多的嵌入式设备上搭载了 WIFI 无线网络设备,为了能够管理 WIFI 网络设备,引入了 WLAN 设备管理框架:对下连接具体的 WIFI 驱动,控制 WIFI 的连接、断开、扫描等操作;对上承载不同的应用,为应用提供 WIFI 控制、事件、数据导流等操作。二、WLAN Device实现与AP6181 WLAN驱动移植三、WLAN Protocol实现与LwIP协议栈移植四、WLAN Config 管理与自动连接六、WIFI与Socket网络开发原创 2020-04-10 20:45:28 · 18216 阅读 · 5 评论 -
IOT-OS之RT-Thread(十五)--- SDIO设备对象管理 + AP6181(BCM43362) WiFi模块
一、AP6181 Wi-Fi模块简介 AP6181 Wi-Fi 模组内部实际封装的是Broadcom 43362 芯片,该芯片内部是集成了ARM处理器及RAM/ROM存储空间的,用于运行 Wi-Fi 固件。AP6181 模块是基于SDIO 总线协议进行通信的,因此模块与主控端最底层应该分别是SDIO Card controller与Host controller。二、SDIO设备对象管理三、SDIO 驱动配置原创 2020-04-07 19:41:10 · 16491 阅读 · 2 评论 -
IOT-OS之RT-Thread(十四)--- AT命令集 + ESP8266 WiFi模块
一、AT命令集简介AT 命令(Attention Commands)作为主芯片和通讯模块的协议接口,广泛应用于嵌入式开发领域,比如GPRS模块、3G 模块、WiFi/蓝牙/GPS模块等,这些网络扩展模块的硬件接口一般为串口,这样主控设备可以通过简单的命令和硬件设计实现多种网络服务功能。 为了方便用户使用 AT 命令,简单的适配不同的 AT 模块, RT-Thread 提供了 AT 组件用于 AT 设备的连接和数据通讯。二、ESP8266 WiFi模块简介三、AT组件实现原理与ESP8266模块移植原创 2020-03-24 23:23:24 · 8673 阅读 · 2 评论 -
IOT-OS之RT-Thread(十三)--- 网络分层结构 + netdev/SAL原理
一、网络分层结构我们单独介绍网络协议栈时,经常使用TCP/IP分层结构,方便了解每一层的作用及实现原理。但当我们在操作系统中使用网络协议栈(比如LwIP协议栈)时,常把其看作一个整体,只关心协议栈对下层硬件与上层应用的接口,并不关心协议栈内部具体的实现过程。二、RT-Thread网络分层结构2.1 ENC28J60设备驱动层2.2 设备无关接口层netdev2.3 网络协议层LwIP2.4 协议无关接口层SAL2.5 系统调用接口层Socket API三、HTTP Server示例程序原创 2020-03-18 21:33:36 · 6350 阅读 · 0 评论 -
IOT-OS之RT-Thread(十二)--- 驱动分层与主从分离思想
一、驱动分层思想通过前面对RT-Thread设备模型框架,以及UART、IIC、SPI 等设备驱动实现过程的介绍,我们应该对驱动分层思想并不陌生了。操作系统为什么对设备驱动采用分层管理呢?驱动分层有什么好处呢?二、主从分离思想总线类型或主机控制器是跟SOC或CPU芯片平台相关的,外设或从设备是跟具体的硬件设备相关的。如果将主机控制器驱动与外设驱动分开描述管理,能在更换CPU/SOC和硬件外设时,更方便的进行驱动移植,极大减少驱动新增开发量,这就是Linux提出的总线设备驱动模型。原创 2020-03-12 23:52:33 · 4268 阅读 · 0 评论 -
TCP/IP协议栈之QEMU(零)--- LwIP开发调试环境搭建
一、QEMU环境搭建嵌入式软件开发离不开开发板,在没有物理开发板的情况下,可以使用 QEMU 等类似的虚拟机来模拟开发板。QEMU 是一个支持跨平台虚拟化的虚拟机,它可以虚拟很多开发板。为了方便大家在没有开发板的情况下体验 RT-Thread,RT-Thread 提供了 QEMU 模拟的 ARM vexpress A9 开发板的板级支持包 (BSP), 我们可以在此基础上学习LwIP协议栈的开发...原创 2019-11-22 01:01:21 · 3305 阅读 · 0 评论 -
IOT-OS之RT-Thread(八)--- IIC设备对象管理与Sensor管理框架
一、IIC协议简介1.1 IIC总线简介I2C(Inter Integrated Circuit)总线是 PHILIPS 公司开发的一种半双工、双向二线制同步串行总线。I2C 总线传输数据时只需两根信号线,一根是双向数据线 SDA(serial data),另一根是双向时钟线 SCL(serial clock)。SPI 总线有两根线分别用于主从设备之间接收数据和发送数据,而 I2C 总线只使用...原创 2019-11-19 00:46:59 · 2605 阅读 · 2 评论 -
IOT-OS之RT-Thread(十一)--- FAL分区管理与easyflash变量管理
FAL (Flash Abstraction Layer) Flash 抽象层,是对 Flash 及基于 Flash 的分区进行管理、操作的抽象层,对上层统一了 Flash 及 分区操作的 API。FAL抽象层位于SFUD框架的上层,可以将多个Flash硬件(包括片内Flash和片外Flash)统一进行管理,并向上层比如DFS文件系统层提供对底层多个Flash硬件的统一访问接口,方便上层应用对底层硬件的访问操作。原创 2019-10-24 01:17:11 · 13303 阅读 · 9 评论 -
IOT-OS之RT-Thread(十)--- DFS文件系统管理与devfs/elmfat示例
文件系统是一套实现了数据的存储、分级组织、访问和获取等操作的抽象数据类型 (Abstract data type),是一种用于向用户提供底层数据访问的机制。文件系统通常存储的基本单位是文件,即数据是按照一个个文件的方式进行组织。当文件比较多时,将导致文件繁多,不易分类、重名的问题。而文件夹作为一个容纳多个文件的容器而存在。原创 2019-10-22 20:14:35 · 7636 阅读 · 0 评论 -
IOT-OS之RT-Thread(九)--- SPI设备对象管理与SFUD管理框架
一、SPI设备对象管理前篇博客介绍了I/O设备模型框架,并以PIN设备驱动框架为例说明了RT-thread I/O设备模型框架的实现原理,下面以SPI设备驱动框架为例再做进一步介绍。SPI设备与QSPI设备CubeMX配置及HAL API库函数的使用可参考博客:SPI + QSPI + HAL。最上层的I/O设备管理层在前篇博客已经介绍过了,下面从中间的SPI设备驱动框架层开始介绍。1.1...原创 2019-10-19 00:52:17 · 5797 阅读 · 1 评论 -
IOT-OS之RT-Thread(七)--- I/O设备模型框架与PIN设备对象管理
一、I/O设备模型RT-Thread中对于I/O设备的抽象是很有特点一个地方,是ucos,freertos都没有的一个地方。RT-Thread提供了一个简单的I/O设备管理框架,希望所有的I/O设备驱动都通过这个框架编写,实现统一的管理。RT-Thread 提供的 I/O 设备模型框架如下图所示,它位于硬件和应用程序之间,共分成三层,从上到下分别是 I/O 设备管理层、设备驱动框架层、设备驱动层:原创 2019-09-25 20:26:18 · 3180 阅读 · 0 评论 -
IOT-OS之RT-Thread(六)--- 线程间同步与线程间通信
二、IPC对象管理2.1 IPC对象控制块再回顾下内核对象的派生和继承关系:前面已经介绍过直接继承自基对象rt_object的定时器对象rt_timer、内存池对象rt_mempool、线程对象rt_thread,下面要介绍线程间的同步与通信,线程间同步对象rt_sem / rt_mutex / rt_event和线程间通信对象rt_mb / rt_mq都直接继承自rt_ipc_objec...原创 2019-09-21 21:55:03 · 2246 阅读 · 0 评论 -
RTOS之UCOS(二)---任务调度器
一、什么是任务调度器1.1 多任务并行机制对很多人来说,多任务并行机制挺神秘的,甚至对很多有多线程并发编程经验的工程师来说也是如此。前面我用五篇文章谈了C++多线程并发编程的原理与技巧,但对操作系统的多任务并行机制并没有过多阐述。现在回顾下从单任务顺序执行到多任务并行执行的演变过程,有利于打破多任务并行机制的神秘感。多任务并行机制从技术上来说就是程序流折断 + 现场(在操作系统里叫上下文)保...原创 2019-06-03 00:14:51 · 2936 阅读 · 2 评论 -
RTOS之UCOS(一)--- 有限状态机
一、什么是有限状态机有限状态机(FSM: Finite-state machine)是一种用来进行对象行为建模的工具,其作用主要是描述对象在它的生命周期内所经历的状态序列,以及如何响应来自外界的各种事件。它把复杂的控制逻辑分解成有限个稳定状态,在每个状态上判断事件,变连续处理为离散数字处理,符合计算机的工作特点。同时,因为有限状态机具有有限个状态,所以可以在实际的工程上实现。但这并不意味着其只能进行有限次的处理,相反,有限状态机是闭环系统,有限无穷,可以用有限的状态,处理无穷的事务。在计算机科学中,有限原创 2019-05-30 21:56:54 · 4545 阅读 · 3 评论 -
RTOS之UCOS(六)---系统启动与固件移植
一、系统启动前面介绍了操作系统的工作原理,操作系统可以看作是应用程序与底层硬件中间的管理层,对下管理各硬件设备,对上服务各应用程序。对于应用程序的编写,学习编程语言时大家就不陌生了,如果想编写多线程并发的应用程序,之前也有一个系列介绍:C++多线程并发编程,这里就不介绍上层应用程序的开发了,本文把重点放到操作系统与硬件之间的交互上。访问硬件主要是靠操作该硬件相关的寄存器实现的,前面介绍ARM中...原创 2019-06-26 01:42:13 · 2013 阅读 · 0 评论 -
RTOS之UCOS(四)---中断管理与定时器
一、什么是中断前面谈到任务切换时,不管是任务级上下文切换还是中断级任务切换,都是通过悬起PendSV异常,引发一个异常中断实现任务切换的。谈到状态机时也提到状态机是事件驱动的,而这里的事件一般指的是中断触发信号,实际要执行的动作和状态迁移是在事件中断处理函数中进行的。不管是操作系统的任务切换,还是处理器与外设的I/O数据通信,甚至操作系统与用户操作的交互,都离不开中断系统的支持,那么什么是中断呢...原创 2019-06-13 08:56:27 · 3113 阅读 · 0 评论 -
RTOS之UCOS(五)---存储管理与虚拟内存
一、存储器寻址我们使用C语言开发程序时经常涉及到存储空间的分配和释放,常用malloc/free两个函数完成相应的操作(C++语言则使用new/delete)。那么,我们分配和释放的到底是什么呢?有点计算机基础的应该知道,分配和释放的是运行内存(RAM:Random Access Memory)。计算机的主要作用是对输入数据进行处理和运算后输出,处理器主要完成数据的处理运算,但输入输出数据包括处...原创 2019-06-18 20:19:10 · 2565 阅读 · 1 评论 -
RTOS之UCOS(七)---UCOS系统移植
经过前一篇文章固件库的移植,我们的处理器就能完成从上电复位到进入main函数的过程,在main函数中初始化我们要用到的外设,并完成外设的中断处理函数。如果我们需要处理器完成的任务比较单一,可以不使用操作系统,比如BLE协议栈应用开发就是用了状态机模型,但如果需要处理器完成的任务比较多,为了便于管理可以引入轻巧的实时操作系统,下面以UCOS-II为例介绍下实时操作系统的移植。1. UCOS的底层支...原创 2019-06-26 22:56:03 · 2869 阅读 · 0 评论 -
IOT-OS之RT-Thread(一)--- 系统启动与初始化过程
一、RT-Thread简介1.1 IOT-OS简介之前已经介绍过RTOS(Real Time Operating System)的原理并分析过UCOS的源码(系列博客链接:https://github.com/StreamAI/UCOS_STM32),这里介绍的IOT-OS(Internet of Things Operating System)跟RTOS有什么区别呢?简单讲,传统RTOS只...原创 2019-09-10 00:40:41 · 7156 阅读 · 0 评论 -
IOT-OS之RT-Thread(二)--- CPU架构与BSP移植过程
一、RT-Thread内核简介将RT-Thread内核移植到某款芯片或板卡上,可以分为两大部分:CPU芯片移植和板级支持包BSP移植。RT-Thread为了能更方便的在不同CPU架构和不同板卡上移植,分别抽象出libcpu抽象层和BSP设备驱动层,两个抽象层向上对内核提供统一的调用接口,向下分别提供一套CPU架构和BSP移植接口,方便用户将RT-Thread移植到多数CPU架构和板卡上,降低了移植难度和工作量。原创 2019-09-13 00:48:48 · 4679 阅读 · 1 评论 -
IOT-OS之RT-Thread(三)--- C语言对象化与内核对象管理
一、RT-thread内核对象模型RT-Thread的内核对象模型是一种非常有趣的面向对象实现方式。由于C语言更为面向系统底层,操作系统核心通常都是采用C语言和汇编语言混合编写而成。C语言作为一门高级计算机编程语言,一般被认为是一种面向过程的编程语言:程序员按照特定的方式把要处理事物的过程一级级分解成一个个子过程。面向对象源于人类对世界的认知多偏向于类别模式,根据世界中不同物品的特性分门别类的组织在一起抽象并归纳,形成各个类别的自有属性。原创 2019-09-14 14:37:15 · 2787 阅读 · 4 评论 -
IOT-OS之RT-Thread(四)--- 时钟管理与内存管理
操作系统要想协调好各线程的调度管理,离不开时间与空间的管理:时间管理主要靠时钟节拍systick实现,时钟节拍是特定的周期性中断,这个中断可以看做是系统心跳(心跳频率一般设为10-1000HZ,时钟节拍率越快,系统额外开销越大),供系统处理所有和时间有关的事件,如线程的延时、线程的时间片轮转调度以及定时器超时等;空间管理主要是对可用存储空间的管理,一般MCU的存储空间可分为片内RAM与片内FLAS...原创 2019-09-17 23:55:26 · 1506 阅读 · 0 评论 -
IOT-OS之RT-Thread(五)--- 线程调度器与线程对象管理
之前的博客UCOS任务调度器与UCOS任务间通信介绍了多任务并行机制、任务调度原理、任务间同步、任务间通信等的实现原理,本文主要从RT-Thread与UCOS的对比与差异看RT-Thread线程管理与线程间同步/通信的实现。一、线程对象管理RT-Thread 线程管理的主要功能是对线程进行管理和调度,系统中总共存在两类线程,分别是系统线程和用户线程,系统线程是由 RT-Thread 内核创建的...原创 2019-09-21 12:06:41 · 2312 阅读 · 0 评论 -
RTOS之UCOS(三)---任务间同步与通信
一、临界区保护之前谈到C++多线程并发编程时就强调过线程同步的问题,现在操作系统进行多任务调度时自然也少不了任务同步的问题,前面谈线程同步时已经讲清楚了如何防止共享资源的并发访问,任务同步的情况与此类似,就不再赘述了。线程同步中防止共享资源并发访问的方法主要是使用锁机制或原子操作,操作系统任务同步中主要也是加锁和原子操作,但多出了一个临界区的概念,所谓临界区(也称为临界段),就是访问和操作共享...原创 2019-06-05 23:08:31 · 2437 阅读 · 0 评论