RT-Thread 嵌入式系统
诺亚方包
这个作者很懒,什么都没留下…
展开
-
RT-Thread 内核学习 >> (一)源码文件及启动过程介绍
RT-Thread 源代码srcRT-Thread 所有内核源代码libcpu所支持的各类芯片/内核的移植文件includeRT-Thread 内核头文件componentsRT-Thread 的外部组件drivers设备驱动驱动结构finshRT-Thread 的命令行工程源码文件作用applications用户应用代码driv...原创 2019-04-05 18:48:29 · 1056 阅读 · 0 评论 -
RT-Thread 内核学习 >> (十二)事件集的使用
线程的唤醒可根据事件的发生进行分类:特定事件唤醒线程;任意单个事件唤醒线程;多个事件同时发生唤醒线程;事件集工作机制信号量主要用于“一对一”的线程同步;当需要“一对多”、“多对一”、“多对多”的同步时,就需要事件集来处理了。RT-Thread 中的事件集用一个32位无符号整型变量来表示,变量中的一个位代表一个事件,线程通过“逻辑与”或“逻辑或”与一个或多个事件建立关联形成一个事件...原创 2019-04-07 14:55:55 · 683 阅读 · 0 评论 -
RT-Thread 内核学习 >> (十三)邮箱的使用
邮箱工作机制RT-Thread 操作系统的邮箱用于线程间通信,特点是开销比较低,效率较高。邮箱中的每一封邮件只能容纳固定的4字节内容(针对32位处理器系统,指针大小即为4个字节,所以一封邮件恰好能够容纳一个指针)。线程或ISP(中断服务程序)把一封4字节长度的邮件发送到邮箱中,而其他需要的线程可以从邮箱中接收这些邮件并进行处理。邮箱控制块struct rt_mailbox{ s...原创 2019-04-07 16:07:47 · 2942 阅读 · 2 评论 -
RT-Thread 内核学习 >> (十四)消息队列的使用
消息队列工作机制消息队列是RT-Thread 中另一种常用的线程间通信方式,消息队列是对邮箱的扩展。消息队列能够接收到来自线程或ISP(中断服务程序)中发出的不固定长度的消息,并把消息缓存在自己的内存空间中,而其他线程能够从消息队列中读取相应的消息并进行对应的处理。等待线程队列就是从消息链表头中获取消息。当有线程或ISP 发送消息到消息队列时,系统会从空闲链表中取到一个空闲消息框,然后将...原创 2019-04-07 17:09:25 · 1878 阅读 · 0 评论 -
RT-Thread 内核学习 >> (十五)软件定时器的使用
软件定时器简介软件定时器是由操作系统提供的一类系统接口,它构建在硬件定时器基础之上(系统滴答定时器)。软件定时器使系统能够提供不受数目限制的定时器服务。RT-Thread 操作系统提供的软件定时器,以系统节拍(OS Tick)的时间长度为定时单位,提供了基于系统节拍整数倍的定时能力,即定时数值是OS Tick 的整数倍。当软件定时器所设定的定时时间到了后,会调用用户设置的定时器timeout...原创 2019-04-07 18:14:45 · 1877 阅读 · 2 评论 -
RT-Thread 内核学习 >> (十六)内存池的使用
内存池简介之前讲的动态内存堆可以分配任意大小的内存块,非常灵活和方便。但其存在明显的缺点:分配效率不高,在每次分配时都要进行空闲内存块查找;容易产生碎片。为了提高内存分配效率,并且避免内存碎片,RT-Thread 提供了另外一种内存管理方法:内存池(Memory Pool)内存池是一种内存分配方式,用于分配大量大小相同的小内存块。使用内存池可以极大地加快内存分配与释放的速度,并且能尽...原创 2019-04-07 20:46:46 · 1428 阅读 · 2 评论 -
RT-Thread ENV学习 >> 简介
env 是RT-Thread 推出的开发辅助工具,针对基于RT-Thread 操作系统的项目工程,提供编译构建环境、图形化系统配置及软件包管理三大功能。其内置的menuconfig 提供了简单易用的配置剪裁工具,可对内核、组件和软件包进行自由裁剪,使系统以搭积木的方式进行构建。准备工作Git:安装并设置环境变量ENV:前往RT-Thread 官网下载RTT 源码:GitHub/OSChi...原创 2019-04-23 23:10:32 · 610 阅读 · 0 评论 -
RT-Thread ENV学习 >> 编译与配置项目
编译项目:scons进入BSP 目录scons 生成IAR/MDK 工程scons 编译原创 2019-04-24 14:55:39 · 485 阅读 · 0 评论 -
RT-Thread ENV学习 >> 软件包管理:pkgs
软件包管理:pkgs为开发者提供可重用的软件包开发者也可以提交自己的软件包官方软件包仓库:https://github.com/RT-Thread-packages支持软件包下载、更新、删除...原创 2019-04-24 15:37:42 · 1223 阅读 · 0 评论 -
RT-Thread 内核学习 >> (十一)线程的优先级翻转
优先级翻转使用信号量会导致的另一个潜在问题是线程优先级翻转问题。所谓线程优先级翻转,即当一个高优先级线程试图通过某种互斥IPC 对象机制访问共享资源时,如果该IPC 对象已被一低优先级的线程所持有,而这个低优先级线程在运行过程中可能又被其他一些中等优先级的线程抢占,因此造成高优先级线程被许多具有较低优先级的线程阻塞的情况。例:一开始低优先级C 占用共享资源M,当高优先级A 达到运行条件准备...原创 2019-04-07 11:19:33 · 1498 阅读 · 0 评论 -
RT-Thread 内核学习 >> (十)互斥量的使用
什么是互斥量:厕所是共享资源,需要上厕所的人就是线程,而厕所门就起到了互斥量的作用。互斥量工作机制互斥量(互斥锁)是用于线程间互斥访问的IPC 对象,它是一种特殊的二值性信号量。当某个线程访问系统中的共享资源时,通过引入互斥量机制,可以保证其他线程无法取得对此共享资源的访问权。互斥量只有两种状态:LOCKED 和UNLOCKED,分别代表上锁和解锁两种情况。当有线程持有它时,互斥量处于上锁状...原创 2019-04-07 10:20:48 · 1038 阅读 · 2 评论 -
RT-Thread 内核学习 >> (九)生产者消费者问题
生产者消费者问题是一个经典的、多线程同步问题。有两个线程,一个生产者线程和一个消费者线程。双方共享一个初始为空、固定大小为n 的缓存区。生产者的工作是“生产”一段数据,只有缓存区没满时,生产者才能把消息放入到缓存区中,否则必须等待,如此反复;同时,只有缓存区非空时,消费者才能从中提取数据,一次消费一段数据,否则也必须等待,如此反复。问题核心是:要保证不让生产者在缓存还是满的时候...原创 2019-04-07 09:12:38 · 775 阅读 · 0 评论 -
RT-Thread 内核学习 >> (二)动态内存堆的使用
简述堆栈栈(stack)由编译器自动分配释放堆(heap)一般由程序员分配和释放int a = 0; /* 全局初始化区 */char *p1; /* 全局未初始化区 */main(){ int b; /* 栈 */ char s[] = "abc"; /* 栈 */ char *p2; /* 栈 */ char *p3 = "123456"; /* 123456 在常量区...原创 2019-04-05 21:13:29 · 863 阅读 · 0 评论 -
RT-Thread 内核学习 >> (三)线程的创建
线程的概念RT-Thread 名为实时线程RTOS在设计一个较为复杂的应用程序时,通常将一个大型任务分解成多个小任务,然后通过运行这些小任务,最终达到完成大任务的目的在RT-Thread 中,与上述小任务对应的程序实体就叫做“线程”(或任务),RT-Thread 就是一个能对这些小“线程”进行管理和调度的多“线程”操作系统线程是实现任务的载体,它是RT-Thread 中最基本的调度单位,它...原创 2019-04-06 07:41:18 · 727 阅读 · 0 评论 -
RT-Thread 内核学习 >> (四)跑马灯线程实例
线程状态切换在系统运行时,同一时间只允许有一个线程在运行从运行过程划分,RT-Thread 中的线程分为5种状态:初始状态就绪状态运行状态挂起状态关闭状态初始状态当调用rt_thread_create() 或rt_thread_init() 创建了动态线程或静态线程时,此时线程状态即处于初始状态。即刚创建完成的线程,还没有开始运行就是处于初始状态。就绪状态当创建完成的...原创 2019-04-06 10:52:42 · 969 阅读 · 0 评论 -
RT-Thread 内核学习 >> (五)线程的时间片轮询调度
优先级和时间片是线程的两个重要参数,分别描述了线程竞争处理器资源的能力和持有处理器时间长短的能力。线程优先级RT-Thread 最大支持256个优先级(数值越小,优先级越高。0为最高优先级,最低优先级预留给空闲线程)用户可以通过rt_config.h 中的RT_THREAD_PRIORITY_MAX 宏来修改最大支持的优先级;针对STM32 默认设置最大支持32个优先级;具体应用中,线程...原创 2019-04-06 11:25:55 · 1724 阅读 · 0 评论 -
RT-Thread 操作系统线程创建过程详解
在RT-Thread 操作系统的线程当中,一共有两种,一是静态线程,二是动态线程接下来通过RT-Thread 源码来讲解线程是如何创建的,以及这两种线程的区别:静态线程的创建首先贴出RT-Thread 有关静态线程创建的源码:/** * This function will initialize a thread, normally it's used to initialize a ...原创 2019-04-06 14:49:09 · 4029 阅读 · 0 评论 -
RT-Thread 内核学习 >> (六)空闲线程及两个常用的钩子函数
空闲线程是一个比较特殊的系统线程,它具备最低的优先级。当系统中无其他就绪状态线程可运行时,调度器将调度到空闲线程。空闲线程还负责一些系统资源的回收以及将一些处于关闭状态的线程从线程调度列表中移除的动作。空闲线程在形式上是一个无限循环结构,且永远不被挂起。在RT-Thread 实时操作系统中空闲线程向用户提供了钩子函数,空闲线程钩子函数可以让系统在空闲的时候执行一些非紧急事务,例如系统运行指示...原创 2019-04-06 17:55:27 · 1023 阅读 · 0 评论 -
RT-Thread 内核学习 >> (七)临界区保护
临界资源临界资源是指一次仅允许一个线程访问的共享资源。它可以是一个具体的硬件设备,也可以是一个变量、一个缓冲区。不论是硬件临界资源,还是软件临界资源,多个线程必须互斥地对它们进行访问。临界区每个线程中访问(操作)临界资源的那段代码称为临界区(Critical Section),我们每次只准许一个线程进入临界区。临界区保护关闭系统调度保护临界区禁止调度关闭中断禁止调度禁止调度...原创 2019-04-06 21:35:56 · 790 阅读 · 3 评论 -
RT-Thread 内核学习 >> (八)信号量的使用
进程间通信(IPC)在嵌入式系统中运行的代码主要包括线程和ISR(中断服务程序),在它们的运行过程中,它们的运行步骤有时需要同步(按照预定的先后次序运行),它们访问的资源有时需要互斥(一个时刻只允许一个线程访问资源),它们之间有时也要彼此交换数据。这些需求,有的是因为应用需求,有的是多线程编程模型带来的需求。操作系统必须提供相应的机制来完成这些功能,我们把这些机制统称为进(线)程间通信(Int...原创 2019-04-07 08:20:53 · 5011 阅读 · 0 评论 -
RT-Thread ENV学习 >> env 配置选项
env 配置选项项目配置完成后,自动更新、下载软件包项目配置完成后,自动生成、更新IAR/MDK 工程使用menuconfig 的要求RT-Thread 3.0+保证项目根目录下有Kconfig 文件在3.0 项目中使用env拷贝Kconfig 示例修改Kconfig从旧项目迁移到3.0备份rtconfig.hscons --genconfig 生成.confi...原创 2019-04-24 17:02:50 · 1080 阅读 · 0 评论