为什么要让你的单片机裸奔/strong>
什么是FreeRTOS/h2>
首先看到两个概念:
- RTOS:实时操作系统,目前主流的嵌入式操作系统有:UCOS、FreeRTOS、LWIP、EMWIN、RT-Thread 等
- FreeRTOS:FreeRTOS是一个迷你的实时操作系统内核。作为一个轻量级的操作系统,功能包括:任务管理、时间管理、信 量、消息队列、内存管理、记录功能、软件定时器、协程等,可基本满足较小系统的需要
也许在百度百科截取的这段解释不够接地气,通俗的解释就是更加有序的管理单片机的各个任务功能执行。
为什么要学习FreeRTOS/h2>
采用嵌入式实时操作系统(RTOS)可以更合理、更有效地利用CPU的资源,简化应用软件的设计,缩短系统开发时间,更好地保证系统的实时性和可靠性
通常我们在写单片机程序的时候,都是将许多功能写成一个一个的函数,然后写在main函数中的while(1)里,与中断进行配合实现系统功能。这种情况就叫做前后台系统,通常也称之为——裸奔。但是加上了RTOS之后就是穿上了实时操作系统的衣服,更加合理,更加高级。
这里有一个关于竹林七贤之一——刘伶的故事:
有人去拜访刘伶,适逢他喝醉了酒,一丝不挂地在屋里乱晃,不禁讥讽道:“你也是礼教之人,如此行径成何体统刘伶一听,颇不以为然地反唇相讥:“我以天地为房屋,以房屋为衣裳,你怎么跑到我裤子里来权了客人听了瞠目结舌,无言以对。
从上可以看出,穿衣与否并不是评判是否成体统的标志,影射到单片机上也是一样,不是加了操作系统就一定优于裸机开发,还要视具体情况而定。
在stm32上的移植
首先是到FreeRTOS官 下载移植文件:官 地址外国 站可能有点慢
下载好之后是一个exe文件:
具体过程
修改SYSTEM文件夹
修改sys.h文件
修改usart.c文件
第一处:
第二处:将OSIntEnter()和 OSIntExit()删除掉
修改delay.c文件,这里有点多直接替换成下面的代码即可
#include "delay.h"#include "sys.h"#if SYSTEM_SUPPORT_OS#include "FreeRTOS.h" #include "task.h" #endifstatic u8 fac_us=0; static u16 fac_ms=0; extern void xPortSysTickHandler(void);void SysTick_Handler(void){ if(xTaskGetSchedulerState()!=taskSCHEDULER_NOT_STARTED)xPortSysTickHandler(); }} void delay_init(){ u32 reload; SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK); fac_us=SystemCoreClock/1000000; reload=SystemCoreClock/1000000; reload*=1000000/configTICK_RATE_HZ; fac_ms=1000/configTICK_RATE_HZ; SysTick->CTRL|=SysTick_CTRL_TICKINT_Msk; SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk; } void delay_us(u32 nus){ u32 ticks; u32 told,tnow,tcnt=0; u32 reload=SysTick->LOAD; ticks=nus*fac_us; told=SysTick->VAL; while(1) { tnow=SysTick->VAL; if(tnow!=told) { if(tnowtold)tcnt+=told-tnow; else tcnt+=reload-tnow+told; told=tnow; if(tcnt>=ticks)break; } }; 声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!