
RT-Thread学习笔记
文章平均质量分 80
雨田2017
这个作者很懒,什么都没留下…
展开
-
1.RT-Thread目录框架和启动过程分析
rt-thread启动过程: 1、运行启动代码startup_stm32f10xxx.s 2、从启动代码进入rt-thread系统的_main函数(非用户main函数,不是main.c文件中的main函数)(components.c第147行) (1)关闭全局中断 (2)启动rt-thread(进入rtthread_startup函数) 3、在rtthread_startup函数中 (1)板级硬件...原创 2018-05-28 22:25:21 · 3505 阅读 · 0 评论 -
11.RT-Thread中的事件机制-event
事件是信号量的扩展,在很多情况下可以用事件代替信号量的同步,事件可以一对一、一对多、多对一、多对多。一个线程可等待多个事件的触发:可以是其中任意一个事件唤醒线程进行事件处理的操作;也可以是几个事件都到达后才唤醒线程进行后续的处理;同样,事件也可以是多个线程同步多个事件,这种多个事件的集合可以用一个32位无符号整型变量来表示,变量的每一位代表一个事件,线程通过“逻辑与”或“逻辑或”与一个或多个...原创 2018-06-24 22:18:00 · 4823 阅读 · 0 评论 -
6.堆(动态内存 heap)的初始化和使用
堆:先进先出 FIFO:First in first out 手动分配、释放栈:后进先出 FILO:First in last out 自动分配释放裸机情况下使用动态内存heap:在启动文件(startup_stm32f103xe.s)中调整:Heap_Size EQU 0x00000200然后用malloc()获取在RT-Thread中,如果在rtconfig.h中定义...原创 2018-06-14 16:36:15 · 3926 阅读 · 0 评论 -
5.中断和临界区的保护
临界区:访问公共资源的代码,在某一个时刻,只能有一个任务能访问公共资源,独占CPUuint32_t value;任务1funca(){value++;value+=10;}任务2funcb(){value++;}在以上2个任务中,如果任务1运行过程中任务2也运行了,那么得到的value值可能是错误的。uint32_t value;//RT-Thread使用pend_sv中断来进行任务的切换任务1f...原创 2018-06-14 15:02:26 · 1929 阅读 · 1 评论 -
4.空闲任务与钩子函数
CPU使用率的计算,先去统计CPU的空闲率,100%-空闲率=CPU使用率。临界区的概念:临界区有进入和退出操作,在进入临界区和退出临界区这段时间内执行的代码是独享CPU使用权的!rt_enter_critical(); //进入临界区tick = rt_tick_get();while (rt_tick_get() - tick < 10){ total_count ++;...原创 2018-06-14 10:57:22 · 1257 阅读 · 0 评论 -
2.RT-Thread中的跑马灯
/* * 程序清单:跑马灯例程 * * 跑马灯大概是最简单的例子,就类似于每种编程语言中程序员接触的第一个程序 * Hello World一样,所以这个例子就从跑马灯开始。创建一个线程,让它定时地对 * LED进行更新(关或灭) *//* * 程序清单:跑马灯例程 * * 跑马灯大概是最简单的例子,就类似于每种编程语言中程序员接触的第一个程序 * Hello World一样,所以这个例子就...原创 2018-06-14 10:34:59 · 1316 阅读 · 0 评论 -
10.消息队列的使用
1.邮箱和消息队列的区别:邮箱发送的是内存地址(指针传递),并没有进行内存赋值,如果邮箱发送缓冲区变成局部变量,如果函数退出之后,这些局部变量就被回收了,发送的东西肯定是不对的,邮箱发送的地址不要放在局部变量中。消息队列可以直接复制内存块到另外一个内存块,传送的是内存中的内容。消息队列可以直接用局部变量作为buffer。邮箱大小固定4字节,消息队列大小不固定,用户自定义,如果定义消息队列大小为4字...原创 2018-06-13 22:02:28 · 1399 阅读 · 1 评论 -
9.邮箱的使用
1.例说邮箱单个邮箱大小的限制:4字节,邮箱总大小:用户设置sizeof()/42.例程源码解析及邮箱的相关操作 init初始化/creat创建 发送 接收 detach脱离/delete删除邮箱控制块与存放邮件的内存池创建/* 邮箱控制块 */static struct rt_mailbox mb;/* 用于放邮件的内存池 */static ...原创 2018-06-13 20:09:38 · 476 阅读 · 0 评论 -
8.互斥量的使用--mutex
1.举例理解互斥锁 停车场(只有一个停车位)---------------- car1----------------car1进去后给停车场上锁,其他车就进不去了。car2 car3 car4 同时只能有一个线程占有公共资源。互斥锁是一种保护共享资源的方法。当一个线程拥有互斥锁的时候,另一个线程若是等待锁, 则其就会被挂起,从而保证只有一个线程会操作共享数据。2.例...原创 2018-06-13 16:12:53 · 1348 阅读 · 0 评论 -
3.RT-Thread线程的创建与删除,动态线程、静态进程
在实际应用中,经常添加多个 .c 文件和 .h 文件,RT-Thread有一套成熟的自动构建系统--Scon,它会自动添加你的.c和.h文件到你的工程中,Scon工具根据package-kernel目录下的SConscripts构建工程。添加RTT_ROOT(rtt的源码目录)环境变量cmd命令行中构建rt_thread_creatert_thread_startuprt_thread_delet...原创 2018-05-30 15:06:57 · 7274 阅读 · 0 评论 -
7.RTT信号量的使用
1.IPC(inter process communication) RTT中的IPC:信号量、互斥锁、信号、消息队列、邮箱2.理解信号量(semaphore ) 停车场-----------------------------1 2 3----------------------------- ...原创 2018-06-13 10:26:52 · 1535 阅读 · 0 评论 -
12.RT-Thread生产者消费者问题-IPC对象
生产者消费者问题:线程同步问题生产者--->产品(带缓冲区)--->消费者生产者生产产品放到缓冲区,消费者从缓冲区拿产品消费,当缓冲区中产品满了之后,生产者会挂起,只有当消费者消费了一个产品之后,缓冲区产生一个空位,生产者才会继续生产。对于缓冲区的访问是互斥的,缓冲区满了生产者要挂起,缓冲区空了消费者要挂起。使用RT-Thread任务同步的相关机制给出一个生产者-消费者模型/* * ...原创 2018-07-03 11:07:11 · 658 阅读 · 0 评论