FreeRTOS学习笔记(9页).doc





《FreeRTOS学习笔记(9页).doc》由会员分享,可在线阅读,更多相关《FreeRTOS学习笔记(9页).doc(9页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、-FreeRTOS学习笔记-第 9 页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、优先级。值越大优先级越高。同等优先级时,按照os heart进行时间片轮转。xTaskHandle:任务句柄。改变该任务优先级、删除任务等时才会用到。不用写NULL。2. 开始多任务vTaskStartScheduler()3. 如何多任务切换调用API函数:vTaskDelay(unsigned int time)Time为多少个os heart。4. 时间片轮转例子创建两个任务xTaskCreate(USART1_Task, USART1, 256, (void *)str1, 3, NULL);xTaskCreate(USART2_Task, USART2, 256, (void *)s
3、tr2, 3, NULL);相同优先级,波特率可以设置低一些。然后就会看到这就是时间片轮转。5. 系统心跳频率在FreeRTOSConfig.h第97行的configTICK_RATE_HZ,源码使用1000HZ,就是1ms,如果为200就是200HZ,5ms。相关宏:portTICK_RATE_MS。6. vTaskDelayUntil和vTaskDelay不同,这个函数不包括函数运行时间,而vTaskDelayUntil包括。比如,一个函数A执行时间为2ms,使用vTaskDelay(10),则再次执行这个函数最少需要等待12ms。使用vTaskDelayUntil(10),则这2ms包括
4、在内,A以固定10ms周期运行。使用方法:红圈的地方就是固定心跳周期。7. 空闲任务钩子函数void vApplicationIdleHook(void)需使能FreeRTOSConfig.h中第126行的configUSE_IDLE_HOOK。8. 消息队列-Queue包含:#include queue.h声明:QueueHandle_t qMsg;创建:qMsg = xQueueCreate(4, 2); /4个队列,每个队列2个成员发送:xQueueSendToFront(qMsg, &Value, 1)/最后是超时时间xQueueSendToBack(qMsg, &Value, 1)/
5、最后是超时时间xQueueSend(qMsg, &Value, 1)/最后是超时时间成功返回pdPASS;失败返回errQUEUE_FULL。注:中断中的就是在函数名字后加上”FromISR”。接收:xQueueReceive(qMsg, &value, 1)xQueuePeek(qMsg, &value, 1) /不会删除读取的数据成功返回pdPASS;失败返回errQUEUE_EMPTY注:中断中的就是在函数名字后加上”FromISR”。删除:vQueueDelete(qMsg);查询队列未读数据个数:unsigned portBASE_TYPE count = 0;count = uxQ
6、ueueMessagesWaiting(qMsg);例程:按键发送队列消息,接收任务接收到就显示。按键是两个,这里没有截出来。9. 二值信号量包含:#include semphr.h声明:SemaphoreHandle_t sSem;创建:sSem = xSemaphoreCreateBinary(); /创建二值信号量(推荐) vSemaphoreCreateBinary(sSem); /创建二值信号量Give:portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;xSemaphoreGiveFromISR(sSem, &xHigherPriori
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- FreeRTOS 学习 笔记

限制150内