FreeRTOS 系统使用
来源:互联网 发布:大数据比赛 编辑:程序博客网 时间:2024/06/05 04:55
ps:参考其他人的教程,先记录以后用到查一查。
第一章 FreeRTOS 基础
1. 任务函数
任务函数原型:void ATaskfunction(void *pvParameters);
(1)每个任务通常会运行在一个死循环中,FreeRTOS任务不允许以任何形式从实现函数中返回;
(2)创建的每个任务实例拥有自己的栈空间和自动变量;
注:在任务实例中定义的变量如果是static修饰,则所有任务实例共享此变量。
(3)如果一个任务不再需要,则必须在函数运行完之前用vTaskDelete()删除;
2. 任务状态
(1)任务从非运行态转移到运行态称为“切入”;任务从运行态转移到非运行态成为“切出”;
3.任务创建
(1) xTaskCreate() API 原型:
portBASE_TYPE xTaskCreate( pdTASK_CODE pvTaskCode, const signed portCHAR * const pcName, unsigned portSHORT usStackDepth, void *pvParameters, unsigned portBASE_TYPE uxPriority, xTaskHandle *pxCreatedTask );注:usStackDepth 指定的是栈空间可以保存多少个 字(word),而不是多少个字节(byte);栈深度x栈宽度结果不能超过 size_t 类型所能表达的最大值;
4.任务优先级
(1)任务的优先级可以在调度器启用之后调用 vTaskPrioritySet() 函数进行修改;
(2)配置最大优先级数目:configMAX_PRIORITYS的值越大,内核花销的内存空间就越多;
(3)优先级号 0 表示最低优先级;
(4)心跳中断的频率由configTICK_RATE_HZ设定,设置为100 则时间片长度为 10ms ;
5.任务的非运行态
(1)“阻塞”:一个任务正在等待某个事件;任务进入阻塞态可以等待的两种事件:定时事件、同步事件;
(2)“挂起”:对调度器而言不可见;使任务挂起调用vTaskSuspend(),唤醒任务调用 vTaskResume() 或 vTaskResumeFromISR() ;
(3)“就绪”处于非运行态,但没有阻塞也没有挂起,“准备运行”但尚未运行;
6.空闲任务
(1)空闲任务优先级为0;
(2)空闲任务钩子函数用于:a、执行低优先级,后台或需要不停处理的功能代码;b、测试系统处理裕量;c、将处理器配置到低功耗模式;
(3)空闲任务钩子函数遵从规则:a、绝不能阻塞或挂起;b、如果应用程序用到了vTaskDelete() 函数,空闲钩子函数必须能够尽快返回,否则空闲任务无法进行内核资源回收工作;
(4)空闲任务钩子函数原型:
void vApplicationIdleHook(void);注:configUSE_IDLE_HOOK必须定义为1,空闲钩子函数才能被调用。
第二章 队列
(1)创建队列
函数原型:xQueueHandle xQueueCreate( unsigned portBASE_TYPE uxQueueLength, unsigned portBASE_TYPE uxItemSize );
(2)队列中读取数据
a、xQueueReceive() 用于从队列中读取数据单元,同时数据单元从队列中删除;
b、xQueuePeek() 从队列中读取数据后,数据单元不会从队列中删除;
(3)查询队列中当前有效数据单元个数
函数原型:unsigned portBASE_TYPE uxQueueMessagesWaiting( xQueueHandle xQueue );
(4)队列用于大型数据
当队列存储数据单元较大时,需使用传递数据指针的方式使用队列;切记用指针访问任务栈上分配的空间;
第三章 中断
(1)二值信号量同步
a、创建二值信号量:
void vSemaphoreCreateBinary( xSemaphoreHandle xSemaphore );注:此 api 在实现上是一个宏,信号量变量要直接传入,而不是传址。
b、获取信号量
除了互斥信号量以外,其他所有信号量都可以使用 xSemaphoreTake() 来获取。
(2)计数信号量
a、计数信号量的两种典型用法:事件计数和资源管理;
b、创建计数信号量:使用 xSemaphoreCreateCounting() 函数创建;
- FreeRTOS 系统使用
- FreeRTOS系统
- freertos函数vTaskList使用
- FreeRTOS 队列使用
- FreeRTOS使用总结
- freeRTOS xTaskCreate使用示例
- FreeRTOS 任务调度 系统节拍
- FreeRTOS学习之:系统延时
- FreeRTOS系统内核控制函数
- STM32使用freertos时在中断中调用系统函数的注意点
- stm32f 使用freertos时在中断中调用系统函数的注意点
- FreeRTOS高级篇9---FreeRTOS系统延时分析
- FreeRTOS高级篇9---FreeRTOS系统延时分析
- FreeRTOS
- FreeRTOS
- STM32F4使用FreeRTOS的中断
- FreeRTOS 软件定时器的使用
- STM32F4使用FreeRTOS的中断
- (一 附)多进程 多线程 与 cpu 、操作系统
- zoj-1115
- DOM文档对象模型
- springMVC之前,关于servlet
- spring boot 搭建的一个企业级快速开发脚手架
- FreeRTOS 系统使用
- java非递归实现单链表反转
- 17.11.16,web学习第五天,还有一年,努力吧青年!
- 链栈 尹成
- linux mint如何安装输入法(以google输入法为例)
- hive中的外表EXTERNAL TABLE
- CCF-训练50题-NO.26-在霍格沃茨找零钱
- Primitive Topology
- CodeForces 890C Petya and Catacombs