FreeRTOS学习——协同程序
来源:互联网 发布:角色扮演手游推荐知乎 编辑:程序博客网 时间:2024/04/28 16:01
FreeRROS的模块
- Co-routine协同程序
- Events事件
- FreeRTOS-MPU Specific
- FreeRTOS
- Kerner control内核控制
- List列表
- Queue Set队列设置
- Queues Managment队列管理
- Semphore/Mutexes信号量/互斥信号
- Software Timers软件定时器
- Task Control任务控制
- Task Creation任务创建
- Task Utilities任务应用程序
- Trace描述
基于FreeRTOS API Reference 8.1.2
一、什么事协同程序
'Co-routine'这是FreeRTOS开发组中的一个鸡肋,过去是应用在小设备上,目前基本上极少使用了!但是开发组不打算删除,但也不再优化和投入开发了!
协同程序从概念上将有点类似任务task,但个任务又有根本上的区别:
1)堆栈用量 所有的协同程序共用一个堆栈,对比task来说大大减少了RAM的需求;
2)时序和优先级 协同程序优先级时序遵从其他协同程序 ,但也可用于抢占式任务
3)宏实现 协同程序的执行时通过宏实现的;
4)限制条件 较小的RAM需求是以严格的约束如何协同为代价实现的;
二、协同程序的特点
协同程序总结:
- 协同程序共用一个堆栈,RAM占用少;
- 重入故障少;
- 架构便捷;
- 整体的优先级依赖于其他协同程序,但总是被任务抢占如果两者混用的时候
- 没有堆栈时需特殊考虑
- 限制API何处被调用;
- 协同程序只能在协同程序直接操作;
三、协同程序中的API:
- crDELAY 阻塞一个协同程序一段时间
- crQUEUE_RECEIVE 协同程序消息接收请求,类似同于任务中的消息接收请求
- crQUEUE_RECEIVE_FROM_ISR 协同程序来自中断服务程序中消息的接收请求,类似任务中的来自中断服务程序中消息的接收请求
- crQUEUE_SEND 协同程序消息发送,类似同于任务中的消息接收发送
- crQUEUE_SEND_FROM_ISR 协同程序从中断服务程序中消息的发送,类似任务中的从中断服务程序中消息的发送
- crSTART and crEND 开始和接收协同程序,分别位于每个协同程序的头和尾
- vCoRoutineSchedule 协同程序调度,
- xCoRoutineCreate 创建协同程序
四、具体实现
crDELAY( CoRoutineHandle_t xHandle, TickType_t xTicksToDelay );延时的是当前协同程序自己
参数:xHandle 被延时的协同程序的句柄
xTickToDelay 延时的时间长度,实际时间的数值是通过配置TICK_RATE_HZ (set in FreeRTOSConfig.h)定义的,也可以通过以下计算转换成ms.
xTickType xDelayTime = 200 / portTICK_PERIOD_MS表征的是200ms
crQUEUE_RECEIVE(
CoRoutineHandle_t xHandle,
QueueHandle_t pxQueue,
void *pvBuffer,
TickType_t xTicksToWait,
BaseType_t *pxResult
)
CoRoutineHandle_t xHandle,
QueueHandle_t pxQueue,
void *pvBuffer,
TickType_t xTicksToWait,
BaseType_t *pxResult
)
参数:xHandle 接收的协同程序句柄
pxQueue 被接收消息队列的句柄,一般是API xQueueCreate()的返回值;
pvBuffer 被接收消息队列的缓存器,数据长度消息队列创建时已知
xTicksToWait 等待接收消息的滴答时间数
pxResult 从消息队列中重读数据的结果,成功/失败
crQUEUE_SEND_FROM_ISR(
QueueHandle_t pxQueue,
void *pvBuffer,
BaseType_t * pxCoRoutineWoken
)
QueueHandle_t pxQueue,
void *pvBuffer,
BaseType_t * pxCoRoutineWoken
)
参数:pxQueue 被发送出来的消息队列的句柄
pvBuffer 拷贝接收数据的缓存,数据长度消息队列创建时已知
pxCoRoutineWoken 协同程序被阻塞一段时间等待消息队列
返回:接收成功和失败,pdTRUE 或者pdFALSE
1 0
- FreeRTOS学习——协同程序
- Lua学习笔记四——协同程序coroutine
- Lua学习笔记(三)——协同程序
- Lua学习笔记 第九章 协同程序 —— coroutine
- Unity3D学习记录——API IEnumerator(协同程序)
- FreeRTOS学习笔记——链表
- FreeRTOS学习笔记——创建任务
- FreeRTOS学习笔记——任务延时
- FreeRTOS学习笔记——SysTick中断
- FreeRTOS学习笔记——精准延时
- FreeRTOS学习笔记——二值型信号量
- FreeRTOS学习笔记——互斥型信号量
- unity3d协同程序学习笔记
- Lua中的协同程序——coroutine
- Lua—第9章协同程序
- Lua学习笔记(四)—— 协同程序的参数传递
- Lua 学习笔记(七) —— 协同程序(一)
- Lua 学习笔记(七) —— 协同程序(二)
- HDU3306 -- Another kind of Fibonacci 构造矩阵然后矩阵快速幂
- hbuild 快捷键
- Hibernate之关系映射的两种方式(xml映射、annotation注解映射)
- 个人觉得有收藏价值的网址
- acm谁是最好的Coder
- FreeRTOS学习——协同程序
- Raspberry Pi 3
- 蓝桥杯BASIC-11(十六进制转十进制)
- android 开发零起步学习笔记(二十):Android开发笔记:如何使用预先制作好的SQLite数据库(整理自网络)
- B/S与C/S架构
- Netty之实现自定义简单的编解码器一(MessageToByteEncoder<Integer>和ByteToMessageDecoder)
- 【Java】java嵌套类及内部类
- Sublime中的git插件配置
- github标准pull request提交流程