ImageVerifierCode 换一换
格式:DOCX , 页数:14 ,大小:794.88KB ,
资源ID:16028327      下载积分:5 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-16028327.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(FreeRTOS学习笔记.docx)为本站会员(b****7)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

FreeRTOS学习笔记.docx

1、FreeRTOS学习笔记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 *)str2,3,NULL);相似优先级

3、,波特率可以设立低某些。然后就会看到这就是时间片轮转。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涉及在内,A以固定10ms周期运营。用法:红圈地

4、方就是固定心跳周期。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)/最后是超时时间 xQueueSend(qMsg,&Value,1)

5、/最后是超时时间 成功返回pdPASS;失败返回errQUEUE_FULL。 注:中断中就是在函数名字后加上”FromISR”。 接受:xQueueReceive(qMsg,&value,1) xQueuePeek(qMsg,&value,1) /不会删除读取数据 成功返回pdPASS;失败返回errQUEUE_EMPTY 注:中断中就是在函数名字后加上”FromISR”。 删除:vQueueDelete(qMsg); 查询队列未读数据个数: unsigned portBASE_TYPE count = 0; count = uxQueueMessagesWaiting(qMsg);例程:按键

6、发送队列消息,接受任务接受到就显示。按键是两个,这里没有截出来。9.二值信号量包括:#include semphr.h声明:SemaphoreHandle_t sSem;创立:sSem = xSemaphoreCreateBinary();/创立二值信号量(推荐) vSemaphoreCreateBinary(sSem);/创立二值信号量Give:portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE; xSemaphoreGiveFromISR(sSem,&xHigherPriorityTaskWoken); if(xHigherPriorityTa

7、skWoken = pdTRUE) ; -中断办法 xSemaphoreGive(sSem); -普通办法Take:portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE; xSemaphoreGiveFromISR(sSem,&xHigherPriorityTaskWoken); if(xHigherPriorityTaskWoken = pdTRUE) ; -中断办法if(xSemaphoreTake(sSem,1) = pdTRUE) -普通办法删除:vSemaphoreDelete(sSem);例程Timer7每隔3sGive一次BinaryS

8、ema,LCD任务循环Take BinarySema,这是中断延迟解决例子。10.计数信号量包括:#include semphr.h声明:SemaphoreHandle_t sSem;创立:sSem = xSemaphoreCreateCounting(10,0);注:别的办法完全同样,只是创立是不同。第一种参数:计数容量。第二个参数:初值。需要在FreeRTOS.h中第252行#define configUSE_COUNTING_SEMAPHORES 0。改为1才可使用。例程按键控制Timer7启停,Timer7干事情就是每隔0.5s去Give一种CountingSema,LED任务就是Ta

9、ke到CountingSema,执行一次LED动作。当Timer7停止时,LED任务会吧CountingSema Take到为0为止。11.互斥信号量包括:#include semphr.h声明:SemaphoreHandle_t sSem;创立:sSem = xSemaphoreCreateMutex();/创立互斥信号量注:别的办法完全同样,只是创立是不同。需要在FreeRTOS.h中第244行#define configUSE_MUTEXES 1。改为1才可使用。例程:临界资源USART1_Task先调用Usart_Func函数,里边先获取互斥量,然后打印一句,积极放弃cpu控制权,此时

10、该运营USART2_Task,但是它获取不到互斥量,阻塞,然后再执行USART1_Task某些,执行完毕,give互斥量,此时USART2_Task即可打印出来。例程212.事件标志组-Event_Groups包括:#include event_groups.h声明:EventGroupHandle_t eEvent;/事件标志组句柄创立:eEvent = xEventGroupCreate();设立:xEventGroupSetBits(eEvent,0x01);/设立标志等待:getBits = xEventGroupWaitBits(eEvent,0x01,pdTRUE,pdTRUE,1

11、);/句柄-等待标志-完毕后与否清零标志-与否等待所有标志-超时时间 if(getBits & 0x01) = 0x01) / vTaskDelay(10); 删除:vEventGroupDelete(eEvent);例程:如果是等待bit1和bit3,pdTRUE、pdTRUE时(一定要判断if(getBits & 0x09) = 0x09),先发生Bit1事件,getBits就会始终为0x01,然后发生Bit3事件,才会触发然后标志组内部吧相应事件清零;pdTRUE、pdFALSE时,发生任意一种事件后,触发然后标志组内部吧事件清零。13.软件定期器包括:#include timers.h

12、声明:TimerHandle_t t1_Thdl,t2_Thdl,t3_Thdl;创立:t1_Thdl = xTimerCreate(Timer1,200,pdTRUE,(void *)1,(TimerCallbackFunction_t)Timer_Callback);参数1:定期器名,调试用到。参数2:定期周期。参数3:pdTRUE-周期定期器;pdFALSE-单次定期器。参数4:TimerID。容许各种定期器回调同一种函数,通过ID区别。参数5:回调函数地址。启停:xTimerStart(t1_Thdl,1); 句柄、等待时间。 xTimerStop(t1_Thdl,1);复位:xTimerReset(t1_Thdl,1);14.内存管理为了减少内存碎片产生。FreeRTOS提供了一套内存分派与释放办法。分派:void *pvPortMalloc(size_t xWantedSize)释放:void vPortFree(void *pv)用法同C库malloc和free。C库内存分派方案弊端

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2