FreeRTOS学习笔记

FreeRTOS学习笔记

ID:38980610

大小:827.16 KB

页数:15页

时间:2019-06-22

FreeRTOS学习笔记_第1页
FreeRTOS学习笔记_第2页
FreeRTOS学习笔记_第3页
FreeRTOS学习笔记_第4页
FreeRTOS学习笔记_第5页
资源描述:

《FreeRTOS学习笔记》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、FreeRTOS学习笔记使用注意:FreeRTOS与ucOS相比,需要修改启动文件。1.任务创建包含FreeRTOS.h//这个是必须要包含的//和task.h。调用API函数:xTaskCreatepvTaskCode:函数指针(函数名)。pcName:描述性任务名,只是用于辅助调试。可以通过FreeRTOSConfig.h第100行的configMAX_TASK_NAME_LEN来改变描述名长度。usStackDepth:任务栈大小。建议为64的整数倍。pvParameters:任务参数,void*类型。不用写NULL。uxPriority:任务优先级。值越大

2、优先级越高。同等优先级时,按照osheart进行时间片轮转。xTaskHandle:任务句柄。改变该任务优先级、删除任务等时才会用到。不用写NULL。2.开始多任务vTaskStartScheduler()1.如何多任务切换调用API函数:vTaskDelay(unsignedinttime)Time为多少个osheart。2.时间片轮转例子创建两个任务xTaskCreate(USART1_Task,"USART1",256,(void*)str1,3,NULL);xTaskCreate(USART2_Task,"USART2",256,(void*)str2,3

3、,NULL);相同优先级,波特率可以设置低一些。然后就会看到这就是时间片轮转。3.系统心跳频率在FreeRTOSConfig.h第97行的configTICK_RATE_HZ,源码使用1000HZ,就是1ms,如果为200就是200HZ,5ms。相关宏:portTICK_RATE_MS。4.vTaskDelayUntil和vTaskDelay不同,这个函数不包括函数运行时间,而vTaskDelayUntil包括。比如,一个函数A执行时间为2ms,使用vTaskDelay(10),则再次执行这个函数最少需要等待12ms。使用vTaskDelayUntil(10),则

4、这2ms包括在内,A以固定10ms周期运行。使用方法:红圈的地方就是固定心跳周期。1.空闲任务钩子函数voidvApplicationIdleHook(void){}需使能FreeRTOSConfig.h中第126行的configUSE_IDLE_HOOK。1.消息队列---Queue包含:#include"queue.h"声明:QueueHandle_tqMsg;创建:qMsg=xQueueCreate(4,2);//4个队列,每个队列2个成员发送:xQueueSendToFront(qMsg,&Value,1)//最后是超时时间xQueueSendToBack

5、(qMsg,&Value,1)//最后是超时时间xQueueSend(qMsg,&Value,1)//最后是超时时间成功返回pdPASS;失败返回errQUEUE_FULL。注:中断中的就是在函数名字后加上”FromISR”。接收:xQueueReceive(qMsg,&value,1)xQueuePeek(qMsg,&value,1)//不会删除读取的数据成功返回pdPASS;失败返回errQUEUE_EMPTY注:中断中的就是在函数名字后加上”FromISR”。删除:vQueueDelete(qMsg);查询队列未读数据个数:unsignedportBASE_

6、TYPEcount=0;count=uxQueueMessagesWaiting(qMsg);例程:按键发送队列消息,接收任务接收到就显示。按键是两个,这里没有截出来。1.二值信号量包含:#include"semphr.h"声明:SemaphoreHandle_tsSem;创建:sSem=xSemaphoreCreateBinary();//创建二值信号量(推荐)vSemaphoreCreateBinary(sSem);//创建二值信号量Give:portBASE_TYPExHigherPriorityTaskWoken=pdFALSE;xSemaphoreGiv

7、eFromISR(sSem,&xHigherPriorityTaskWoken);if(xHigherPriorityTaskWoken==pdTRUE);-----中断方法xSemaphoreGive(sSem);-----普通方法Take:portBASE_TYPExHigherPriorityTaskWoken=pdFALSE;xSemaphoreGiveFromISR(sSem,&xHigherPriorityTaskWoken);if(xHigherPriorityTaskWoken==pdTRUE);-----中断方法if(xSemaphoreTake

8、(sSem

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。