




已阅读5页,还剩3页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
FreeRTOS 初步 转 用了半天时间对 FreeRTOS 有了一个初步的认识 大概总结一下 其中混杂了系统实 现和实际应用方面的问题 现只是以应用为目的 实现方面待以后进一步研究 1 FreeRTOS 提供的功能包括 任务管理 时间管理 信号量 消息队列 内存管理 与平台有关的文件包含在 portable 文件夹中 主要是 port c portmacro h 两个文件 平台无关的文件主要是 list c 基本链表结构 queue c 包括消息队列 信号量的实现 croutine c tasks c 任务管理 时间管理 命名协定 RTOS 内核与范例程序源代码使用下面的协定 变量 char 类型的变量以 c 为前缀 short 类型的变量以 s 为前缀 long 类型的变量以 l 为前缀 float 类型的变量以 f 为前缀 用了半天时间对 FreeRTOS 有了一个初步的认识 大概总结一下 其中混杂了系统实 现和实际应用方面的问题 现只是以应用为目的 实现方面待以后进一步研究 1 FreeRTOS 提供的功能包括 任务管理 时间管理 信号量 消息队列 内存管理 与平台有关的文件包含在 portable 文件夹中 主要是 port c portmacro h 两个文件 平台无关的文件主要是 list c 基本链表结构 queue c 包括消息队列 信号量的实现 croutine c tasks c 任务管理 时间管理 命名协定 RTOS 内核与范例程序源代码使用下面的协定 变量 char 类型的变量以 c 为前缀 short 类型的变量以 s 为前缀 long 类型的变量以 l 为前缀 float 类型的变量以 f 为前缀 double 类型的变量以 d 为前缀 枚举变量以 e 为前缀 其他类型 如结构体 以 x 为前缀 指针有一个额外的前缀 p 例如 short 类型的指针前缀为 ps 无符号类型的变量有一个额外的前缀 u 例如无符号 short 类型的变量前缀为 us 函数 文件内部函数以 prv 为前缀 API 函数以其返回值类型为前缀 按照前面对变量的定义 函数的名字以其所在的文件名开头 如 vTaskDelete 函数在 Task c 文件中定义 数据类型 数据类型并不直接在 RTOS 内核内部引用 相反 每个平台都有其自身的定义方式 例如 char 类型定义为 portCHAR short 类型定义为 portSHORT 等 范例程序源代码 使用的就是这种符号 但这并不是必须的 你可以在你的程序中使用任何你喜欢的符 号 此外 有两种额外的类型要为每种平台定义 分别是 portTickType 可配置为 16 位的无符号类型或 32 位的无符号类型 参考 API 文档中的 定制部分获取 详细信息 portBASE TYPE 为特定体系定义的最有效率的数据类型 如果 portBASE TYPE 定义为 char 则必须要特别小心的保证用来作为函数返回值的 signed char 可以为负数 用于指示错误 2 FreeRTOS 内核支持优先级调度算法 每个任务可根据重要程度的不同被赋予一定 的优先级 CPU 总是让处于就绪态的 优先级最高的任务先运行 FreeRT0S 内核同 时支持轮换调度算法 系统允许不同的任务使用相同的优先级 在没有更高优先级任 务就绪的情况下 同一优先级的任务共享 CPU 的使用时间 3 freertos 既可以配置为可抢占内核也可以配置为不可抢占内核 当 FreeRTOS 被设置 为可剥夺型内核时 处于就绪态的高优先级任务能剥夺低优先级任务的 CPU 使用权 这样可保证系统满足实时性的要求 当 FreeRTOS 被设置为不可剥夺型内核时 处于 就绪态的高优先级任务只有等当前运行任务主动释放 CPU 的使用权后才能获得运行 这 样可提高 CPU 的运行效率 4 任务管理 系统为每个任务分配一个 TCB 结构 typedef struct tskTaskControlBlock volatile portSTACK TYPE pxTopOfStack 指向堆栈顶 xListItem xGenericListItem 通过它将任务连入就绪链表或者延时链表或者挂起链表 中 xListItem 包含其 TCB 指针 xListItem xEventListItem 通过它把任务连入事件等待链表 unsigned portBASE TYPE uxPriority 优先级 portSTACK TYPE pxStack 指向堆栈起始位置 signed portCHAR pcTaskName configMAX TASK NAME LEN 省略一些次要结构 tskTCB 系统的全局变量 static xList pxReadyTasksLists configMAX PRIORITIES 就绪队列 static xList xDelayedTaskList1 static xList xDelayedTaskList2 两个延时任务队列 static xList volatile pxDelayedTaskList static xList volatile pxOverflowDelayedTaskList 两个延时队列的指针 应该是可互 换的 static xList xPendingReadyList static volatile xList xTasksWaitingTermination 等待结束队列 static volatile unsigned portBASE TYPE uxTasksDeleted unsigned portBASE TYPE 0 结束队列中的个数 static xList xSuspendedTaskList 挂起队列 static volatile unsigned portBASE TYPE uxCurrentNumberOfTasks 记录了当前系统 任务的数目 static volatile portTickType xTickCount 是自启动以来系统运行的 ticks 数 static unsigned portBASE TYPE uxTopUsedPriority 记录当前系统中被使用的最高优 先级 static volatile unsigned portBASE TYPE uxTopReadyPriority 记录当前系统中处于就 绪状态的最高优先级 static volatile signed portBASE TYPE xSchedulerRunning 表示当前调度器是否在运行 也即内核是否启动了 任务建立和删除 挂起和唤醒 5 时间管理 操作系统总是需要个时钟节拍的 这个需要硬件支持 freertos 同样需要一个 time tick 产生器 通常是用处理器的硬件定时器来实现这个功能 时间片轮转调度中和延时 时间控制 它周期性的产生定时中断 所谓的时钟节拍管理的核心就是这个定时中断的服务程序 freertos 的时钟节拍 isr 中除去保存现场 灰度现场这些事情外 核心的工作就是调用 vTaskIncrementTick 函数 vTaskIncrementTick 函数主要做两件事情 维护系统时 间 以 tick 为单位 多少个节拍 处理那些延时的任务 如果延时到期 则唤醒任 务 任务可用的延时函数 vTaskDelay vTaskDelayUntil 特别之处在于 vTaskDelayUntil 是一个周期性任务可以利用它可以保证一个固定的 确定的 常数执行频率 而 vTaskDelay 无法保证 6 任务间的通信 详见 FreeRTOS 任务间通讯 1 当然可以用全局变量的形式通信 但是不安全 2 队列 xQueueHandle 是 FreeRTOS 中通信所需的主要数据结构 3 信号量 xSemaphoreHandle 有二进制信号量 计数信号量和互斥信号量 其都是以 队列为基础结构建立 二进制信号量可以用于中断和任务间的同步 也就是说希望任务随外部中断而执行 即外设给出 数据已就绪 信号 系统中断 任务收到此中断信号接收数据 互斥一般用于都共享资源或数据结构的保护 因为任务调度不能保证数据不被破坏 当一个任务需要访问资源 它必须先获得 take 令牌 当访问结束后 它必须释放令 牌 允许其他任务能够访问这个资源 对此还有待进一步实验研究 7 系统配置 freeRTOS 配置在 FREERTOS CONFIG H 里面 条目如下 是否配置成抢先先多任务内核 是 1 的时候 优先级高的任务优先执行 为 0 任务 就没有优先级之说 用时间片轮流执行 define configUSE PREEMPTION 1 IDLE 任务的 HOOK 函数 用于 OS 功能扩展 需要你自己编相应函数 名字是 void vApplicationIdleHook void define configUSE IDLE HOOK 0 SYSTEM TICK 的 HOOK 函数 用于 OS 功能扩展 需要你自己编相应函数 名字 是 void vApplicationTickHook void define configUSE TICK HOOK 0 系统 CPU 频率 单位是 Hz define configCPU CLOCK HZ 58982400 系统 SYSTEM TICK 每秒钟的发生次数 数值越大系统反应越快 但是 CPU 用在任 务切换的开销就越多 define configTICK RATE HZ 250 系统任务优先级数 5 说明任务有 5 级优先度 这个数目越大耗费 RAM 越多 define configMAX PRIORITIES 5 系统最小堆栈尺寸 注意 128 不是 128 字节 而是 128 个入栈 比如 ARM32 位 128 个入栈就是 512 字节 define configMINIMAL STACK SIZE 128 系统可用内存 一般设成除了操作系统和你的程序所用 RAM 外的最大 RAM 比如 20KRAM 你用了 2K 系统用了 3K 剩下 15 就是最大 HEAP 尺寸 你可以先设小然后 看编译结果往大里加 define configTOTAL HEAP SIZE 10240 任务的 PC 名字最大长度 因为函数名编译完了就不见了 所以追踪时不知道哪个 名字 16 表示 16 个 char define configMAX TASK NAME LEN 16 是否设定成追踪 由 PC 端 TraceCon exe 记录 也可以转到系统显示屏上 define configUSE TRACE FACILITY 0 就是 SYSTEM TICK 的长度 16 是 16 位 如果是 16 位以下 CPU 一般选 1 如果 是 32 位系统 一般选 0 define configUSE 16 BIT TICKS 0 简单理解以下就是和 IDLE TASK 同样优先级的任务执行情况 建议设成 1 对系统 影响不大 define configIDLE SHOULD YIELD 1 是否用 MUTEXES MUTEXES 是任务间通讯的一种方式 特别是用于任务共享资源 的应用 比如打印机 任务 A 用的时候就排斥别的任务应用 用完了别的任务才可以 应用 define configUSE MUTEXES 0 确定是否用递归式的 MUTEXES define configUSE RECURSIVE MUTEXES 0 是否用计数式的 SEMAPHORES SEMAPHORES 也是任务间通讯的一种方式 define configUSE COUNTING SEMAPHORES 0 是否应用可切换式的 API freeRTOS 同一功能 API 有多个 有全功能但是需求资源 和时间较多的 此项使能后就可以用较简单的 API 节省资源和时间 但是应用限制 较多 define configUSE ALTERNATIVE API 0 此项用于 DEBUG 来看是否有栈溢出 需要你自己编相应检查函数 void vApplicationStackOverflowHook xTaskHandle pxTask signed portCHAR pcTaskName define configCHECK FOR STACK OVERFLOW 0 用于 DEBUG 登记 SEMAPHORESQ 和 QUEUE 的最大个数 需要在任务用应用函数 vQueueAddToRegistry 和 vQueueUnregisterQueue define configQUEUE REGISTRY SIZE 10 设定可以改变任务优先度 define INCLUDE vTaskPrioritySet 1 设定可以查询任务优先度 define INCLUDE uxTaskPriorityGet 1 设定可以删除任务 define INCLUDE vTaskDelete 1 据说是可以回收删除任务后的资源 RAM 等 define INCLUDE vTaskCleanUpResources 0 设置可以把任务挂起 define INCLUDE vTaskSuspend 1 设置可以从中断恢复 比如系统睡眠 由中断唤醒 define INCLUDE vResumeFromISR 1 设置任务延迟的绝对时间 比如现在 4 30 延迟到 5 00 时间都是绝对时间 define INCLUDE vTaskDelayUntil 1 设置任务延时 比如延迟 30 分钟 相对的时间 现在什么时间 不需要知道 define INCLUDE vTaskDe
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《T实施与管理》课件
- 小学舞蹈团队活动方案
- 《黄山的云海课件语文A版》
- 《化学误差理论》课件
- 烟草包装设备的快速更换技术考核试卷
- 聚己内酰胺纤维应用考核试卷
- 《血小板减少性疾病的诊断与治疗》课件
- 粮食仓储农业废弃物利用考核试卷
- 塑料零件在汽车行业的应用考核试卷
- 纺织原料企业的生产计划与调度考核试卷
- 备战2025年高考英语抢分秘籍(新高考专用)猜押语法填空(话题+体裁)(学生版+解析)
- 船舶与海洋工程2025年相关知识考试试卷及答案
- 吉林银行笔试题库及答案
- 《危险化学品企业安全生产标准化规范》专业深度解读与应用培训指导材料之8:5管理要求-5.8作业安全(雷泽佳编制-2025A0)
- 江苏省南京市、盐城市2025届高三年级5月第二次模拟考试英语(南京盐城二模)
- Unit6Integration(A-C)课件译林版(2024)英语七年级下册
- (二模)2024~2025学年度苏锡常镇四市高三教学情况调研(二)物理试卷(含答案)
- 基于深度学习的人脸老化算法研究
- 期货从业人员资格2024年笔试考试题库含答案
- 比亚迪充电桩转让合同协议
- 甘肃开放大学2024年《信息技术与信息管理》形考作业1-4答案
评论
0/150
提交评论