前言
进程?线程?并发?并行?主线程?子线程?主线程中创建子线程?每个线程就是一个死循环?
进程 = 多个线程,每个线程可以写一个死循环处理一个需要循环执行的代码块!!
每个线程即一个任务task,任务调度器进行任务调度,即线程调度。
task可以认为自己独占一颗CPU,所以可以实现为一个死循环。
为什么要任务调度(线程调度)??因为每一个线程中都有需要循环执行的代码即死循环,所以需要给所有任务分配CPU的使用时间。
参考:https://baijiahao.baidu.com/s?id=1666649642161715999&wfr=spider&for=pc
RTOS的基本概念与线程基础知识
https://blog.csdn.net/qq_43460068/article/details/126896489
RTOS基础知识
https://blog.csdn.net/Chase_xkx/article/details/127227335
实时系统与分时系统?硬实时?软实时?
https://blog.csdn.net/Ivan804638781/article/details/114239343
实时性操作系统的特点
①异步的事件响应;
②切换时间和中断延迟时间确定;
③优先级中断和调度;
④抢占式调度。
RTOS原理与实现01:RTOS基础知识
前后台式编程(裸机、单机、一个main函数包一个while循环)?缺点?
基于RTOS的编程?区别?
- 任务函数不需要返回,任务函数中有一个死循环,task可以认为自己独占一颗CPU,所以可以实现为一个死循环。
- 提供资源管理与通信组件
提供一些组件用于简化任务对资源的访问,事件的处理,以及任务之间的通信,有效降低任务之间的代码耦合
https://blog.csdn.net/chenchengwudi/article/details/115473104
基于RTOS的线程开发 概述
int a;
喂饭() 栈A
{
int b=2;
int c;
c = a+b;==>1.b+2,2,c=new val
while(1) 线程A要执行的循环代码
{
喂一口饭();
}
}
回信息() 栈B
{
int b;
while(1) 线程B要执行的循环代码
{
回一个消息();
}
}
void main() 主线程
{
create_task(喂饭); 创建线程A
create_task(回信息); 创建线程A
start_scheduler(); 开始任务调度(线程调度)
while(1) 线程B要执行的循环代码
{
sleep();
}
}
要点:
- 一般main函数会被创建成一个线程,即主线程;
- 三个线程:主线程,线程A,线程B,AB是主线程的子线程;
- 主线程创建了AB线程;
- 线程函数一般不会有返回return,因为有需要循环执行的代码,即while或for;
- 主线程与子线程的关系??共享一些东西?可以相互访问一些东西??此结论待确定!!
- 为什么要任务调度(线程调度)?因为每一个线程中都有需要循环执行的代码即死循环,所以需要给所有任务分配CPU的使用时间。
实时操作系统组件
- 计划进程:保证最高优先级线程正在运行的抢占式计划进程。
- 通信机制:信号量、消息队列、队列等。
- 关键区域机制:互斥体、门、锁等。
- 计时服务:时钟、定时器等。
- 电源管理:对于低功耗设备,电源管理通常是RTOS的一部分,因为它知道设备的状态。
- 内存管理:可变大小的堆、固定大小的堆等。
- 外设驱动器:UART、SPI、I2C等。
- 协议栈:蓝牙、无线网络等。
- 文档系统:FatFs等。
- 设备管理:异常处理、启动等。
POSIX
POSIX(Portable Operating System Interface):可移植操作系统接口
SimpleLink SDK在TI-RTOS和FreeRTOS之上提供POSIX支持。这允许应用进程独立于底层RTOS。
POSIX API是底层实时操作系统之上的一个小填充码。创建POSIX线程时,将创建基础TI-RTOS(或FreeRTOS)任务。同样,在创建。POSIX线程信号量时,将创建TI-RTOS(或FreeRTOS)信号量。
POSIX支持的一个很好的功能是能够从网络上获取基于POSIX的代码并快速使其正常工作。
POSIX不是实时操作系统。它是一个操作系统兼容性层,允许应用进程在操作系统之间轻松移植。
线程通信:信号量、消息队列
- 信号量允许资源管理。任务可以在sem_wait()上阻塞,直到资源变得可用(通过sem_post())。一个常见的用例是Hwi接收数据并发布信号量,以便任务可以处理它。这是可取的,因为它可以最大限度地减少中断的持续时间。大多数RTOS都支持二进制和计数信号量。
- 消息队列对于在线程之间发送数据非常有用。
信号量
https://blog.csdn.net/weixin_43914272/article/details/108317212
消息队列
https://blog.csdn.net/qq_33471732/article/details/129372965
关于参考文献
文中的所有网址都是参考文献,请自行参阅